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
    

      

  • 相关阅读:
    Android启动过程介绍
    第九届蓝桥杯Java B组
    二分模板和区别
    第十届蓝桥杯Java B组
    2019 ICPC Asia Nanjing Regional(现场赛)
    PAT 甲级 1057 Stack
    P1972 [SDOI2009]HH的项链
    Python中的字典排序
    Comet OJ
    ekmp模板
  • 原文地址:https://www.cnblogs.com/Czc963239044/p/7115773.html
Copyright © 2011-2022 走看看