顾名思义,此篇介绍工厂模式中的简单工厂,工厂模式属于建立型模式,而工厂模式分为简单工厂,静态工厂,抽象工厂,由浅到深,上篇介绍了最基本的单例,而简单工厂也是工厂模式里最基本的。php
优势:实例化对象,根据参数获取对应的对象,避免直接实例化,下降耦合。
缺点:需知全部的类型,不符合设计模式的开闭原则,当类型增长,工厂也须要修改。
复制代码
Api: 用于构建用户功能,抽象接口,只负责抽象,不负责实现。
AchieveApi: 功能对象,用于实现接口。
Factory: 用于生产(建立)功能对象。
复制代码
仍是以故事的形式来叙述。 昨天是端午节日,放假了,小陈要回家,回家要用到车,可是回家的方式有不少种,不知道该开车回,仍是坐车,仍是骑自行车回。设计模式
一、功能接口ide
class Api {
// 要回家
public function goHome(string $message){}
}
复制代码
二、实现功能的工具工具
// 开车
class Car implements Api {
public function goHome(string $message) {
echo "开车回";
}
}
// 坐车
class ByCar implements Api {
public function goHome(string $message) {
echo "坐车回";
}
}
// 骑车
class RideCar implements Api {
public function goHome(string $message) {
echo "骑车回";
}
}
复制代码
三、构建工厂测试
class EasyFactory {
public static function getFactory(int type) {
// 约定方法
switch(type) {
case 1:
return new Car();
break;
case 2:
return new ByCar();
break;
case 3:
return RideCar();
break;
default:
die('超了');
}
}
}
复制代码
四、测试spa
$xiaochen1 = EasyFactory::getFactory(1); // 开车
$xiaochen1->goHome();
$xiaochen2 = EasyFactory::getFactory(2); // 坐车
$xiaochen2->goHome();
$xiaochen2 = EasyFactory::getFactory(3); // 骑车
$xiaochen2->goHome();
复制代码
以上方法就是简单的工厂模式,在使用时直接进行调用,不须要知道建立的逻辑,想开车回,直接去开就能够,下次本身没时间,家里人也直接能开,不用管车是怎么造出来的(前提是知道有个车),通常简单工厂是用来隔离实现,让外部只能经过特定的接口或者方法来操做。设计