引言:
最近在学习设计模式,于是仔细研究了一下,决定整理成文章分享出来,对于没有设计模式的小白,再合适不过了,看招吧!
盗个图片~ ~ ~~
什么是设计模式:
我理解的设计模式,就是一种编程的风格和规范,这个概念最早是出现在建筑学中,认为设计风格是一种美学,那我们就把设计模式,当成是编程的美学吧!
设计模式分类:
- 创建型设计模式
- 结构型设计模式
- 行为型设计模式
- 技巧型设计模式
- 结构型设计模式
本小节主要讲解—创建型设计模式 — 持续更新
简单工厂模式
简介:简单工厂模式,又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例,主要用来创建同一类对象
其实创建型设计模式,除了简单工厂模式还有, 工厂方法模式,抽象工厂模式,建造者模式,原型模式,单例模式,后续会更新!!!
优点 ~ 百度百科:
工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点 ~ 百度百科:
由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;
这些缺点在工厂方法模式中得到了一定的克服。
个人阐述:
其实,我觉得,简单工厂模式就是把所有的和某一种产品有关的类,对象,方法,整合到一起,然后通过传递的不同参数,执行不同的逻辑
代码用例:
// 篮球类
let basketball = function(){
this.intro = '篮球类'
}
basketball.prototype ={
getMember:function(){
console.log('每个球队要五个队员!')
// 其实主要是想表述篮球的逻辑,并不是三种球都是重复的console
},
getBallSize:function(){
console.log('篮球很大')
}
}
// 足球类
let football = function(){
this.intro = '足球类'
}
basketball.prototype ={
getMember:function(){
console.log('每个球队要好几个队员!')
},
getBallSize:function(){
console.log('足球也很大')
}
}
// 网球类
let tennis = function(){
this.intro = '网球类'
}
basketball.prototype ={
getMember:function(){
console.log('每个球队要好几个队员!')
},
getBallSize:function(){
console.log('网球也很大')
}
}
// 如上图,我们创建了三个类,
// 但是,如果我们想调用他们的时候,需要new出来一个个的实例,
// 而工厂模式,就是把上面所有相关的,整合到一起,
// 这样做的好处就是可以通过传递的信息,创建出我们需要的对象
let factory = function(name){
switch(name){
case 'basketball'
return new basketball()
case 'football'
return new football()
case 'tennis'
return new tennis()
}
}
// 调用
var foot = factory(basketball)
console.log(foot)
console.log(foot.getMember)
// 因为简单工厂模式的核心就是创建对象,和整合相同代码部分
// 代码也可以这样写
let factory = function(name){
let obj = new Object()
if(name == 'basketball'){
obj.intro = '篮球类'
obj.getMember = function(){
console.log('每个球队要五个队员!') // 其实主要是想表述篮球的逻辑
}
obj.getBallSize=function(){
console.log('篮球很大')
}
}
if(name == 'football'){
obj.intro = '篮球类'
obj.getMember = function(){
console.log('每个球队要五个队员!') // 其实主要是想表述足球的逻辑
}
obj.getBallSize=function(){
console.log('足球很大')
}
}
if(name == 'tennis'){
obj.intro = '网球'
obj.getMember = function(){
console.log('每个球队要五个队员!') // 其实主要是想表述足球的逻辑
}
obj.getBallSize=function(){
console.log('网球很大')
}
}
return obj
}
总结,简单工厂模式
上述主要讲了两种设计简单工厂模式的方法,一种是通过类的实例化,一种是通过创建对象,然后返回。