设计模式备忘 - 创建型
工厂模式
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。当客户程序不需要知道要使用对象的创建过程,或者客户程序使用的对象存在变动的可能或根本就不知道使用哪一个具体的对象,就可以使用工厂模式。该模式具体分为三类:
?
简单工厂模式(Simple Factory)
简单工厂模式又称静态工厂方法模式。它存在的目的很简单:定义一个用于创建对象的接口。具体组成包括工厂类角色,抽象产品角色和具体产品角色。
?
不足:对于新产品的加入,工厂类是很被动的。实际应用中,很可能产品是一个多层次的树状结构,而在简单工厂模式中只有一个工厂类来对应这些产品。
?
工厂方法模式(Factory Method)
工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。具体组成包括抽象工厂角色,具体工厂角色,抽象产品角色和具体产品角色。
?
不足:在工厂方法模式中,要么将判断逻辑留在抽象工厂角色中,要么在客户程序中将具体工厂角色写死。而且产品对象创建条件的改变必然会引起工厂角色的修改。
?
抽象工厂模式(Abstract Factory)
抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象,其具体组成与工厂方法一样。
?
单例模式(Singleton)单例模式是为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式中的“单例”通常用来代表那些本质上具有唯一性的系统组件或资源,比如文件系统、资源管理器等等。单例模式可分为有状态的和无状态的。有状态的单例对象一般也是可变的单例对象,多个单态对象在一起就可以作为一个状态仓库一样向外提供服务。没有状态的单例对象也就是不变单例对象,仅用做提供工具函数。具体实现包括:
?
饿汉式
?
原型模式(Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。在Java中提供了clone()方法来实现对象的克隆,所以Prototype模式实现变得简单许多。其具体组成包括:
?
客户角色:让一个原型克隆自己来得到一个新对象。
抽象原型角色:实现了自己的clone方法,扮演这种角色的类通常是抽象类,且它具有许多具体的子类。
具体原型角色:被复制的对象,为抽象原型角色的具体子类。?
该模式最简单的使用方式:
//使用原型管理器后,客户获得对象的方式Prototype p1 = PrototypeManager. getManager().getPrototype(“ConcretePrototype”);?不足:原型模式主要的缺陷就是每个原型必须含有clone方法,在已有类的基础上来添加clone操作是比较困难的。而且当内部包括一些不支持copy或者循环引用的对象时,实现就更加困难了。