设计模式
创建型
- 简单工厂模式
- 优点:
- 操作者不用管具体实例化哪个对象,工厂类通过参数去决定实例化对象;降低耦合
- 缺点:
- 编译期间就定好了有哪些类,如果有新需求,需要修改工厂类
<?php
/**
* Created by PhpStorm.
* User: wky
* Date: 2018/10/30
* Time: 10:16
*/
namespace Simple\Factory;
/**
* Class ArchitectureFactory 工厂类
* @package Simple\Factory
*/
class ArchitectureFactory{
protected $typeList;
public function __construct()
{
//需要实例化的对象的数组
$this->typeList = [
'officeBuilding'=>__NAMESPACE__.'\OfficeBuilding',//造写字楼
'school'=>__NAMESPACE__.'\School',//造学校
];
}
public function getExample($type){
if(!isset($this->typeList[$type])){
//todo 提示类不存在
}
return new $this->typeList[$type]();
}
}
ArchitectureInterFace
<?php
/**
* Created by PhpStorm.
* User: wky
* Date: 2018/10/30
* Time: 10:16
*/
namespace Simple\Factory;
/**
* Interface ArchitectureInterFace 造写字楼和学校需要的设计图
* @package Simple\Factory
*/
interface ArchitectureInterFace{
public function designChart();
}
OfficeBuilding
<?php
/**
* Created by PhpStorm.
* User: wky
* Date: 2018/10/30
* Time: 10:16
*/
namespace Simple\Factory;
/**
* Class OfficeBuilding 造写字楼
* @package Simple\Factory
*/
class OfficeBuilding implements ArchitectureInterFace{
public function designChart(){
return '造写字楼的图纸';
}
}
School
<?php
/**
* Created by PhpStorm.
* User: wky
* Date: 2018/10/30
* Time: 10:22
*/
namespace Simple\Factory;
/**
* Class School 造学校
* @package Simple\Factory
*/
class School implements ArchitectureInterFace{
public function designChart(){
return '造学校的图纸';
}
}
Test
<?php
/**
* Created by PhpStorm.
* User: wky
* Date: 2018/10/30
* Time: 10:24
*/
namespace Simple\Factory;
/**
* Class Test
* @package Simple\Factory
*/
class Test{
public function test(){
$architecture = ['officeBuilding', 'school'];
$factory = new ArchitectureFactory();
foreach ($architecture as $type){
$factory->getExample($type);
}
}
}
- 工厂方法模式
和简单工厂方法模式的区别是工厂方法实例化在子类
- 抽象工厂模式
和工厂方法模式的区别是抽象工厂一个产品一个实现类,有新需求不用改原来的代码
- 静态工厂模式
和简单工厂的区别是静态工厂是在工厂类中的静态方法实例化对象
- 建造者模式
和抽象工厂的区别就是,建造者模式构建对象由导演类构建,而抽象工厂由工厂类构造;建造者模式更适用于复杂的对象的构建
- 多例模式
需要多个对象,比如各种数据库的链接
- 单例模式
保证整个生命周期只有一个实例对象。比如一种数据库链接、锁定文件等等
- 对象池模式
对象用完归还对象池类,而不是销毁,适用于实例化代价比较大的前景,因为对象放着也是需要消耗内存的
- 原型模式
通过类的克隆方法创建对象,而不是new,但是类的克隆方法是私有的就无法克隆了;使用场景是需要的类不是最初的类,而是运行中某一种状态下的类
结构型
- 适配器模式
- 桥梁模式
- 组合模式
- 数据映射模式
- 装饰模式
- 依赖注入模式
- 门面模式
- 流接口模式
- 代理模式
- 注册模式
行为型
- 责任链模式
- 命令行模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 空对象模式
- 观察者模式
- 规格模式
- 状态模式
- 策略模式
- 模板方法模式
- 访问者模式