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);
        }
    }
    
    
  • 相关阅读:
    数组
    原生获取 键盘 keycode 鼠标 键码
    javascript 拖拽
    简单的鼠标拖拽
    vue中格式化时间戳
    使用koa+angular+mysql 完成了一个企业站
    koa2+mysql5+angularjs1 搭建前后端全栈项目
    javascript利用闭包实现迭代器轮询数组中的元素
    AngularJS 1.x版本 学习教程
    改变,从羡慕别人开始
  • 原文地址:https://www.cnblogs.com/echoou/p/14214227.html
Copyright © 2011-2022 走看看