中介者模式因为他会增加一个中介者对象,这个对象会帮助两个或者多个交互对象之间的复杂关系简化操作,这样避免了,可能会很混乱的操作,而这一切都被中介者给封装成了一个对一个的操作方式.
访问者模式
表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。
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