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

    工厂模式:使用工厂类使创建类与使用类分离,从而提高代码的易维护性,可扩展性等

    工厂模式分位简单工厂模式工厂方法模式
    使用简单工厂模式的步骤:
        1、创建父类及其子类
            父类中有[抽象]方法,在子类中实现。(父类可以是普通类,也可以是抽象类)
        2、创建工厂类
            有静态工厂方法,通过逻辑判断创建不同实例,返回父类类型
        例如://算法父类
                    abstract class YunSuan{
                      abstract function YunSuan();
                    }
                    //加法的子类
                    class Jia extends YunSuan{
                            function YunSuan(){
                                    echo "这是加法";
                            }
                    }
                    //减法的子类
                    class Jian extends YunSuan{
                            function YunSuan()    {
                                echo "这是减法";
                            }
                    }
                    //工厂类,通过逻辑判断创建不同实例
                    class GongChang{
                        static function DuiXiang($f)    {
                            switch($f)        {
                                case "+":
                                    return new Jia();
                                    break;
                                case "-":
                                   return new Jian();
                                    break;
                            }
                      }
                }
                //测试
                $r = GongChang::DuiXiang("-");
                $r->YunSuan();
     
    简单工厂模式对于扩展的实现挺好,但是修改的话就不是很方便,你需要在工厂类中添加逻辑判断等
     
    使用工厂方法模式的步骤:
        1、创建父类及其子类
                //同上
        2、创建工厂类及其子类
              工厂类中没有具体实现,通过子类实例化创建具体对象
            abstract class GongChang{
                        abstract static function DuiXiang();
            }
            //jia子类
            class jiafa extends GongChang{
                function DuiXiang(){
                    return new jia();
                }
            }
            //jian子类
            class jianfa extends GongChang{
                function DuiXiang(){
                    return new jian();
                }
            }
            //测试
            $gc = new DuiXiang();
            $ys = $gc->jiafa();
            $ys->jia();
    
    
    使用工厂方法模式就完全符合开闭原则了,针对扩展开放,针对修改关闭,不用去修改任何已有的代码,只需要添加子类或者删除子类就行了
     
     
     
    单例模式:控制创建对象的个数

    class DA{
      public $name;
      static private $dx;//存放对象的变量

      //将构造变为私有,外界没法造对象
      private function __construct(){
      }

      //提供一个造对象的方法
      static function CreateDX(){
        if(empty(self::$dx)){
        self::$dx = new DA();
        }
        return self::$dx;
      }
    }

    $d = DA::CreateDX();
    $d1 = DA::CreateDX();
    $d1->name = "lisi";

    var_dump($d==$d1);

  • 相关阅读:
    安全模式下卸载windows installer打包的软件(转)
    OAF页面集成条形码或者二维码
    记一次客户生产环境供应商门户服务器无法访问
    QML显示圆形图片
    QML加载gif
    QML之信号与槽
    QML访问C++类内部
    QML使用C++对象
    C++条件变量
    C/C++程序所占用内存区域
  • 原文地址:https://www.cnblogs.com/yongjiapei/p/5570358.html
Copyright © 2011-2022 走看看