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();
    ?>
  • 相关阅读:
    com,jsj,service,Impl====新闻发布系统(9)
    com.jsj.service=====新闻发布系统(8)
    com.jsj.filter====新闻发布系统(7)
    com.jsj.dao.Impl====新闻发布系统(6)
    com.jsj.utils===新闻发布系统(5)
    最长公共子序列模板(LCS)和LICS模板
    输入输出优化
    zstu-3769 数回文子串
    最长回文子串Manacher算法模板
    HOJ 2678 Stars
  • 原文地址:https://www.cnblogs.com/Mapleth/p/3903614.html
Copyright © 2011-2022 走看看