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个类

  • 相关阅读:
    Java8 新特性default
    Java Map操作
    Java List操作
    Java Set操作
    Java集合 List,Set,Map
    Java final,static 关键字
    Java ConcurrentHashMap
    Java Synchronized的用法
    Linux 基本收集
    HashMap 扩容 加载因子
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9106013.html
Copyright © 2011-2022 走看看