关于23类设计模式的有趣见解 - VISITOR
关于23种设计模式的有趣见解 --- VISITOR好久没发贴了。现在大家都在讨论设计模式,今天也来火一把:)就把htt
关于23种设计模式的有趣见解 --- VISITOR
好久没发贴了。现在大家都在讨论设计模式,今天也来火一把:)
就把http://www.jdon.com上看到的有个《关于23种设计模式的有趣见解》解答一下,请大家拍砖。
先从VISITOR开始吧:
VISITOR—情人节到了,要给每个MM送一束鲜花和一张卡片,可是每个MM送的花都要针对她个人的特点,每张卡片也要根据个人的特点来挑,我一个人哪搞得清楚,还是找花店老板和礼品店老板做一下Visitor,让花店老板根据MM的特点选一束花,让礼品店老板也根据每个人特点选一张卡,这样就轻松多了;
访问者模式:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。访问者模式使得增加新的操作变的很容易,就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。当使用访问者模式时,要将尽可能多的对象浏览逻辑放在访问者类中,而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。
先上代码:
先实现美女类,用四大美女来模拟。
<p>?</p>
<p>2.DEMO:</p>
<p>?</p>
<p>元素角色:定义一个accept操作,它以一个访问者为参数。</p>
<pre name="code" class="java">package com.test.visitor;
public class Test {
public static void main(String[] args) {
FlowerPurchase purchase = new FlowerPurchase();
purchase.purchase(new FlowerBoss());
}
}</pre>
<p>?</p>
<p>3.特点:</p>
<p>双重分配:</p>
<p>???????????? purchase.purchase(new FlowerBoss());(给每个具体的角色分派一个具体观察者)。</p>
<p>???????????? visitor.visit(this);具体访问者模式再根据参数的不同来选择方法来执行。</p>
<p>?</p>
<p>在两个接口Visitor和Girl中,确保Girl很少变化,也就是说,确保不能老有新的Element元素类型加进来,可以变化的是访问者行为或操作,也就是Visitor的不同子类可以有多种,这样使用访问者模式最方便.</p>
<p>所以这个例子不太合适,花店的顾客是不断变化的,girl也是不断变化的。</p>
<p>?</p>
<p>4,适用场合:</p>
<p>《设计模式》一书中给出了访问者模式适用的情况:<br><br> 1) 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。<br><br> 2) 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Visitor使得你可以将相关的操作集中起来定义在一个类中。<br><br> 3) 当该对象结构被很多应用共享时,用Visitor模式让每个应用仅包含需要用到的操作。<br><br> 4) 定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。改变对象结构类需要重定义对所有访问者的接口,这可能需要很大的代价。如果对象结构类经常改变,那么可能还是在这些类中定义这些操作较好。</p> 5 楼 liuyizhang 2010-02-09 前面观察者模式写的有点问题