• 《设计模式


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

    一:什么是工厂模式?

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

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

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

    二:简单工厂模式?

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

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

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

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

    // 简单计算器实例
    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('*');
  • 相关阅读:
    [产品设计]我对移动互联网产品的观点
    [Android阅读代码]圆形旋转菜单CircleMenu
    [Android代码阅读]分类简介
    [Android学习笔记]Android调试
    [Android]ADT Run时候报错:The connection to adb is down, and a severe error has occured
    [Android学习笔记]使用ListView
    [Android]Button按下后修改背景图
    [.NET Framework学习笔记]一些概念
    ubuntu fcitx 安装 使用
    nyoj-626-intersection set
  • 原文地址:https://www.cnblogs.com/25-lH/p/10025619.html
Copyright © 2020-2023  润新知