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

  • 相关阅读:
    WEB测试总结 (架构,设计)精华部分(转)
    javascript的拖放入门
    javascript十个最常用的自定义函数 (转)
    common.css
    c#中DateTime类
    PHP网站开发方案实例
    PHP框架 DooPHP 1.2 发布
    0 WINDOWS系统 + Apache +PHP5 +Zend + MySQL + phpMyAdmin安装方法(视频教程)
    IE8 CSS兼容性记录(转)
    在网站测试中如何做好安全性测试
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/9106013.html
Copyright © 2011-2022 走看看