PHP设计模式(二)

  从最近开始我给自己定了个目标,每周至少更新2篇博客,用来记录自己在上一周里面遇到的问题或者想出的新点子,一方面对自己掌握的知识进行记录,免得时间久了忘得一干二净,二来我的博文虽然不怎么好但也许会对一小部分读者产生一定的影响,而且我相信随着我原创博文写的次数越来越多,肯定水平会越来越高,深度也会越来越深(哈哈,我也很羡慕那些出名的博主,不但专业知识很棒,而且文笔也棒的很)。一周两篇我发现完全记录不完我想记录的东西,就像这周,我还有日志系统、二进制数据缓存(其实叫low一点的数据库比较合适)、QQwry.dat数据解读、zip压缩文件增量生成这几个方面的都没有进写,在以后的时间里我会慢慢更新到我的博客的,好了不扯了,这次我来介绍另外一种模式。

  • 简单工厂模式

  其实这种模式也是比较常用的,应该首先介绍,但由于我接触的单例模式比较多,所以就先介绍单例模式了。简单工厂模式,首先看下对它的定义:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

  简单工厂模式在项目中有什么好处呢?他有两个好处:

1. 首先就是使用简单工厂模式可以根据不同的参数去实例化不同的类,而不是new方法去实例化每一个不同的类,这样给使用者这样更好管理。

2. 其次就是如果要实例化的类在多个文件中用到,当我们修改类名称的时候只需要去修改工厂类就行,而不必修改每一个实例化该类的文件(有点鸡肋的感觉,这种情况很少见)。

  看一个最经典也最好理解的一个简单工厂模式的例子,运算符操作:

  简单工厂模式的工厂类一般是使用静态方法,通过接受不同的参数来返回不同的对象实例,代码是写死的,因此不修改代码就不能进行扩展,违反了OCP(对扩展开发,对修改关闭原则)。

<?php
/**
 * 简单工厂模式——经典运算符例子
 * @author 燕睿涛([email protected])
 */
/*简单工********************厂********************类*/
class Operation{
    /**
     * @var int $numa
     * 要操作的两个数字
     */
    protected $numa;
    protected $numb;
    public function __construct($a,$b){
        $this->numa = $a;
        $this->numb = $b;
    }

    //静态方法,通过接受不同的参数生成不同的对象实例
    public static function create($operation,$a,$b){
        switch ($operation) {
            case ‘+‘:
                return new Operationadd($a,$b);
                break;

            case ‘-‘:
                return new Operationminus($a,$b);
                break;
            default:
                # code...
                break;
        }
    }

}
/************************************************/

/*加法*/
class Operationadd extends Operation{
    public function doing(){
        return $this->numa + $this->numb;
    }
}

/*减法*/
class Operationminus extends Operation{
    public function doing(){
        return $this->numa - $this->numb;
    }
}

$test = Operation::create(‘+‘,2,56);
echo $test->doing();
  • 工厂模式

  之前我在项目中只接触到了简单工厂模式,为了写这篇文章我特意查了资料,发现工厂模式有三种:简单工厂模式(又叫静态工厂模式)、工厂模式、抽象工厂模式,看了工厂模式之后感觉他的用处好像不是很大,只是符合了OCP原则,在有新的符合抽象产品接口和抽象工厂接口的产品时我们只需要去扩展一种具体的产品和工厂就行,而不必去修改原有代码,总结下工厂模式的优缺点:

优点:首先就是符合了OCP原则,扩展性提高了;其次就是可维护性提高了,在修改一个具体工厂角色时只要找到自己的工厂角色就行,不用担心影响到其他工厂角色的实现。

缺点:代码多了,每种产品都要一个产品类和一个工厂类。这个缺点可以用简单工厂模式和工厂模式的结合来实现,将类似的产品类的工厂类合并为一个。

<?php
/**
 * 简单工厂模式——经典运算符例子
 * @author 燕睿涛([email protected])
 */
/*工*********厂**********方**********法*/
//交通工具接口(抽象产品角色)
interface vehicle{
    public function runing();
}
//交通工具工厂接口(抽象工厂角色)
interface vehiclefactory{
    public static function get();
}
/*具体产品角色*/
class car implements vehicle{
    public function runing(){
        echo "My speed is 120KM/h \r";
    }
}

class bicycle implements vehicle{
    public function runing(){
        echo "My speed is 30KM/h \r";
    }
}
/*具体工厂角色*/
class carfactory implements vehiclefactory{
    public static function get(){
        return new car();
    }
}
class bicyclefactory implements vehiclefactory{
    public static function get(){
        return new bicycle();
    }
}

$test = bicyclefactory::get();
$test->runing();

工厂类自己没在具体项目中用过,说起来总感觉有点怪怪的感觉,要是有什么不对的、不恰当的地方,还望各位高手前辈们指出。

send Me~

时间: 2024-10-12 22:51:20

PHP设计模式(二)的相关文章

设计模式:二

php面向对象设计模式中,工厂模式,从字面中就可以以理解为,工厂模式就是在不改变原来代码的结构的基础上,根据需求的增加类定义去完成 <?php header("Content-Type:text/html; charset=utf8"); /** * php设计模式 * 二:工厂模式 * */ // 定义接口DB类 interface DB{ function conn(); } class dbmysql implements DB{ public function conn(

设计模式 ( 二十一 ):Vistor访问者模式 -- 行为型

1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其访问方式有所不同. 例子1:顾客在超市中将选择的商品,如苹果.图书等放在购物车中,然后到收银员处付款.在购物过程中,顾客需要对这些商品进行访问,以便确认这些商品的质量,之后收银员计算价格时也需要访问购物车内顾客所选择的商品. 此时,购物车作为一个ObjectStructure(对象结构)用于存储各种类型的商品

设计模式 ( 二十 ): Template method模板方法模式 -- 行为型

  1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序.但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关.例子1:银行业务办理流程在银行办理业务时,一般都包含几个基本固定步骤:取号排队->办理具体业务->对银行工作人员进行评分.取号取号排队和对银行工作人员进行评分业务逻辑是一样的.但是办理具体业务是个不相同的,具体业务可能取款.存款或者转账. 2.问题 如何保证架构逻辑的正常执行,而不被子类破坏 ? 3.

介绍MFC框架中涉及到的设计模式(二)

接着上一篇<介绍MFC框架中涉及到的设计模式(一)>介绍 单例模式(Singleton Pattern) 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 单例模式的要点有三个: 1.某个类只能有一个实例: 2.它必须自行创建这个实例: 3.它必须自行向整个系统提供这个实例. 单例模式典

天天设计模式二:创建型模式实践

天天设计模式二:创建型模式实践 创建型设计模式主要应用在对象创建,以不同的方式来满足系统的灵活性配置.动态注入.等应用场景. 一.单例模式 二.抽象工厂 三.建造者模式 四.工厂方法模式 五.原型模式

C#中的异步调用及异步设计模式(二)——基于 IAsyncResult 的异步设计模式

三.基于 IAsyncResult 的异步设计模式(设计层面) IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来实现原同步方法的异步调用,如 FileStream 类提供了 BeginRead 和 EndRead 方法来从文件异步读取字节,它们是 Read 方法的异步版本 Begin 方法包含同步方法签名中的任何参数,此外还包含另外两个参数:一个AsyncCallback 委托和一个用户定义的状态对象.委托用

设计模式二(简单工厂模式)

学习笔记之设计模式二,简单工厂; 假设要取得数据库连接字符串, 1.创建抽象类: public abstract class ConnectString { //输出字符串 public abstract string GetConnectString(); } 2.创建各个实体类: public class SqlConnectString : ConnectString { public override string GetConnectString() { return "SQL Con

设计模式二: 工厂方法(Factory Method)

设计模式二: 工厂方法(Factory Method) 简介 工厂方法模式是创建型模式的一种, 核心结构有四个角色: 抽象工厂,具体工厂,抽象产品,具体产品; 实现层面上,该模式定义一个创建产品的接口,将实际创建工作推迟到具体工厂类实现, 一个产品对应一个工厂, 这样的好处是当有新产品引入时可以不修改具体的工厂角色. 意图 定义了一个创建对象的接口,但由子类决定要实例化哪个类.工厂方法把实例化操作推迟到子类. 类图 实现 以汽车举例. 按照本模式核心的四个角色分别定义, 并增加模式调用角色(此处

设计模式(二)---工厂方法模式

project方法模式 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 我的理解:工厂方法模式不是通过newkeyword来创建对象的.而是通过工厂接口提供的方法来创建其它对象. 工厂设计模式,在开发过程中非经常见,以下使用一个样例来引入普遍的工厂设计模式. 一个加工厂商加工不同的产品. Product类.抽象类,表示不同的产品. FoodProduct类,继承Product类,并实现其抽象方法. FruitProduct类,继承Product

php设计模式(二):结构模式

上一篇我们介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,现在我们继续来给大家介绍结构型模式.一.什么是结构型模式? 结构型模式是解析类和对象的内部结构和外部组合,通过优化程序结构解决模块之间的耦合问题. 二.结构型模式的种类:    适配器模式    桥接模式    装饰模式    组合模式    外观模式    享元模式    代理模式 1. 适配器模式(Adapter) 将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本的由于接口不兼容而不能