`

单例类,线程安全懒加载。23种设计模式总结

 
阅读更多
单例模式的七种写法:
http://cantellow.iteye.com/blog/838473

双重校验锁:
public class Singleton {

    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {
// synchronized关键字锁住的是这个对象,这样的用法,在性能上会有所下降,因为每次调用getInstance(),都要对对象上锁,事实上,只有在第一次创建对象的时候需要加锁,之后就不需要了,所以,这个地方需要if (singleton == null)。
	    if (singleton == null) {  
	        synchronized (Singleton.class) {
		        if (singleton == null) {
// 在Java指令中创建对象和赋值操作是分开进行的,也就是说instance = new Singleton();语句是分两步执行的。但是JVM并不保证这两个操作的先后顺序,也就是说有可能JVM会为singleton分配空间,直接空间赋值给instance成员,最后后再去初始化这个Singleton实例。
		            singleton = new Singleton();  
		        }  
	        }  
	    }  
	    return singleton;  
	}  
}


https://www.cnblogs.com/geek6/p/3951677.html
一.创建型模式:5
1.工厂模式
2.抽象工程模式
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 
3.单例模式
4.建造模式
工厂模式关注的是创建单个产品,而建造者模式则关注创建符合对象,多个部分。
5.原型模式
该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。
clone是object的浅克隆

二.结构型模式:7
6.适配器模式(adapter)
类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。
接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可。
7.装饰模式(Decorator)
装饰模式就是给一个对象增加一些新的功能,装饰的类实现同一个接口同被装饰的类。
8.代理模式(Proxy)
代理模式和装饰模式非常类似,甚至代码都类似。二者最主要的区别是:代理模式中,代理类对被代理的对象有控制权,决定其执行或者不执行。而装饰模式中,装饰类对代理对象没有控制权,只能为其增加一层装饰,以加强被装饰对象的功能,仅此而已。
代理比装饰权利大。

9.外观模式(Facade)
小类(cpu,磁盘,内存)之间的关系被放在了大类(计算机)里,这样就起到解耦的作用

10.桥接模式(Bridge)
将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动DriverManager的程序来桥接就行了。

11.组合模式(Composite)
和二叉树java的实现一样,组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推。

12.享元模式(Flyweight)
对象的共享,即共享池,减少内存的开销,通常与工厂模式一起使用。工厂需要检查共享池如果有,就返回已经存在的对象,如果没有,则创建一个新对象



三.行为型模式:11

13.策略模式(strategy)
策略模式的决定权在用户,外部用户只需要决定用哪个算法即可,策略模式定义了一系列算法,并将每个算法封装起来,想使用哪个可以切换哪个,为一系列实现类提供统一的方法。

14.模板方法模式(Template Method)
一个抽象类中,有一个主方法,定义一个类继承该抽象类,重写抽象方法,通过调用抽象类(AbstractCalculator cal = new Plus();)实现对子类的调用。
抽象类的方法,给子类当模板了。

15.观察者模式(Observer)
当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。

16.迭代子模式(Iterator)
是需要遍历的聚集对象,二是迭代器对聚集对象遍历访问。
Iterator实现原理(源码

17.责任链模式(Chain of Responsibility)
对象持有对下一个对象的引用,形成一条链。而一个请求来了,请求者不知道请求到链哪里了,可在构造器里打标记用于到哪了。

18.命令模式(Command)
命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开,熟悉Struts的同学应该知道,Struts其实就是一种将请求和呈现分离的技术,其中必然涉及命令模式的思想!
Invoker是调用者(司令员),Receiver是被调用者(士兵),MyCommand是命令,实现了Command接口,持有接收对象

19.备忘录模式(Memento)
备份模式

20.状态模式(State)
当对象的状态改变时,同时改变其行为,根据对象的某一属性,区别开他们的一些功能,比如说简单的权限控制等

21.访问者模式(Visitor)
访问者模式适用于数据结构相对稳定的系统,把数据结构和算法解耦
有存储取得对象A Subject类,有对对象A操作逻辑的B Visitor,Ab对象传给处理。

22.中介者模式(Mediator)
类类之间有依赖关系的话,只要修改一个对象,其它关联的对象都得进行修改。
使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行,这有点像spring容器的作用。

23.解释器模式(Interpreter)
应用在OOP(面向对象)开发中
上下文context对象经过interpreter解析成为各种运算或者值。




分享到:
评论

相关推荐

    设计模式第二天学习内容

    单例模式如果使用不当,就容易引起线程安全问题。 * 饿汉式不存在线程安全问题,但是它一般不被使用,因为它会浪费内存的空间 * 懒汉式会合理使用内存空间,只有第一次被加载的时候,才会真正去创建对象。但是这种...

    –设计模式–五种实现单例模式的方式

    ① 应用场景实例② 模式优点③ 模式缺点④ 注意事项■ 单例模式的五种实现方式饿汉式代码实现懒加载代码实现双重检测锁代码实现静态内部类代码实现(也是懒加载的一种方式)枚举代码实现:diamond_suit: 总结 ...

    设计模式(一)——单例模式

    饿汉式单例:类加载时就进行了实例化 懒汉式单例:第一次使用时才进行实例化。 应用:单例模式应用的非常广泛。我们经常遇到这样的场景,线程A和线程B对同一个对象执行操作,但是在A里面new了后,B里面不便取,使的A...

    Android设计模式之单例模式解析

    在日常开发过程中时常需要用到设计模式,但是设计模式有23种,如何将这些设计模式了然于胸并且能在实际开发过程中应用得得心应手呢?和我一起跟着《Android源码设计模式解析与实战》一书边学边应用吧! 今天我们要讲...

    OBJECTIVE-C编程之道 IOS设计模式解析电子书+源代码

    C中实现单例模式7.4 子类化Singleton7.5 线程安全7.6 在Cocoa Touch框架中使用单例模式7.6.1 使用UIApplication类7.6.2 使用UIAccelerometer类7.6.3 使用NSFileManager类7.7 总结第三部分 接口适配第8章 适配器8.1 ...

    酒店管理客房系统Java源码-GOF23:Java实现23种设计模式学习笔记

    枚举单例(线程安全,调用效率高,不能延时加载) : 简单工厂模式:用来生产同一等级结构中的任意产品(对已有产品新增功能,需要修改源代码)虽然能通过工厂来创建对象,但是违反了开闭原则。一旦增加功能需要在...

    DesignPattern:Java设计模式

    只要应用中不使用内部类 JVM 就不会去加载这个单例类,也就不会创建单例对象,从而实现懒汉式的延迟加载和线程安全。 饿汉模式 否 慢 快 是 单例对象初始化非常快,而且占用内存非常小的时候这种方式是比较合适的,...

    day020-继承加强和设计模式代码和笔记.rar

    建议用当前线程类的加载器方式获取流,线程安全问题 类加载器:( 扩展,5个月后会讲) 加载字节码的一个类而已: 1. 启动类加载器(Bootstrap classLoader) c++ 本地代码实现的类加载器,它...

    java简易版开心农场源码-GOF23:一起来学习设计模式吧~

    常见的五种单例模式实现方法: 主要: 饿汉式(线程安全, 调用效率高, 但是不能延时加载) 懒汉式(线程安全, 调用效率不高, 但是可以延时加载) 其他: 双重检测锁式(由于 JVM 底层内部模型原因, 偶尔会出问题, 不建议使用...

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...

    Singleton.html

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。 整理了六种单例模式的实现方式以及它们之间的区别,包括是否线程安全,是否懒加载,是否反射安全,是否序列号安全

    leetcode下载-JavaLearn:算法、JVM、JUC、设计模式学习记录(Java语言实现)

    2.设计模式包下是23种设计模式的代码实例 创建者模式 单例模式的6种写法 3.jvm包 子类父类的加载顺序 4.juc包 创建线程的4种方式 lock接口的学习 5.JavaABC包下是一些Java基础知识的代码练习 nio 反射

    JavaStudy:Java 学习记录

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    8-14 B站 C++安全开发面经 《腾讯》.docx

    设计模式:单例模式、工厂模式对其进行复述 反向:汇编, 1.jump几种,占几字节? 答:短跳 2字节 ;近跳 3字节;远跳 5字节 2.ret是函数返回时使用,那么iret是什么时候使用呢? 1.想让调试器在下一条汇编...

    JAVA超全面试突击包-答案讲义

    涵含各种重要的JAVA编程知识点,面试突击专用 内容包括:Spring、SprngBoot、SpringCloud、Redis、MySQL、MyBatis、JVM、多...设计模式:包括常见的设计模式,如单例模式,工厂模式,观察者模式等,以及它们的使用场景

    Java基础语法面试题.docx

    Java基础语法面试题资源通常是指帮助准备...设计模式:介绍常见的设计模式,如单例模式、工厂模式、观察者模式等。 常见算法和数据结构:可能包含一些常见的算法问题,如查找、排序、递归等,以及与之相关的数据结构。

    Java初级开发面试题

    Java面试题包括但不限于: Java基础知识:语法、面向对象编程、...Java设计模式:单例模式、工厂模式、代理模式等。 网络编程:TCP/IP、HTTP、Web Services等。 数据库相关:SQL语句、数据库连接池、事务管理等。

    北京百度java面试题大全

    Java面试题是针对Java编程语言的技术和知识的一系列问题,用于考察面试者在Java开发方面的能力和...设计模式:涉及常见的设计模式,如单例模式、工厂模式、观察者模式等。 Java框架和技术:包括Spring、Hibernate、My

    java课程设计大作业-基于java构建的CrazyArcade泡泡堂游戏(源码+资源文件+说明文档)

    model.loader:包含资源加载器用于读取配置文件等信息,使用了单例设计模式 model.manager:包含元素管理器、工厂等,用于控制游戏各元素 model.vo:各种实体类,包括玩家、NPC、炸弹、方块等等 pro:配置文件目录,...

    基于JavaSwing设计开发的泡泡堂游戏【100012843】

    model.loader:包含资源加载器用于读取配置文件等信息,使用了单例设计模式 model.manager:包含元素管理器、工厂等,用于控制游戏各元素 model.vo:各种实体类,包括玩家、NPC、炸弹、方块等等 pro:配置文件目录,...

Global site tag (gtag.js) - Google Analytics