设计模式(Java版)
说明:本资源是本人学习需要,通过网上查询,摘取网上有关设计模式好的解释,再由个人整理而得,绝对详解,看代码时最好结合word文档的图解一起,学习使用
源码和文档下载:http://download.youkuaiyun.com/detail/u010651186/7736041
设计模式分为三大类:
创建型,共五种:单例模式、静态工厂模式(普通工厂)、抽象工厂模式、建造者模式、原型模式。
结构型,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型,共十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
创建型:
1.单例模式(singleton)
(保证一个类仅有一个实例,并提供一个访问它的全局访问方法)
优点:
1、控制实例产生的数量,达到节约资源的目的
2、控制资源的使用,通过线程同步来控制资源的并发访问
3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信
适用:
1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
2.静态工厂/普通工厂(factory)
(由一个工厂对象决定创建出哪一种产品类的实例)
优点:
外界可以不用直接创建具体产品对象,仅仅需要负责“消费”对象就可以了,而不必管这些对象究竟如何创建及如何组织的
适用:
出现了大量的产品需要创建,并且具有共同的接口,希望由实现了该接口的类来指定它所创建的对象的时候时,可以通过工厂方法模式进行创建
3.抽象工厂(abstract factory)
(指当有多个抽象角色时,使用的一种工厂模式;抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象)
优点:
1. 隔离了具体类的生成,使得客户不需要知道什么被创建了
2. 当一个产品族中的多个对象被设计成一起工作时,能保证客户端始终只使用一个产品族中的对象
适用:
1.一个系统要独立于它的产品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示他们的接口而不是实现时。
普通工厂与抽象工厂的比较:
普通工厂的短处:产生产品系列的时候会很麻烦,工厂泛滥;抽象工厂的短处:产生产品品种的时候要改动的地方太多;
4.建造者模式(builder)
(将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示])
适用:
1.当创建复杂对象的算法应该独立于该对象的组成部分及他们的装配方式时。
2.当构造过程必须允许被构造的对象有不同的表示时。
3.在Java的应用中JavaMail使用到了该模式。
与工程模式的区别就是:
在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。
5.原型模式(prototype)
(将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象)
适用:
1.当一个系统应该独立于它的产品创建、构成和表示时。
2.当要实例化的类是在运行时刻指定时,例如,通过动态装载。
3.为了避免创建一个与产品类层次平行的工厂类层次时。
4.当一个类的实例只能有几个不同状态组合中的一种时。
下接:23种设计模式(二)