zoukankan      html  css  js  c++  java
  • 简单工厂模式

    工厂模式是最常用的设计模式之一,是一样创建型设计模式。是创建对象的最佳方式,客户端可以不用知道具体对象的情况下,实例化对象。
    有三种工厂模式

    • 简单工厂模式
    • 工厂模式
    • 抽象工厂模式

    这里我们先学习介绍简单工厂

    简单工厂模式

    定义一个工厂类,可以通过不同的参数返回不同的类的实例。

    优点:

    1. 客户端只需知道参数即可,无需知道创建实例的具体类名;
    2. 可以在不修改客户端的情况下,修改类名。

    缺点:

    1. 违反单一职责原则,一个类承担多个职责,随着手机品牌增多,会变的原来越难以维护;
    2. 违反开闭原则,如果修改一旦出现错误,可能造成整个系统崩溃;

    具体代码实现
    你可以在我的github上下载代码
    工厂类
    SimpleFactory.php

    <?php
    
    namespace AppCreationalSimpleFactory;
    
    
    class SimpleFactory
    {
        static public function createPhone($brand)
        {
            switch ($brand) {
                case 'Xiaomi':
                    return new Xiaomi();
                    break;
                case 'Huawei':
                    return new Huawei();
                    break;
                case 'Iphone':
                    return new Iphone();
                    break;
                default:
                    return new Shanzhaiji();
            }
        }
    }
    
    
    

    定义一个手机接口,具有播放音乐和播放视频功能
    Phone.php

    <?php
    
    
    namespace AppCreationalSimpleFactory;
    
    
    interface Phone
    {
        public function playMusic();
        public function playVideo();
    }
    
    

    IPhone手机类
    Iphone.php

    <?php
    
    
    namespace AppCreationalSimpleFactory;
    
    
    class Iphone implements Phone
    {
        public function playVideo()
        {
            // TODO: Implement playVideo() method.
        }
    
        public function playMusic()
        {
            // TODO: Implement playMusic() method.
        }
    }
    
    

    华为手机类
    Huawei.php

    <?php
    
    
    namespace AppCreationalSimpleFactory;
    
    
    class Huawei implements Phone
    {
        public function playMusic()
        {
            // TODO: Implement playMusic() method.
        }
    
        public function playVideo()
        {
            // TODO: Implement playVideo() method.
        }
    }
    
    

    小米手机类
    Xiaomi.php

    <?php
    
    
    namespace AppCreationalSimpleFactory;
    
    
    class Xiaomi implements Phone
    {
        public function playMusic()
        {
            // TODO: Implement playMusic() method.
        }
    
        public function playVideo()
        {
            // TODO: Implement playVideo() method.
        }
    }
    
    

    测试类
    SimpleFactoryTest.php

    <?php
    /**
     * 简单工厂测试
     */
    include __DIR__.'/../vendor/autoload.php';
    
    use PHPUnitFrameworkTestCase;
    use AppCreationalSimpleFactorySimpleFactory;
    
    class SimpleFactoryTest extends TestCase
    {
    
        public function testCanCreateBicycle()
        {
            $phone = SimpleFactory::createPhone('Xiaomi');
            $this->assertInstanceOf(AppCreationalSimpleFactoryPhone::class, $phone);
        }
    }
    
    
  • 相关阅读:
    [转帖]能感动天地的老人,你拿什么来感动CCTV
    SaaS, 8,9点的太阳
    ERP软件开源是中国软件行业未来之路
    觉得为时已晚的时候,恰恰是最早的时候。
    新画皮故事——ERP软件为什么要免费
    如何定制SharePoint“欢迎”菜单?
    软件产品在什么情况下一定要走精品路线
    我的blogs
    测试环境中安装sharepoint server 2010过程中出现的一些问题及解决过程
    windows server 2008 与windows server 2008 r2区别
  • 原文地址:https://www.cnblogs.com/echoou/p/14209390.html
Copyright © 2011-2022 走看看