zoukankan      html  css  js  c++  java
  • PHP设计模式:简单工厂

    示例代码详见https://github.com/52fhy/design_patterns

    简单工厂

    简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。

    也就是使用的时候通过传参来确定生成不同的对象。

    简单工厂UML图:

    简单工厂需要有3个角色:

    • Product接口类:用于定义产品规范;
    • 具体的产品实现,例如ConcreateProductA、ConcreateProductB;
    • 简单工厂类SimpleFactory:用于生成具体的产品。

    使用的时候通过传参数给简单工厂类,可以生成想要的产品。

    代码:
    ICar.php:定义产品规范:

    namespace YjcSimpleFactory;
    
    interface ICar
    {
        public function driver();
    }
    

    具体产品实现:

    namespace YjcSimpleFactory;
    
    class Benz implements ICar
    {
        public function driver()
        {
            echo 'benz driver.';
        }
    }
    
    class Bmw implements ICar
    {
        public function driver()
        {
            echo 'bmw driver.';
        }
    }
    

    简单工厂类SimpleFactory:

    namespace YjcSimpleFactory;
    
    class SimpleFactory
    {
        public static function makeCar($type){
            switch ($type){
                case 'benz':
                    return new Benz();
                    break;
                case 'bmw':
                    return new Bmw();
                    break;
                default:
                    throw new Exception('not support type!');
                    break;
            }
        }
    }
    

    参数代码:

    $car = SimpleFactory::makeCar('benz');
    $car->driver();
    

    简单工厂的优点/缺点:

    优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。明确区分了各自的职责和权力,有利于整个软件体系结构的优化。

    缺点:很明显工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则。

    参考:
    1、设计模式:简单工厂、工厂方法、抽象工厂之小结与区别 - superbeck的专栏 - 博客频道 - CSDN.NET
    http://blog.csdn.net/superbeck/article/details/4446177
    2、简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别 - Danny Chen - 博客园
    http://www.cnblogs.com/zhangchenliang/p/3700820.html

  • 相关阅读:
    提示“此Flash Player与您的地区不相容,请重新安装Flash”的解决办法
    python中安装并使用redis
    linux安装flash player来播放视频
    安装redis
    centos6.5安装无线网卡驱动并配置wifi
    centos安装java的jdk
    001-python简介
    源码
    进程间通信之综述
    图的概念
  • 原文地址:https://www.cnblogs.com/52fhy/p/7076113.html
Copyright © 2011-2022 走看看