• PHP抽象工场模式


    /**
     * Interface AbstractFactory 抽象工场模式
     */
    //抽象工场
    interface AbstractFactory{
        //创建等级结构工场方法
        public function createProductA();
        public function createProductB();
    }
    
    //具体工场1
    class ConcreteFactory1 implements AbstractFactory {
        public function createProductA()
        {
            // TODO: Implement createProductA() method.
            return new ProductA1();
        }
        public function createProductB()
        {
            // TODO: Implement createProductB() method.
            return new ProductB1();
        }
    }
    
    //具体工场2
    
    class ConcreteFactory2 implements AbstractFactory {
        public function createProductA()
        {
            // TODO: Implement createProductA() method.
            return new ProductA2();
        }
        public function createProductB()
        {
            // TODO: Implement createProductB() method.
            return new ProductB2();
        }
    }
    
    //抽象产品A
    interface AbstractProductA{
        public function price();
    }
    //抽象产品B
    interface AbstractProductB{
        public function price();
    }
    
    
    //具体产品A1
    class ProductA1 implements AbstractProductA{
        public function price()
        {
            // TODO: Implement price() method.
            echo 'ProductA1 价格';
        }
    }
    
    //具体产品A2
    class ProductA2 implements AbstractProductA{
        public function price()
        {
            // TODO: Implement price() method.
            echo 'ProductA2 价格';
        }
    }
    
    //具体产品B1
    class ProductB1 implements AbstractProductB{
        public function price()
        {
            // TODO: Implement price() method.
            echo 'ProductB1 价格';
        }
    }
    
    //具体产品B1
    class ProductB2 implements AbstractProductB{
        public function price()
        {
            // TODO: Implement price() method.
            echo 'ProductB2 价格';
        }
    }
    
    class Client {
        public static function main() {
            self::run(new ConcreteFactory1());
            self::run(new ConcreteFactory2());
        }
    
        public static function run(AbstractFactory $factory) {
            $productA = $factory->createProductA();
            $productB = $factory->createProductB();
            echo $productA->price(),PHP_EOL;
            echo $productB->price(),PHP_EOL;
        }
    }
    
    Client::main();
    
  • 相关阅读:
    [eslintpluginvue] [vue/nounusedvars] 'scope' is defined but never used.
    Vue项目中添加锁屏功能
    前端文档汇总(含代码规范、开发流程、知识分享,持续更新)
    vscode格式化Vue出现的问题
    下盘不稳 被忽视的项目风险
    项目沟通中的一点经验心得
    如何才能更合理地分配项目奖金?
    关于企业的薪酬体系之思考
    导致项目失败的两大隐形杀手
    如何让项目总结会议更有效果?
  • 原文地址:https://www.cnblogs.com/whel0923/p/15030617.html
Copyright © 2020-2023  润新知