• 设计模式之工厂模式之工厂方法(php实现)


    github:
    git@github.com:ZQCard/design_pattern.git

    /*
    * * 工厂方法 * 使用开闭原则来分析下工厂方法模式。当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成, * 那么就可以被客户使用,而不必去修改任何已有的代码。(即当有新产品时,只要创建并基础抽象产品;新建具体工厂继承抽象工厂; * 而不用修改任何一个类)工厂方法模式是完全符合开闭原则的! */

    (1)IShape.class.php(抽象接口,用于规定实现类规范)

    <?php
    
    namespace FactoryFactoryMethod;
    
    interface IShape{
        public function draw();
    }

    (2)AbstractShape.class.php(抽象父类,用于规范子类实现)

    <?php
    
    namespace FactoryFactoryMethod;
    
    
    abstract class AbstractShape
    {
        public abstract function getShape();
    }

    (3)CircleFactory.class.php(具体工厂类,用于实现指定子类)

    <?php
    namespace FactoryFactoryMethod;
    
    class CircleFactory extends AbstractShape
    {
        public function getShape()
        {
            return new CirCle();
        }
    }

    (4)Circle.class.php(具体实现类)

    <?php
    
    namespace FactoryFactoryMethod;
    
    
    class CirCle
    {
        public function draw()
        {
            return '画一个圆形';
        }
    }

    (5)factoryMethod.php(客户端)

    <?php
    
    spl_autoload_register(function ($className){
        $className = str_replace('\','/',$className);
        include $className.".class.php";
    });
    
    use FactoryFactoryMethodCircleFactory;
    
    $factory = new CircleFactory();
    $shape = $factory->getShape();
    $string = $shape->draw();
    echo $sting;

    优点:遵守开闭原则

    缺点:增加一个产品,需要增加2个类

  • 相关阅读:
    matplotlib讲义
    车间调度问题(part3: 遗传算法)
    sympy库和matplotlib库简介
    python列表
    第十周周三练习
    第十一周周一练习题
    MyEcplise中关于部署文件不成功的问题
    Java中的get()和set()方法
    Java中this关键字的使用
    信号完整性问题的几个基本原则
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9106013.html
Copyright © 2020-2023  润新知