博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP设计模式学习笔记: 命令模式(Command)
阅读量:5967 次
发布时间:2019-06-19

本文共 2541 字,大约阅读时间需要 8 分钟。

  hot3.png

// 书本信息操纵类,包括书本的所有操作命令的方法class BookCommandee {    private $author;    private $title;    function __construct($title_in, $author_in) {        $this->setAuthor($author_in);        $this->setTitle($title_in);    }    function getAuthor() {        return $this->author;    }    function setAuthor($author_in) {        $this->author = $author_in;    }    function getTitle() {        return $this->title;    }    function setTitle($title_in) {        $this->title = $title_in;    }    function setStarsOn() {        $this->setAuthor(str_replace(' ','*',$this->getAuthor()));        $this->setTitle(str_replace(' ','*',$this->getTitle()));    }    function setStarsOff() {        $this->setAuthor(str_replace('*',' ',$this->getAuthor()));        $this->setTitle(str_replace('*',' ',$this->getTitle()));    }    function getAuthorAndTitle() {        return $this->getTitle().' by '.$this->getAuthor();    }}// 抽象类,规定必须有书本操纵类属性和exexute()方法abstract class BookCommand {    protected $bookCommandee;    function __construct($bookCommandee_in) {        $this->bookCommandee = $bookCommandee_in;    }    abstract function execute();}// 继承自BookCommand抽象类的专门加星标的类class BookStarsOnCommand extends BookCommand {    function execute() {        $this->bookCommandee->setStarsOn();    }}// 继承自BookCommand抽象类的专门去星标的类class BookStarsOffCommand extends BookCommand {    function execute() {        $this->bookCommandee->setStarsOff();    }}  writeln('开始测试命令模式');  writeln('');   // 创建一个书本操纵类  $book = new BookCommandee('Design Patterns', 'Gamma, Helm, Johnson, and Vlissides');  // 可以用这个类得到它的书名等属性  writeln('创建book之后: ');  writeln($book->getAuthorAndTitle());  writeln('');   // 创建一个专门加星标的类  // 调用它的execute()方法,给书本加星标  $starsOn = new BookStarsOnCommand($book);  callCommand($starsOn);  writeln('book加星标之后: ');  writeln($book->getAuthorAndTitle());  writeln('');   // 创建一个专门去星标的类  // 调用它的execute()方法,给书本去星标  $starsOff = new BookStarsOffCommand($book);  callCommand($starsOff);  writeln('book去星标之后: ');  writeln($book->getAuthorAndTitle());  writeln('');  writeln('结束测试命令模式');   function callCommand(BookCommand $bookCommand_in) {    $bookCommand_in->execute();  }  function writeln($line_in) {    echo $line_in.PHP_EOL;  }// 我想这个精髓就是,把针对某个类的操作命令,全部放在一个专门的类里面去,调用这个专门的命令类的执行(execute())方法,// 就给需要操作的类执行了相应的命令

结果:

开始测试命令模式创建book之后: Design Patterns by Gamma, Helm, Johnson, and Vlissidesbook加星标之后: Design*Patterns by Gamma,*Helm,*Johnson,*and*Vlissidesbook去星标之后: Design Patterns by Gamma, Helm, Johnson, and Vlissides结束测试命令模式

转载于:https://my.oschina.net/ecnu/blog/289304

你可能感兴趣的文章
unix文件权限
查看>>
Python 模拟鼠键
查看>>
2017-2018-2 20155224『网络对抗技术』Exp7:网络欺诈防范
查看>>
Source Code Review
查看>>
分享一下我安装启动Jmeter出错时的解决办法
查看>>
java 调用process
查看>>
用a标签实现submit提交按钮的效果
查看>>
毕向东_Java基础视频教程第20天_IO流(1~4)
查看>>
几图理解BeautifulSoup
查看>>
HashMap内部是如何实现的(转)
查看>>
交互设计[3]--点石成金
查看>>
java实现双向循环链表
查看>>
如何使用缓存提高程序性能
查看>>
【trie树】HDU4825 Xor Sum
查看>>
SCCM TP4部署Office2013
查看>>
Linux系统启动过程,grub重装。
查看>>
使用Putty密钥认证机制远程登录Linux
查看>>
【博客话题】技术人生之三界修炼
查看>>
Ext JS 6开发实例(三) :主界面设计
查看>>
【原创】Oracle RAC原理和安装
查看>>