简单工厂模式
属于创建型模式。简单工厂模式是由一个工厂对象决定创建出哪种产品的实例。
通过控制代码来控制工厂。
工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪个类。
通过接口或者是抽象类让客户端之间选择对应的工厂。
抽象工厂模式
其实就是增多工厂的功能,代码表现接口或抽象类的方法增多。
有个缺点是在改动声明过产品类的地方进行大量修改。解决方法是使用反射或者是用控制代码。
工厂模式总结
1.简单工厂
优点是
- 分离了客户端和后台逻辑
- 实现简单,易于操作
缺点是
- 违背了开放-封闭原则
- 添加新产品比较麻烦
2.工厂模式
优点是:
- 易于添加新的产品
- 后台符合开放-封闭原则
缺点是:
- 新产品带来了大量新的类的创建,增加了工作量
- 客户端违反了开放-封闭原则。
3.抽象模式
优点是:
- 分离了具体的类,工厂封装了创建产品对象的责任和过程,将客户端和类的实现分离。客户端通过抽象接口操纵实例。
- 易于交换产品系列。
- 有利于产品的一致性。
缺点是:
- 难以支持新种类的产品
单例模式
UML结构图:
适用于单例模式:
- 当类只能有一个实例而且第三方可以从一个公共的访问点访问它时。
- 当一个唯一的实例可以通过子类化来扩展,而且第三方需要在不更改代码的情况下就能使用一个扩展的实例。
- 对唯一的实例做出访问控制。
- 允许改变实例的数目,事实上单例模式只是实例有限的类的一种特例,通过计数等方式可以做到双例等。
建造者模式
结构图如下:
UML图含义见该文。
与工厂模式对比:
共同点:
- 2者都属于创建者模式,目的都是得到一个对象。
- 将对象的创建过程与客户端进行隔离
区别:
- 工厂模式侧重将对象的实例化延迟到子类中,而创建者模式的侧重点则是保持一个对象创建过程的稳定性。
总结:创建者模式可以说是对流程的抽象,当创建复杂对象的算法应该独立于该对象的组成部分以及他们的组装方式的情况适用于建造者模式。
原型模式
原型模式也同样对类的使用者隐藏了对象创建的细节,但是跟其他创建型模式不同的是:其他模式是通过一个类进行实例化来创建新的对象,而原型模式是通过复制一个已经存在的对象来生成新的对象。
优点:
- 使代码更加简洁。
- 提高运行效率,因为new的话,相比于克隆更影响性能。
当一个系统应该独立于它的产品创建、构成和表示时,可以使用原型模式,但是应该充分考虑线程的安全性和复制的深度。
适用情况如下:
- 当要实例化的类是在运行时定。
- 为了避免创建一个产品类层次平行的工厂类层次时。
- 当一个类的实例只能有几个不同状态组合中的一种时。