设计模式-行为型模式总结实例(三)(二)

2014-11-24 03:21:52 · 作者: · 浏览: 1
ouse(am); buyer.buyHouse(am); } } abstract class Mediator{ //注册房源 abstract void registerHouse(String msg); //用户买房 abstract void buyHouse(String name); } class HouseMediator extends Mediator{ Seller seller; Buyer buyer; public HouseMediator(Seller seller, Buyer buyer) { super(); this.seller = seller; this.buyer = buyer; } @Override void registerHouse(String msg) { System.out.println(msg); buyer.seeMsg(msg); } @Override void buyHouse(String name) { System.out.println(name+"相中了刘先生的房子,要买."); seller.inform(name); } } class Seller{ void sellHouse(HouseMediator mediator){ mediator.registerHouse("我要往外卖一座2室一厅的90平米的房子,联系人:刘德华"); } void inform(String name){ System.out.println("刘先生,"+name+"要买您的房子."); } } class Buyer{ void buyHouse(HouseMediator mediator) { mediator.buyHouse("小明"); } void seeMsg(String msg){ System.out.println("我看到了一则消息:"+msg); } }

中介者模式因为他会增加一个中介者对象,这个对象会帮助两个或者多个交互对象之间的复杂关系简化操作,这样避免了,可能会很混乱的操作,而这一切都被中介者给封装成了一个对一个的操作方式.

访问者模式

表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

package com.ruishenh.designPatter.action.visitor;
 
 
public class VisitorClient {
   static public void main(String[] args) {
      RobotStructure structure =new RobotStructure();
      structure.view(new PrintVisitor());
   }
}
//抽象访问者
abstract class Visitor {
   abstract void visit(Head element);
   abstract void visit(Arms element);
   abstract void visit(Body element);
   abstract void visit(Legs element);
}
//具体访问者
class PrintVisitor extends Visitor {
 
   @Override
   void visit(Head element) {
      System.out.println("我有一双"+element.getEyes());
   }
   @Override
   void visit(Arms element) {
      System.out.println("我有一双"+element.getHand());
   }
 
   @Override
   void visit(Body element) {
      System.out.println("我有一个"+element.getBelly());
   }
 
   @Override
   void visit(Legs element) {
      System.out.println("我有一双"+element.getFoot());
   }
}
abstract class Robot {
   abstract void accept(Visitor visitor);
}
class Head extends Robot {
   public Head(String eyes) {
      super();
      this.eyes = eyes;
   }
   String eyes;
   public String getEyes() {
      return eyes;
   }
   public void setEyes(String eyes) {
      this.eyes = eyes;
   }
   @Override
   void accept(Visitor visitor) {
      visitor.visit(this);
   }
}
class Arms extends Robot {
  
   public Arms(String hand) {
      super();
      this.hand = hand;
   }
   String hand;
   public String getHand() {
      return hand;
   }
   public void setHand(String hand) {
      this.hand = hand;
   }
   @Override
   void accept(Visitor visitor) {
      visitor.visit(this);
   }
}
class Body extends Robot {
  
   public Body(String belly) {
      super();
      this.belly = belly;
   }
   String belly;
   public String getBelly() {
      return belly;
   }
   public void setBelly(String belly) {
      this.belly = belly;
   }
   @Override
   void accept(Visitor visitor) {
      visitor.visit(this);
   }
}
class Legs extends Robot {
   public Legs(String foot) {
      super();
      this.foot = foot;
   }
   String foot;
   public String getFoot() {
      return foot;
   }
   public void setFoot(String foot) {
      this.foot = foot;
   }
   @Override
   void accept(Visitor visitor) {
      visitor.visit(this);
   }
}
//对象结构
class RobotStructure{
    private Head  head = new Head("明亮的双眼");
    private Arms  arms = new Arms("大大的双手");
    private Body  body   = new Body("圆圆的肚皮");
    private Legs  legs = new Legs("粗壮的双腿");
     void view(Visitor visitor) {
       head.accept(visitor);
       arms.accept(visitor);
       body.accept(visitor);
       legs.accept(visitor);
       System.out.p