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);
        }
    }
    
    
  • 相关阅读:
    第02组 Alpha冲刺(2/6)
    第02组 Alpha冲刺(1/6)
    第02组 团队Git现场编程实战
    第02组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    第一次结对编程作业
    第2组 团队展示(组长)
    Exchange 2013 中的 OAB (脱机通讯簿)以及如何管理
    vmware esxi 查看网卡、Raid卡驱动
  • 原文地址:https://www.cnblogs.com/echoou/p/14209390.html
Copyright © 2011-2022 走看看