23种设计模式总结(一)

整体来讲分为3类:安全

建立型:工厂方法模式、抽象工厂模式、单例、建造者、原型多线程

结构型:适配器、装饰器、代理、外观、桥接、组合、享元jvm

行为型:策略、模板方法、观察者、迭代子、责任链、命令、备忘录、状态、访问者、中介者、解释器函数

 

工厂方法模式和抽象工厂模式ui

要点:其实这两种模式在我看来并没有太大的不一样,2个要点,对象不是new出来的(固然只是看起来不是new出来的),而是经过工厂类建立的,建立的是同一接口不一样实现class的实例。那么具体返回哪一个实现类的实例,要么经过参数不一样来区分,要么经过方法不一样来区分,要么经过类不一样来区分,反正总要分出来。线程

典型场景:须要常常性的建立同一类型的对象代理

难易程度:比较简单对象

普遍程度:很是普遍接口

 

单例get

要点:保证一个类的实例,在一个jvm当中,只有一份,简单的单例实现,包括一个私有的构造函数,一个静态私有的类对象(instance),一个静态共有的getInstance方法,可是这种方法在多线程环境下是不安全的,有可能这个instance对象会被实例化多份。能够经过 synchronized  来保证线程安全,也能够经过静态内部类(内部类是延迟加载的,能够保证在第一次用到的时候才实例化instance)持有这个instance来保证线程安全。

典型场景:某一个类的对象,系统当中只须要一份

难易程度:稍显困难(考虑线程安全的状况下)

普遍程度:很是普遍

 

Builder

其实,builder和factory是有其类似之处的,区别在于,factory模式当中,其实只有2类角色,工厂和产品。而在builder当中,包括了3个角色,指挥者、构造者、产品。用于建立较为复杂的对象,同时清楚地体现其中的建立过程。

典型场景:对复杂对象的建立

难易程度:稍显困难

普遍程度:比较普遍

 

原型

经过clone的方式,获取对象。浅克隆:调用Object的clone方法,对于对象内部的对象,不会进行克隆;深克隆:能够经过序列化的方式来实现,对于对象内部的对象,也会进行克隆。

典型场景:类似对象的建立

难易程度:深克隆的实现稍显困难

普遍程度:不太普遍

相关文章
相关标签/搜索