为生存而奔跑

   :: 首页 :: 联系 :: 聚合  :: 管理
  271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

留言簿(5)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 323490
  • 排名 - 74

最新评论

阅读排行榜

评论排行榜

设计得很巧妙,但是不知道什么时候用。因为同样的需求,可以用多态很容易地实现。
举例:
用多态实现一个需求的代码:
interface node
{
    
void process();
}
class NodeA implements node
{
    
public void process()
    {
        System.out.println(
"NodeA processed");
    }
}
class NodeB implements node
{
    
public void process()
    {
        System.out.println(
"NodeB processed");
    }
}
class Visit
{
    
public void visit(node n)
    {
        n.process();
    }
}
public class Main
{
    
public static void main(String[] args) 
    {
        Visit v
=new Visit();
        v.visit(
new NodeA());
        v.visit(
new NodeB());
    }
}  

用visitor模式实现的代码
abstract class Node
{
    
abstract void process();
    
public void accept(Visitor visitor)
    {
        visitor.visit(
this);
    }
}
class NodeA implements Node
{
    
public void process()
    {
        System.out.println(
"NodeA processed");
    }
}
class NodeB implements Node
{
    
public void process()
    {
        System.out.println(
"NodeB processed");
    }
}

interface Visit
{
    
void visit(NodeA node);
    
void visit(NodeB node);
}
class VisitA implements Visit
{
    
public void visit(NodeA node)
    {
        node.process();
    }
    
public void visit(NodeB node)
    {
        node.process();
    }
}
class VisitB implements Visit
{
    
public void visit(NodeA node)
    {
        node.process();
    }
    
public void visit(NodeB node)
    {
        node.process();
    }
}
public class Main
{
    
public static void main(String[] args) 
    {
        VisitA v
=new VisitA();
        nodea
=new NodeA();
        nodeb
=new NodeB();
        nodea.accept(v);
        nodeb.accept(v);
    }
}  


采用Visitor的好处是,当需要改变其中一项业务(即Node)的处理时,不需要每个地方都进行修改,而只需要改动Visitor类中相应的处理函数就可以了。也就是说它适合于业务处理时常发生变动的情况。

当然,Visitor也有它自身的限制。它不适合于业务数量的经常变化,因为一旦新增或删除一些Node时,需要对visitor进行相应的增删。也就是说具体Node与Visitor是耦合的。此时可以用多态,因为增加或者删除一些Node时,只需要增加或者删除即可。

posted on 2009-11-28 23:31 baby-fly 阅读(483) 评论(0)  编辑 收藏 引用 所属分类: Design Pattern

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理