设计模式之命令链模式

<?php

interface ICommand
{
    public function onCommand( $name );
}
//为各个针对不同情况的函数,尽量用相同的处理函数

class CommandChain//主类
{
    private $_commands = array();//用来保存各种情况所对应的类的对象

    public function addCommand( $cmd )//增加不同的“处理器”
    {
        $this->_commands []= $cmd;
    }

    public function runCommand( $name )//主类中的处理函数
    {
        foreach( $this->_commands as $cmd )//将数组中存放的“处理器”依次调用,判断“处理器”中的方法是否相匹配,如果匹配,直接返回,不再往下执行
        {
            if ($cmd->onCommand( $name )) {
                return;
            }
        }
    }
}

class UserCommand implements ICommand//第一个处理器,判断用户名中是否含有adduser
{
    public function onCommand( $name )
    {
        if ($name != ‘addUser‘ ) {
            return false;
        }
        echo "UserCommand handling ‘addUser‘\n";
        return true;
    }
}

class MailCommand implements ICommand//第二个“处理器”。用来判断name中是否有mail
{
    public function onCommand( $name )
    {
        if ($name != ‘mail‘) {
            return false;
        }
        echo "MailCommand handling ‘mail‘\n";
        return true;
    }
}

$cc = new CommandChain();//定义一个主类对象
$cc->addCommand( new MailCommand() );//添加处理器
$cc->addCommand( new UserCommand() );//添加处理器
$cc->runCommand( ‘addUser‘ );//输入参数adduser来处理
$cc->runCommand( ‘mail‘ );
?>

  这和之前的策略模式都很像,将几个“处理器”定义为类,都有相同的一个方法。

1.写出几个策略类,有相同的方法(用接口实现)

2.主类有一个数组用于保存插入的不同的策略函数的对象

3.主类中用循环取出不同的策略对象,调用对象的处理方法,返回true,程序就停止运行

时间: 2024-12-14 18:45:50

设计模式之命令链模式的相关文章

php设计模式之命令链模式

命令链模式: 命令链模式以松散耦合主题为基础,发送消息.命令和请求,或通过一组处理程序发送任意内容.每个处理程序都会自行判断自己能否处理请求.如果可以,该请求被处理,进程停止.您可以为系统添加或移除处理程序,而不影响其他处理程序. 1.interface Validator 2.{ 3.    /** 4.     * The method could have any parameters. 5.     * @param mixed 6.     * @return boolean 7.  

设计模式之------命令链模式

<?php /*** **命令链模式:松散耦合为主题,发送消息,命令和请求通过一组命令 **封装一系列操作 ** 一条命令被看做只执行了一个函数 ********/ Interface ICommand{ function isValue($val); } class CommonClain{ private $_command; public function __construct(ICommand $value){ $this->_command = $value; } public f

设计模式之单列模式

设计模式之单列模式 1,何为单列模式? 即singleton 在某个类采用了单列模式之后  其只能有一个实列对象 ,并且这个实列对象只能有内部自己创建并提供给外部的调用. 2.实现单列模式的方法 分为 :饿汉式 ,懒汉式 下面为饿汉式实现代码: public calss Singleton1{ //将构造函数私有化 防止外部通过new来创建对象 private Singleton1(){ } //创建一个私有静态变量并直接初始化 类加载的时候直接创建对象 private static Singl

设计模式09-组合模式

1. 概念 有时候又叫做部分-整体模式    存在整体和部分的时候  希望客户端忽略整体和部分的区别 2. 案例 /********************************************************************** * <pre> * FILE : Demo01.java * CLASS : Demo01 * * AUTHOR : Liaokailin * * FUNCTION : TODO * * *=========================

设计模式13-代理模式

1. 概念 代理模式又称为委托模式 :为其他对象提供一种代理以控制对这个对象的访问. 2. 案例 package org.demo.proxy.demo01; public class Demo03 { public static void main(String[] args) { IUser user = new UserProxy(new UserImpl()) ; user.action() ; } } interface IUser{ void action() ; } class U

设计模式12-享元模式

1. 概念 享元模式(FlyWeight),运用共享技术有效的支持大量细粒度的对象 2. 案例 /********************************************************************** * <pre> * FILE : Demo01.java * CLASS : Demo01 * * AUTHOR : Liaokailin * * FUNCTION : TODO * * *==================================

每天一个设计模式-7 生成器模式(Builder)

每天一个设计模式-7 生成器模式(Builder) 一.实际问题 在讨论工厂方法模式的时候,提到了一个导出数据的应用框架,但是并没有涉及到导出数据的具体实现,这次通过生成器模式来简单实现导出成文本,Xml等具体的格式. 导出成文本或Xml等格式的数据时,一般都会有各自的格式,比如:导出的文件都有3个部分,文件头,内容,尾. 二.问题分析 无论哪种导出格式,都需要3个部分,文件头,内容,尾等信息,并且他们的内容相同.即他们的构造算法固定,只是生成的结果不同:能不能把算法(构建)和结果(外观)分离出

设计模式-抽象工厂模式(C#)

设计模式--抽象工厂模式(JAVA) 在抽象工厂模式中,一个具体工厂可以生产一组相关的具体产品,这样的一组产品成为产品族,产品族中的每一个产品都属于某一个产品继承等等级结构.当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构.属于不同类型的具体产品时就可以使用抽象工厂模式. 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建,当一个工

java设计模式之外观模式(门面模式)

针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下. 一.概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.这种类型的设计模式属于结构性模式.为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用. 二.角色及使用场景 简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用.这个模式中,设计到3个角色. 1).门面角色:外观模式的核心.它被客户角色调用,它熟悉子系统的功