《设计模式 - 工厂模式》

新功能终于今天提测,送了一口小气~

 

一:什么是工厂模式?

  - 所谓工厂模式,就是有一种工厂的思维,通过工厂一系列的操作,生成的统一的对象。

  - 工厂模式的出现就是为了解决代码之间的耦合度,通过 “工厂出去” 的对象,可以更方便的进行类的 修改/添加/删除 等等,而不需要大规模的去修改代码。

  - 工厂模式简单分为 简单工厂/工厂方法,下面会去讲一下他们的使用和区别

 

二:简单工厂模式?

  - 简单工厂就和他的名字一样,虽然简单,但是却有着很大的作用

  - 最大的优点在于,工厂类中包含了必要的逻辑判断,值通过客户端的选择动态实例化

  - 对于客户端来说,这样去除与具体产品的依赖

  - 就像下面这个简单计算器一样,客户端只需要传对应的条件就可以,工厂会自动给出相对的实例,客户端并不需要知道工厂做了什么

// 简单计算器实例
class
easyFactory { public function CreateOpera($type) { switch ($type) { case '+': return new 加法类(); break; case '-': return new 减法类(); break; case '*': return new 乘法类(); break; } } } $opera = new easyFactory(); // 加法 $instance = $opera->CreateOpera('+'); // 减法 $instance = $opera->CreateOpera('-'); // 乘法 $instance = $opera->CreateOpera('*');

 

三:工厂模式

  - 简单工厂模式,适用于条件变化不是很多的 Case, 在频繁的开放扩展中,也修改工厂类,这样也就违反了 面向对象原则 :开放-封闭原则

  - 于是,工厂模式就出现了。

  - 定义:定义一个用于创建对象的接口,让子类决定实例化到那个类,工厂方法使得实例化一个类延迟到子类。

  - 简单来说,就是由客户端决定实例化那个,把逻辑放到了客户端中。这样也就避免了去修改工厂函数,而对工厂的开放扩展

// 工厂方法
interface Factory
{
    function getOpera();
}

class Add implements Factory
{
    public function getOpera(argument)
    {
        return new 加法类();
    }
}

class Reduce implements Factory
{
    public function getOpera(argument)
    {
        return new 减法类();
    }
}

class Ride implements Factory
{
    public function getOpera(argument)
    {
        return new 乘法类();
    }
}

// 加法
$opera = new Add();
$instance = $opera->getOpera('+');
// 减法
$opera = new Reduce();
$instance = $opera->CreateOpera('-');
// 乘法
$opera = new Ride();
$instance = $opera->CreateOpera('*');
posted @ 2018-11-27 12:04  Zzz哈  Views(141)  Comments(0Edit  收藏  举报