简单工厂模式
定义
优点
- 客户端只知道传入工厂类的参数,对于如何创建对象并不关心。
- 客户端不需要担任创建产品对象的责任,并且产品对象不需对外暴露
- 从开放封闭原则来看,当想新增一种产品时(新的车类,继承Car),那么对于产品部分来说,它是符合开闭原则的——对扩展开放、对修改关闭
缺点
- 从开放封闭原则来看,工厂类(FactoryCreateCar)不太理想,因为每增加一辆车,都要在工厂类中增加相应的switch分支,这显自然是违背开闭原则的。
- 不适用于复杂的业务环境
场景
- 简单工厂模式适用于业务简单的情况下或者具体产品很少增加的情况。而对于复杂的业务环境可能不太适应了
代码
package Simple_Factory import "fmt" type Car interface { drive() } type bmw struct { name string } func (b *bmw) drive() { fmt.Println("正在驾驶宝马...") } type tesla struct { name string } func (t *tesla) drive() { fmt.Println("正在驾驶特斯拉...") } type porsche struct { name string } func (p *porsche) drive() { fmt.Println("正在驾驶保时捷...") } func FactoryCreateCar(car string) Car { switch car { case "bmw": return &bmw{} case "tesla": return &tesla{} case "porsche": return &porsche{} default: return nil } }
package Simple_Factory import "testing" func TestFactoryCreateCar(t *testing.T) { FactoryCreateCar("bmw").drive() FactoryCreateCar("tesla").drive() FactoryCreateCar("porsche").drive() }
其他设计模式
设计模式Git源代码
00简单工厂模式
01工厂方法模式
02抽象工厂模式
03外观模式
04建造者模式
05桥接模式
06命令模式
07迭代器模式
08模板模式
09访问者模式
10备忘录模式
11责任链模式
12中介模式
13原型模式
14状态模式
15策略模式
16享元模式
17组合模式
18解释器模式
19单例模式
20适配器模式
21代理模式
22装饰器模式
23观察者模式