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);
        }
    }
    
    
  • 相关阅读:
    Java 8简明教程
    ASCII码
    正则 取反匹配
    Eclipse 常用快捷键
    MongoDb基本操作
    Mac下eclipse的快捷键
    oracle的字符集设置与乱码
    Java7、Java8 安装卸载问题
    Oracle | PL/SQL Check约束用法详解
    浅谈数据库中的触发器
  • 原文地址:https://www.cnblogs.com/echoou/p/14214227.html
Copyright © 2011-2022 走看看