昨天写了个策略模式,没看过的可以先看一下设计模式之三——策略模式(泡妞讲策略模式) ;但没有具体写怎么样去泡,既然知道了针对不同的类型用什么策略去泡,但到底怎么去实现呢?过程是怎么样呢?这就要用到装饰模式啦。
装饰模式是为已有功能动态的添加更多功能的一种方式。当旧系统要增加功能时,用这个模式就可以很容易地在不修改原系统基础上加入新的功能。
先写一个泡妞者类paoliuer.php
- <?php
- class paoliuer {
- private $name;
- public function __construct(){
- }
- public function setName($name){
- $this->name=$name;
- }
- public function action(){
- echo "<br>这是{$this->name}的方法!";
- }
- }
- ?>
然后写一个泡妞过程的类,选抽像一个泡妞过程的类吧,还不知道有什么泡妞办法呢
actions.php
- <?php
- require_once ('paoliuer.php');
- class actions extends paoliuer {
- protected $actioner;
- public function howToActions($actioner){
- $this->actioner=$actioner;
- }
- public function action(){
- if ($this->actioner!=null){
- $this->actioner->action();
- }
- }
- }
- ?>
一开始只知道送花这一种办法,好,先写一个送花类吧hua.php,有新的办法再加进去
- <?php
- require_once ('actions.php');
- class hua extends actions {
- public function action(){
- $this->oneAction();
- $this->towAction();
- echo '告诉MM这花是送给你的<br>';
- $this->actioner->action();
- }
- private function oneAction(){
- echo "约MM到一个花园里<br>";
- }
- private function towAction(){
- echo "带到一堆牛粪旁边,然后摘一朵,插到牛粪上<br>";
- }
- }
- ?>
想想浪漫类型的女孩子喜欢看日落,增加一个看日落的类吧kanyuluo.php
- <?php
- require_once ('actions.php');
- class kanyuluo extends actions {
- public function action(){
- echo "<br>约MM去看日落,然后......<br>";
- $this->actioner->action();
- }
- }
- ?>
现在知道了这些办法了,好,测试一下怎么泡妞吧test.php
- <?php
- include 'paoliuer.php';
- include 'actions.php';
- include 'hua.php';
- include 'kanyuluo.php';
- $gg=new paoliuer();
- $gg->setName('周杰伦');
- echo("第一种方法<br>");
- //实例化各个装饰类,先想好泡妞要做什么操作
- $hua=new hua();
- $kanyuluo=new kanyuluo();
- //装饰过程,泡妞过程
- $hua->howToActions($gg);
- $kanyuluo->howToActions($hua);
- $kanyuluo->action();
- echo "<p>其实过程是灵活可变的,也可以这样</p>";
- $kanyuluo->howToActions($gg);
- $hua->howToActions($kanyuluo);
- $hua->action();
- ?>
由于本人不会泡妞,所以只能写两种办法出来,各位高手可以很容易在这个基础上增加功能。并且不会影响我所会的功能。呵呵。