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

工厂模式分位简单工厂模式工厂方法模式

使用简单工厂模式的步骤:
    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);

工厂模式 and 单例模式的更多相关文章

  1. PHP 设计模式 笔记与总结(6)基础设计模式:工厂模式、单例模式和注册树模式

    三种基础设计模式(所有面向对象设计模式中最常见的三种): ① 工厂模式:使用工厂方法或者类生成对象,而不是在代码中直接new 在 Common 目录下新建 Factory.php: <?php ...

  2. Spring中的工厂模式和单例模式

    Spring预备知识(适合中小型项目) 作用:集成和管理其他框架 工厂模式: A  a  = new A( ); 将类所要创建的对象写入工厂,统一进行管理 package com.spring; pu ...

  3. php设计模式 工厂模式和单例模式

    一.单例模式//让该类在外界无法造对象//让外界可以造一个对象,做一个静态方法返回对象//在类里面通过让静态变量控制返回对象只能是一个. 单例模式的要点有三个: 一是某个类只能有一个实例: 二是它必须 ...

  4. javascript工厂模式、单例模式

    //工厂模式 function createObject(name,age){ var obj = new Object(); obj.name = name; obj.age = age; obj. ...

  5. PHP设计模式-工厂模式、单例模式、注册模式

    本文参考慕课网<大话PHP设计模式>-第五章内容编写,视频路径为:http://www.imooc.com/video/4876 推荐阅读我之前的文章:php的设计模式 三种基本设计模式, ...

  6. Java ------ 工厂模式、单例模式

    工厂模式 简单工厂模式: 1.创建Car接口 public interface Car { public void drive(); } 2.创建两个实体类,分别实现Car接口 public clas ...

  7. php中的设计模式---工厂模式及单例模式

    这两个练习放在一起处理. 在python中,这些模式都有的. 要记得三大类模式:创建型,结构型,行为型. NotFoundException.php <?php namespace Bookst ...

  8. java23种设计模式(一)-- 工厂模式、抽象工厂模式和单例模式

    一.工厂模式 1.定义统一的接口,并在接口中定义要实现的抽象方法. 2.创建接口的具体实现类,并实现抽象方法. 3.创建一个工厂类,根据传递的参数,生成具体的实现类对象,执行具体的方法. 优点: 1. ...

  9. PHP设计模式笔记三:三种基本设计模式(工厂模式、单例模式、注册树模式) -- Rango韩老师 http://www.imooc.com/learn/236

    一.工厂设计模式 index.php $db = IMooc\Factory::createDatabase(); 使用工厂类的静态方法直接创建一个dababase对象,当类名发生修改时,在工厂里修改 ...

随机推荐

  1. 【Hibernate】版本错误 org/hibernate/Query : Unsupported major.minor version 52.0

    报错原因:jdk1.7不支持 hibernate的最新版本5.2.0,把hibernate的版本换成5.1.3或更早的版本. 补充:mysql-connector-java-6.0.x也不被hiber ...

  2. 2017-04-21周Java学习笔记

    2017-04-21-周Java学习笔记... -------------------------------------- 计算机起源于:战争中的炮弹轨道计算.Unix操作系统是使用C语言编写的操作 ...

  3. 每次打开VS都报错:我们无法自动填充你的 Visual Studio Team Services 帐户

    我们无法自动填充你的 Visual Studio Team Services 帐户.遇到下面的错误: TF400813: Resource not available for anonymous ac ...

  4. Struts2简介以及初步搭建配置

    一.基本介绍 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. ...

  5. MySQL(四)之MySQL数据类型

    一.数据类型概述 MySQL的数据类型有大概可以分为5种,分别是 整数类型.浮点数类型和定点数类型.日期和时间类型.字符串类型.二进制类型.现在可以来看看你对这5种类型的熟悉程度,哪个看起来懵逼了,那 ...

  6. 小而美的 React Form 组件

    背景 之间在一篇介绍过 Table 组件< React 实现一个漂亮的 Table > 的文章中讲到过,在企业级后台产品中,用的最多且复杂的组件主要包括 Table.Form.Chart, ...

  7. 基于CAS的SSO(单点登录)实例

    第一步 部署CAS-Server(服务端) 1.从CAS官方网站(http://developer.jasig.org/cas/)下载最新版本的CAS-Server(当前最新版本cas-server- ...

  8. EF实例创建问题

    场景:CodeFirst 情况下,在控制器新建一个EF数据库对象,以便运行时进行表的初始化创建 Private DemoContext db=new DemoContext (): 问题:什么时候释放 ...

  9. TitleLayout——一个Android轻松实现标题栏的库

    TitleLayout 多功能.通用的.可在布局或者使用Java代码实现标题栏: 支持沉浸式状态栏: 支持左侧返回按钮不需要手动实现页面返回: 支持左侧按钮,中间标题,右边按钮点击 左侧支持图片+文字 ...

  10. 可以用 Python 编程语言做哪些神奇好玩的事情?

    作者:造数科技链接:https://www.zhihu.com/question/21395276/answer/219747752 使用Python绘图 我们先来看看,能画出哪样的图 更强大的是,每 ...