一.什么是工厂模式:
工厂模式就是用来创建对象的一种最常用的设计模式,我们不暴露创建对象的具体逻辑,而是讲逻辑封装到一个函数中,那么,这个函数 就可以被视为一个工厂。工厂模式根据抽象程度的不同分为简单工厂模式,工厂模式和抽象工厂模式。今天呢,主要和大家分享一下简单工厂和工厂模式这两种。
二.什么是简单工厂模式:
简单工厂模式又叫静态工厂模式,由一个工厂对象决定创建某一种产品对象类的实例,主要用来创建同一类对象。简单工厂模式可以理解成,一个工厂只生产各种球的工厂,比如篮球,足球这些,客户购买的时候,只表明自己想要类型的球就可以,不必考虑球是怎么生产的。
<el-button @click="open1"></el-button> <el-button @click="open2"></el-button> <el-button @click="open3"></el-button> data () {
return { obj: { a: "dialogA", b: "dialogB", c: "dialogC", }, dialogA: false, dialogB: false, dialogC: false } } methods:{
open1() {
this.open('dialogA)
},
open2() {
this.open('dialogB')
},
open3() {
this.open('dialogC)
}
open(val) { this[obj(val)] = true } }
简单工厂的优点,在于只需要一个正确的参数,就可以获取所需要的对象,而无需知道其创建的具体细节。但是在函数内,包含了所有对象的创建逻辑,和判断逻辑的代码,每增加新的构造函数还需要修改判断逻辑代码,当我们对象过多的情况下,就难以维护了。所以简单工厂只能作用于创建的对象数量较少,对象的创建逻辑不复杂使用。
三。工厂方法模式:
工厂方法模式的本意是将实际创建对象的工作推迟到子类中,这样核心就变成了抽象类。但是在js中很难像传统面向对象那样去实现创建抽象类。所以在js中我们需要参考他的核心思想。我们将工厂方法看作是一个实例化对象的工厂类,他只做实例化对象这一件事情。
其实,可以简单理解为一个体育用品的工厂,可以生产球类、护具类等,然后球类里面还包含篮球,足球这些。工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象。这样做的目的是将产品类的实例化操作延时到工厂子类中完成,即通过工厂子类来确定究竟应该是实例化哪一个具体产品类。
<button @click="open1">点击1</button> <button @click="open2">点击2</button> <button @click="clickON">点击3</button>
init() { this.name = name this.initEvent(name); }, initEvent(name) { // 定义websocket的方法 let obj = { a: function() { console.log('点击1') }, b:function() { console.log('点击2',) }, c:function() { console.log('点击3') } } obj[name]() }, open1() { this.initEvent('a') }, open2() { this.initEvent('b') }, clickON() { this.initEvent('c') }