zoukankan      html  css  js  c++  java
  • 工厂方法模式

    工厂方法模式

    简单工厂模式违反了开闭原则还有单一职责原则,工厂方法模式是对简单工厂模式的进一步抽象。

    工厂方法模式的优缺点
    优点:

    1. 用户创建实例时不需要知道知道具体类,而只需要知道工厂类;
    2. 新建一个产品,只需要新建一个相应的类;

    缺点:

    1. 类的个数将会越来越多;
    2. 增加系统抽象度,更加难以理解;
    3. 抽象产品只能生产一种产品。

    具体代码
    AbstractFactory.php

    <?php
    
    
    namespace AppCreationalFactory;
    
    
    abstract class AbstractFactory
    {
        abstract static public function make();
    }
    
    

    IphoneFactory.php

    <?php
    
    
    namespace AppCreationalFactory;
    
    
    class IphoneFactory extends AbstractFactory
    {
        static public function make(){
            return new Iphone();
        }
    }
    
    

    XiaomiFactory.php

    <?php
    
    
    namespace AppCreationalFactory;
    
    
    class XiaomiFactory extends AbstractFactory
    {
        static public function make(){
            return new Xiaomi();
        }
    }
    
    

    AbstractPhone

      
    <?php
    
    
    namespace AppCreationalFactory;
    
    
    abstract class AbstractPhone
    {
    
        abstract public function playMusic();
    
        abstract public function playVideo();
    }
    

    Xiaomi.php

    <?php
    
    
    namespace AppCreationalFactory;
    
    
    class Xiaomi extends AbstractPhone
    {
        public function playVideo()
        {
            // TODO: Implement playVideo() method.
        }
    
        public function playMusic()
        {
            // TODO: Implement playMusic() method.
        }
    
    }
    
    

    Iphone.php

      
    <?php
    
    
    namespace AppCreationalFactory;
    
    
    class Iphone extends AbstractPhone
    {
        public function playVideo()
        {
            // TODO: Implement playVideo() method.
        }
    
        public function playMusic()
        {
            // TODO: Implement playMusic() method.
        }
    
    }
    

    测试代码

    <?php
    
    class FactoryTest extends PHPUnitFrameworkTestCase
    {
        public function testPhoneProcut()
        {
            $phone = AppCreationalFactoryIphoneFactory::make();
            $this->assertInstanceOf(AppCreationalFactoryIphone::class, $phone);
        }
    }
    
    
  • 相关阅读:
    asp.net core 使用 StaticFiles 中间件 (不完整翻译)
    asp.net core 通过 TeamCity 实现持续集成笔记
    Swashbuckle for asp.net core 配置说明
    # TypeScript 中如何确保 this 的正确性
    MySql + EF6 + .Net Core
    ASP.NET Core + EF6
    数据库设计 Assignment 02
    NYOJ 8 一种排序
    NYOJ 23.取石子(一)
    邻接表(C++)
  • 原文地址:https://www.cnblogs.com/echoou/p/14214227.html
Copyright © 2011-2022 走看看