• 工厂方法模式


    工厂方法模式

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

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

    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);
        }
    }
    
    
  • 相关阅读:
    python 数据类型 基础第二天
    Python基础第一篇
    前言、入门程序、常量、变量
    win10打开移动热点让手机连接上网教程
    win10移动热点问题
    博客园快速美化
    Idea提示没有符号类错误解决
    mybatis复习01
    test
    d190305面试题01总结
  • 原文地址:https://www.cnblogs.com/echoou/p/14214227.html
Copyright © 2020-2023  润新知