zoukankan      html  css  js  c++  java
  • AbstractFactory(抽象工厂模式)

    AbstractFactory(抽象工厂模式)

      有些情况下我们需要根据不同的选择逻辑提供不同的构造工厂,而对于多个工厂而言需要一个统一的抽象

    <?php
     
    class Config {
        public static $factory = 1;
    }
     
    interface Product {
        public function getName();
    }
     
    abstract class AbstractFactory {
     
        public static function getFactory() {
            switch (Config::$factory) {
                case 1:
                    return new FirstFactory();
                case 2:
                    return new SecondFactory();
            }
            throw new Exception('Bad config');
        }
     
        abstract public function getProduct();
    }
     
    class FirstFactory extends AbstractFactory {
        public function getProduct() {
            return new FirstProduct();
        }
    }
    class FirstProduct implements Product {
        public function getName() {
            return 'The product from the first factory';
        }
    }
     
    class SecondFactory extends AbstractFactory {
        public function getProduct() {
            return new SecondProduct();
        }
    }
    class SecondProduct implements Product {
        public function getName() {
            return 'The product from second factory';
        }
    }
     
    $firstProduct = AbstractFactory::getFactory()->getProduct();
    Config::$factory = 2;
    $secondProduct = AbstractFactory::getFactory()->getProduct();
     
    print_r($firstProduct->getName());
    // The first product from the first factory
    print_r($secondProduct->getName());
    // Second product from second factory
    

      

  • 相关阅读:
    函数对象与闭包
    20.03.19作业
    关键字参数,名称空间和作用域
    作业03.18
    函数第二天
    20.03.17作业
    文件
    20.01.16作业
    前端基础
    前端知识(二)
  • 原文地址:https://www.cnblogs.com/Czc963239044/p/7115773.html
Copyright © 2011-2022 走看看