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();
    ?>
  • 相关阅读:
    Raid卡在Write back 与Write through 时的性能差异
    mysql 的outfile以及infile 语法简单备份恢复表
    @SneakyThrows
    java中的mmap实现--转
    以ATT&CK为例构建网络安全知识图
    横向移动攻击点与识别
    Tomcat开启JMX监控
    mysql serverTimezone
    自增还是UUID?数据库主键的类型选择,为啥不能用uuid做MySQL的主键?
    数据库:查询结果中增加数据库不存在的字段的方法
  • 原文地址:https://www.cnblogs.com/Mapleth/p/3903614.html
Copyright © 2011-2022 走看看