zoukankan      html  css  js  c++  java
  • php设计模式:工厂模式

    php设计模式:工厂模式

    意图:

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。

    工厂模式实现:

    工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明了工厂方法,该方法返回一个Product类型的对象。

    工厂模式适用场景:
    1、当一个类不知道它所必须创建的对象的类的时候
    2、当一个类希望由它的子类来指定它所创建的对象的时候
    3、当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候

    实例:

    <?php
     
    /**
     * 抽象工厂角色
     */
    interface Creator {
        public function factoryMethod();
    }
     
    /**
     * 具体工厂角色A
     */
    class ConcreteCreatorA implements Creator {
     
        /**
         * 工厂方法 返回具体 产品A
         * @return ConcreteProductA
         */
        public function factoryMethod() {
            return new ConcreteProductA();
        }
    }
     
    /**
     * 具体工厂角色B
     */
    class ConcreteCreatorB implements Creator {
     
        /**
         * 工厂方法 返回具体 产品B
         * @return ConcreteProductB
         */
        public function factoryMethod() {
            return new ConcreteProductB();
        }
    }
     
    /**
     * 抽象产品角色
     */
    interface Product {
        public function operation();                                                                                    
    }
     
    /**
     * 具体产品角色A
     */
    class ConcreteProductA implements Product {
     
        /**
         * 接口方法实现 输出特定字符串
         */
        public function operation() {
            echo 'ConcreteProductA <br />';
        }
    }
     
    /**
     * 具体产品角色B
     */
    class ConcreteProductB implements Product {
     
        /**
         * 接口方法实现 输出特定字符串
         */
        public function operation() {
            echo 'ConcreteProductB <br />';
        }
    }
     
    class Client {
     
        /**
         * Main program.
         */
        public static function main() {
            $creatorA = new ConcreteCreatorA();
            $productA = $creatorA->factoryMethod();
            $productA->operation();
     
            $creatorB = new ConcreteCreatorB();
            $productB = $creatorB->factoryMethod();
            $productB->operation();
        }
     
    }
     
    Client::main();
    ?>
  • 相关阅读:
    linux常用命令
    mysql 开发基础系列20 事务控制和锁定语句(上)
    sql server 性能调优之 资源等待 CXPACKET
    mysql 开发基础系列19 触发器
    mysql 开发基础系列18 存储过程和函数(下)
    mysql 开发基础系列17 存储过程和函数(上)
    sql server 性能调优之 资源等待PAGEIOLATCH
    mysql 开发基础系列16 视图
    mysql 开发基础系列15 索引的设计和使用
    sql server 性能调优之 当前用户请求分析 (1)
  • 原文地址:https://www.cnblogs.com/Mapleth/p/3903614.html
Copyright © 2011-2022 走看看