zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式之工厂方法(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个类

  • 相关阅读:
    Protobuf通信协议
    python发送消息到activeMQ后java接收到BinaryMessage的坑
    golang time.Duration() 问题
    golang操作redis
    golang之网络编程
    golang之反射
    golang之goroutine和channel
    golang之单元测试
    golang之文件操作
    XmlHelper 工具类
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9106013.html
Copyright © 2011-2022 走看看