23种设计模式总结(一)

总体来说分为3类:

创建型:工厂方法模式、抽象工厂模式、单例、建造者、原型

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

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

 

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

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

典型场景:需要经常性的创建同一类型的对象

难易程度:比较简单

广泛程度:非常广泛

 

单例

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

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

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

广泛程度:非常广泛

 

Builder

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

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

难易程度:稍显困难

广泛程度:比较广泛

 

原型

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

典型场景:相似对象的创建

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

广泛程度:不太广泛

 

转载于:https://my.oschina.net/dongtianxi/blog/795555

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值