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();
    ?>
  • 相关阅读:
    分组与子报表Active Report6 使用(二)
    网站开发人员应该知道的62件事[转]
    如何恢复SVN中已删除文件或文件夹
    java中的List排序[转]
    [原]ActiveReport6 for net使用(一)
    Windows XP 不用输入密码自动登录
    IE不加载ActiveX控件的解决办法
    winRAR 打包小技巧
    iis负载均衡与文件同步[网摘]
    ASP.net的PDF打印(水晶报表)[摘]
  • 原文地址:https://www.cnblogs.com/Mapleth/p/3903614.html
Copyright © 2011-2022 走看看