工厂办法模式是简略工厂模式的延申,他继承了简略工厂模式的长处,同时还补救了简略工厂模式的缺点,更好的合乎开闭准则的要求,在减少新的具体产品对象时不须要对已有的零碎做任何的批改。
什么是工厂办法
工厂办法模式简称为工厂模式,又可称作虚构结构器模式或多态工厂模式。工厂办法模式是品种创立型模式。在工厂办法模式中,工厂父类负责定义创立产品对象的公共接口,而工厂子类负责生成具体的产品对象,这样做的目标是将产品类的实例操作提早到工厂子类中实现,即通过工厂子类来确定到底应该实例化哪一个具体产品类。
工厂办法模式是一种创立型设计模式,其在父类中提供一个创建对象的办法,容许子类决定实例化对象的类型。
工厂办法模式倡议应用非凡的工厂办法代替对于对象构造函数的间接调用,对象仍将通过new
运算符创立, 只是该运算符改在工厂办法中调用罢了。 工厂办法返回的对象通常被称作”产品“。
工厂办法优缺点
工厂办法模式是应用频率最高的设计模式之一,是很多开源框架和API
类库的外围模式。作为一种创立类模式,在任何须要生成简单对象的中央,都能够应用工厂办法模式。有一点须要留神的中央就是简单对象适宜应用工厂模式,而简略对象,特地是只须要通过new
就能够实现创立的对象,无需应用工厂模式。如果应用工厂模式,就须要引入一个工厂类,会减少零碎的复杂度。
长处
- 只须要关怀产品对应的工厂
- 增加新产品是只有增加一个具体工厂和具体产品
- 可扩展性十分好,完全符合开闭准则
毛病
- 类个数成倍的减少
- 形象层进行定义,减少了零碎的抽象性和了解难度
示例
工厂办法次要蕴含4
个类,别离是:
- 产品类
- 具体产品类
- 创建者类
- 具体创建者类
产品类次要为工厂办法提供形象的办法具体方法由产品外部实现,然而创建者类(形象工厂)也是同理次要负责提供创立办法具体由具体创建者类(工厂办法)外部实现。
类图如下所示:
代码示例
// 形象产品接口(产品类)interface Product2{ method1() : void; method2() : void;}// 具体产品一(具体产品类)class ConcreteProduct_1 implements Product2 { constructor(){} method1() { // 具体业务代码 } method2() { // 具体业务代码 }}// 具体产品二(具体产品类)class ConcreteProduct_2 implements Product2 { constructor(){} method1() { // 具体业务代码 } method2() { // 具体业务代码 }}// 形象工厂(创建者类)abstract class Creator { public abstract createProduct(type : number) : Product;}// 具体工厂(具体创建者类)class ConcreteCreator extends Creator { constructor(){ super(); } public createProduct(type : number) : Product { let product = null; if (type === 1) { product = new ConcreteProduct_1(); } else if (type === 2) { product = new ConcreteProduct_2(); } return product; }}// 应用const creator:Creator = new ConcreteCreator();const myProduct:Product = creator.createProduct(1);
总结
如果你心愿复用现有对象来节俭系统资源,而不是每次都从新创建对象,可应用工厂办法。在解决大型资源密集型对象时,你会常常碰到这种资源需要。在形象工厂中能够申明多个形象的工厂办法,在具体工厂中实现了这些工厂办法,这些办法能够蕴含不同的业务逻辑,以满足产品对象的多样化创立需要。
在工厂类中能够间接调用产品类的业务办法,客户端毋庸调用工厂办法创立产品对象,间接应用工厂对象即可调用所创立的产品对象中的业务办法,实现对工厂办法的暗藏。