共计 1764 个字符,预计需要花费 5 分钟才能阅读完成。
JavaScript
是一种介于对象的语言,在编程过程中简直所有用的货色都是对象。然而 JavaScript
又不是一种真正的面向对象编程语言,因为 JavaScript
中没有 class
,不过在ECMAScript
第 6 版本中引入了 class
的概念,作为对象的模板,通过 class
关键字能够定义类。
既然 JavaScript
曾经有了类的概念,逐步也就对设计模式也有了可施展的空间,设计模式次要分文三大类型创造型设计模式、结构型设计模式、行为设计模式,这篇文章次要说名一下,简略工厂。
什么是简略工厂
简略工厂模式:又称为动态工厂办法模式,它属于类创立型模式。在简略工厂模式中,能够依据参数的不同返回不同类的实例。简略工厂模式专门定义一个类来负责创立其余类的实例,被创立的实例通常都具备独特的父类。——节选自百度百科
依据提供给它的数据,返回一个类的实例。通常它返回的类都有一个公共的父类(或者接口对象)。简略工厂的作用是实例化对象,而不须要客户理解这个对象属于哪个具体的子类。简略工厂实例化的类具备雷同的接口或者基类,在子类比拟固定并不需要扩大时,能够应用简略工厂。如数据库生产工厂就是简略工厂的一个利用。
采纳简略工厂的长处是能够使用户依据参数取得对应的类实例,防止了间接实例化类,升高了耦合性;毛病是可实例化的类型在编译期间曾经被确定,如果减少新类型,则须要批改工厂,不合乎 OCP(开闭准则)的准则。简略工厂须要晓得所有要生成的类型,当子类过多或者子类档次过多时不适宜应用。
简略工厂优缺点
简略工厂简略的来说其实就是定义一个创建对象的类,由这个类封装实例化对象的行为。简略工厂能够将对象的创立和对象自身的业务解决拆散升高零碎的耦合水平,是的两者批改起来都绝对容易一些,在调用工厂类的工厂办法时,因为工厂办法是静态方法,应用起来很不便,简略工厂最大的问题在于工厂类的职责过重,减少新的产品须要修改稿工厂类的判断逻辑,这一点不太合乎开闭准则。简略工厂模式的要点在于:当你须要什么,只须要传入一个正确的参数,就能够获取你所须要的对象,而无须晓得其创立细节。通过下面的所说能够总结得出:
长处
- 客户类与具体子类解耦
- 客户类不须要晓得所有子类的细节
- 应用配置文件,能够在不批改任何客户端代码的状况下更换和减少新的具体产品类,在肯定水平上进步了零碎的灵活性。
毛病
- 工厂类职责过重
- 减少工厂类减少了零碎复杂度
- 零碎扩大艰难,零碎发生变化须要批改工厂类
- 工厂因为应用了动态工厂办法,造成工厂角色无奈造成基于继承的等级构造
示例
简略工厂次要蕴含三个类,别离是:
- 简略工厂类
- 形象产品类
- 具体产品类
基于这三个个类实现简略工厂,工厂类负责创的对象比拟少,因为创立的对象少,不会造成工厂办法重的业务逻辑太过于简单。客户端只晓得传入工厂类的参数,对于创建对象不关系,客户端不须要关系创立的细节,甚至连类名都不须要记住,只须要晓得类型所对应的参数即可。
类图如下所示:
代码示例:
// 形象产品接口
interface Product{}
// 具体产品一
class ConcreteProduct1 implements Product {constructor(){}}
// 具体产品二
class ConcreteProduct2 implements Product {constructor(){}}
// 简略工厂
class SimpleFactory {public static createProduct(type : number) : Product {
let product = null;
if (type === 1) {product = new ConcreteProduct1();
} else if (type === 2) {product = new ConcreteProduct2();
}
return product;
}
}
// 应用
let product = SimpleFactory.createProduct(1);
console.log(product);
总结
创立型模式对类的实例化过程进行了形象,可能将对象的创立与对象的应用过程拆散。简略工厂模式最大的长处在于实现对象的创立和对象的应用拆散,将对象的创立交给专门的工厂类负责,然而其最大的毛病在于工厂类不够灵便,减少新的具体产品须要批改工厂类的判断逻辑代码,而且产品较多时,工厂办法代码将会非常复杂。