简单工厂模式(Simple Factory)
不属于23种设计模式之一。
由三个角色组成:
- 工厂类:生产具体产品
- 抽象产品
- 具体产品
示例代码:
//工厂类
class MouseFactory {
public static function createMouse($type) {
switch($type) {
case 'deil':
return new DeilMouse();
case 'hp':
return new HpMouse();
default:
throw new Exception('error type');
}
}
}
//抽象产品
abstract class Mouse {
public abstract function click() {};
}
//具体产品
class DeilMouse extends Mouse {
public function click() {
}
}
class HpMouse extends Mouse {
public function click() {
}
}
工厂方法模式(Factory Method)
image.png它由四种角色组成:
- 抽象工厂
- 具体工厂
- 抽象产品
- 具体产品
//抽象工厂
abstract class MouseFactory{
public abstract function createMouse();
}
//具体工厂
class DeilFactory extends MouseFactory{
public function createMouse() {
return new DeilMouse();
}
}
class HpFactory extends MouseFactory{
public function createMouse(){
return new HpMouse();
}
}
工厂方法模式是完全符合开闭原则的。当有新产品时,只要创建并继承抽象产品;新建具体工厂继承抽象工厂;而不用修改现有任何代码。
缺点是当产品种类非常多时,就会出现大量的与之对应的工厂类。
抽象工厂(Abstract Factory)
抽象工厂模式也就是不仅生产鼠标,同时生产键盘。
也就是PC厂商是个父类,有生产鼠标,生产键盘两个接口。
在抽象工厂模式中,假设我们需要增加一个工厂
image.png在抽象工厂模式中,假设我们需要增加一个产品
由上图可以看出,抽象工厂模式是不符合开闭原则的,产品族扩展非常困难,要增加一个产品,既要在抽象工厂里加代码,又要在具体工厂里面加代码。
网友评论