创建型设计模式-工厂模式
定义
通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例。(本质就是给这个工厂添加各种各样需求功能的类作为其属性)
安全模式类
安全模式类是指可以屏蔽使用类时所导致的错误,一般我们创建对象时,均需要使用new 关键字去创建实例,当我们未使用,而是直接使用类名时,则会产生代码异常,那么这时候如果我们采用安全模式类,就可以毫无顾忌的使用类名来创建对象了。如:
function Person = function(name){
// 使用instanceof 判断是否是同一个类
if(!(this instanceof Person)){
return new Demo();
}else{
this.name = name;
}
}
Person.prototype.sayHi = function(){
console.log(this.name,'is saying hello to you ')
}
// 让我们来测试他们吧,不使用 new 关键字创建对象
let Anna = Person('Anna').sayHi();
//输出打印: Anna is saying hello to you
// 正常创建对象方式
let Bob = new Person('Bob').sayHi();
//输出打印: Bob is saying hello to you
工厂模式 案例
案例说明:假使需要制作一个广告牌页面,不同的广告业主样式,文字均不同。那么我们使用刚刚的安全模式类创建一个工厂模式吧!
//安全模式创建工厂类
let ADBoardFactory = function(type,conent){
if(this instanceof ADBoardFactory){
return new this[type](content);
}else{
return new ADBoardFactory(type,content);
}
}
// 工厂原型中设置所创建所有类型的数据对象的基类
ADBoardFactory.prototype = {
Java:function(content){
//todo
},
PHP:function(content){
// todo
},
Javascript:function(content){
//todo
},
...
}
//如此,如果还有需求增加,只需要在工厂原型中设置添加便可。
//参考书籍中把这比喻为名片,我认为也很贴切,别人给你什么名片,你存储在你的钱包就可以,
//需要的时候直接拿出来用就Ok了
优势
工厂模式避免了使用者与对象类之间的耦合。用户不必关心创建该对象的具体类,只需要调用工厂方法即可。
参考书籍: 《JavaScript 设计模式》张容铭
同时大家也可参考这位读者的观后感
在看的同时记录自己的想法与理解也是加深对这种模式的认识的一种方式。