• php 八大设计模式-工厂模式


    目的:

    提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤,实际上就是建立一个统一的类实例化的函数接口,完成统一调用,统一控制。

    工厂模式也分为三种:

    1. 工厂模式
    2. 抽象工厂模式

    工厂模式

    <?php 
    
    // 接口
    interface ToData {
        public function goData();
    }
    
    //字符串类
    class String implements ToData {
    
        public function goData() {
            // todo
        }
    }
    
    //Json类
    class Json implements ToData {
    
        public function goData() {
            // todo
        }
    }
    
    //xml类
    class Xml implements ToData {
    
        public function goData() {
            // todo
        }
    }
    
    //工厂类
    class Factory {
        public static function create($class) {
            return new $class;
        }
    }
    
    $typeClass = Factory::create('String');
    $typeClass->goData();
    
     ?>
     

    抽象工厂

    <?php
    /**
     * 抽象产品A
     */
    interface AbstractProductA {
    
        /**
         * 取得产品名
         */
        public function getName();
    }
    
    /**
     * 抽象产品B
     */
    interface AbstractProductB {
    
        /**
         * 取得产品名
         */
        public function getName();
    }
    
    /**
     * 具体产品A1
     */
    class ProductA1 implements AbstractProductA {
        private $_name;
    
        public function __construct() {
            $this->_name = 'product A1';
        }
    
        public function getName() {
            return $this->_name;
        }
    }
    
    
    /**
     * 具体产品A2
     */
    class ProductA2 implements AbstractProductA {
        private $_name;
    
        public function __construct() {
            $this->_name = 'product A2';
        }
    
        public function getName() {
            return $this->_name;
        }
    }
    
    
    /**
     * 具体产品B1
     */
    class ProductB1 implements AbstractProductB {
        private $_name;
    
        public function __construct() {
            $this->_name = 'product B1';
        }
    
        public function getName() {
            return $this->_name;
        }
    }
    
    /**
     * 具体产品B2
     */
    class ProductB2 implements AbstractProductB {
        private $_name;
    
        public function __construct() {
            $this->_name = 'product B2';
        }
    
        public function getName() {
            return $this->_name;
        }
    }
    
    /**
     * 抽象工厂
     */
    interface AbstractFactory {
        /**
         * 创建等级结构为A的产品的工厂方法
         */
        public function createProductA();
    
        /**
         * 创建等级结构为B的产品的工厂方法
         */
        public function createProductB();
    }
    
    /**
     * 具体工厂1
     */
    class ConcreteFactory1 implements AbstractFactory{
    
        public function createProductA() {
            return new ProductA1();
        }
    
        public function createProductB() {
            return new ProductB1();
        }
    }
    
    
    /**
     * 具体工厂2
     */
    class ConcreteFactory2 implements AbstractFactory{
    
        public function createProductA() {
            return new ProductA2();
        }
    
        public function createProductB() {
            return new ProductB2();
        }
    }
    
    
    /**
     * 客户端
     */
    class Client {
    
        /**
         * Main program.
         */
        public static function index() {
            self::run(new ConcreteFactory1());
            self::run(new ConcreteFactory2());
        }
    
        /**
         * 调用工厂实例生成产品,输出产品名
         * @param $factory AbstractFactory 工厂实例
         */
        public static function run(AbstractFactory $factory) {
            $productA = $factory->createProductA();
            $productB = $factory->createProductB();
            echo $productA->getName(), '<br />';
            echo $productB->getName(), '<br />';
        }
    
    }
    
    // 客户端执行
    Client::index();
    
    ?>
  • 相关阅读:
    win7下设置smtp的方法
    win7下怎么安装IIS
    python语法笔记(二)
    python语法笔记(一)
    python 的类变量和对象变量
    mysql使用笔记(四)
    mysql使用笔记(三)
    mysql使用笔记(二)
    windows下重新安装TCP/IP协议栈
    c++程序编码
  • 原文地址:https://www.cnblogs.com/fangdada/p/14851943.html
Copyright © 2020-2023  润新知