`

单例类,线程安全懒加载。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解析成为各种运算或者值。




分享到:
评论

相关推荐

    线程安全的单例模式

    单例模式(Singleton Pattern)是软件开发中最常用的创建型设计模式之一,它的主要目标是确保一个类只有一个实例,并提供一个全局访问点。单例模式在很多场景下都非常有用,例如系统配置管理、日志记录等场合,这些...

    使用C++11实现线程安全的单例模式

    在C++编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。线程安全的单例模式在多线程环境下尤其重要,因为不正确的实现可能导致多个线程创建多个实例,这违反了单例模式...

    浅议单例模式之线程安全(转)

    单例模式是软件设计模式中的一种经典模式,它限制了类的实例化,确保一个类在整个应用程序中只有一个实例。在多线程环境下,线程安全的单例模式尤为重要,因为如果不正确实现,可能会导致多个线程同时创建多个实例,...

    synchronized与单例的线程安全

    单例模式是一种设计模式,保证一个类只有一个实例,并提供全局访问点。在多线程环境中,如果不采取措施,可能会创建多个实例,导致资源浪费和逻辑错误。有多种实现单例的方式,其中线程安全的实现包括: 1. 饿汉式...

    Java设计模式之单例模式的七种写法

    单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常被设计成单例。这些应用都或多或少...

    线程安全单例

    在软件开发过程中,单例模式是一种常用的设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。单例模式的应用非常广泛,比如数据库连接池管理、日志对象等场景。然而,在多线程环境下,如果单例模式...

    23钟设计模式之单例模式

    单例模式是一种常用的设计模式,它的核心思想是在整个应用程序中,一个类只能有一个实例存在。单例模式常用于控制资源的共享,例如数据库连接池、日志服务等。单例模式有多种实现方式,常见的包括懒汉式、饿汉式以及...

    Java单例类

    Java单例类是一种常见的设计模式,具有三个特点:单例类只能有一个实例、单例类必须自己创建自己的唯一实例、单例类必须给所有其他对象提供这一实例。单例模式可以分为三种:懒汉子式单例、饿汉子式单例、注册式单例...

    设计模式单例模式

    单例模式是软件设计模式中的一种基础且广泛应用的模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统中需要频繁创建和销毁对象,且对象创建成本较高,或者需要共享资源的情况下非常...

    单例设计模式.pdf

    单例设计模式是一种在软件设计中广泛使用的设计模式,它属于创建型模式,其核心目标是确保类只有一个实例,并提供一个全局访问点。这个模式在Java中尤其常见,因为Java的垃圾回收机制允许对象长时间驻留在内存中,...

    7种单例模式

    单例模式是软件设计模式中的一种经典模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如控制共享资源、管理配置对象等。下面将详细介绍七种常见的单例模式实现...

    设计模式——单例模式

    单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式常用于控制共享资源,如数据库连接池、线程池或者日志系统等,确保这些资源在整个应用程序中只被创建一次。 单例模式的核心...

    多线程单例模式并发访问

    - **懒汉式**:通过静态内部类或者双重检查锁定的方式来实现线程安全的懒加载单例模式,即在第一次使用时才初始化。 #### 十、线程安全的懒汉式单例 懒汉式单例在实现线程安全性时,通常采用双重检查锁定技术: ``...

    单例设计模式源码和案例解析

    单例设计模式是一种常用的设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在Java编程中,单例模式的应用广泛,例如控制资源的共享、管理配置信息等。本篇将深入解析单例设计模式的四种实现方式,并通过...

    三种工厂设计模式和两种单例模式

    在本文中,我们将深入探讨三种工厂设计模式——简单工厂模式、抽象工厂模式和工厂方法模式,以及两种单例模式——饿汉单例模式和懒汉单例模式。这些模式都是面向对象设计中的重要组成部分,对于理解和构建可维护、可...

    Java的单例设计模式

    单例设计模式是软件设计模式中的经典模式之一,它的核心思想是确保一个类只有一个实例,并提供全局访问点。这种模式在Java中广泛应用于系统配置、线程池、缓存管理等场景,因为这些场景通常只需要一个共享的全局对象...

    java单例设计模式的好处

    单例设计模式是软件开发中一种重要的设计模式,它的核心思想是确保一个类只有一个实例,并提供全局访问点。在Java中,单例模式通常用于控制特定类的实例化过程,以达到节省系统资源、控制并发访问和实现数据共享等...

    设计模式之单例模式(结合工厂模式)

    单例模式是软件设计模式中的一种经典模式,它保证了类只有一个实例存在,并提供一个全局访问点。在Java等面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。结合工厂模式,...

    Java 单例模式 工具类

    Java中的单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供全局访问点。在Java编程中,单例模式常用于控制资源的访问,比如数据库连接池、线程池或者日志对象等。本篇文章将深入探讨如何在Java中...

    设计模式——单例模式(懒汉模式)

    总的来说,单例模式是一种常见的设计模式,懒汉式单例模式则是其中一种实现策略,它的主要特点是延迟加载和线程安全。在选择单例模式实现时,开发者需要根据具体需求考虑性能、线程安全以及代码简洁性等因素。

Global site tag (gtag.js) - Google Analytics