背景
最近一直在深入剖析古铁的构造,甚至连骨头都不放过。谁叫古铁那么受欢迎呢?今天也不例外,来看看古铁的设计思想,就会明白古铁为什么这么强!在这里,我给大家灌输一波鸡汤,正所谓:成大事者不拘小节。成功的人应当把时间和精力花在对自己最重要的事情上,而不是为了一些鸡毛蒜皮的小事浪费时间。
古铁的主要工作是行动、攻击,维修这种非本职工作一般是外包给别人干的,只需要提供一个访问的接口,让别人来帮古铁维修,具体实现细节如下。
实现
机体抽象类
/**
* 机体抽象类
*/
public abstract class Robot {
private String name;
/**
* 攻击是机体自己做的事情
*/
abstract void attack();
/**
* 维修是别人帮忙做的事情
*
* @param visitor 交给维修人员(访问者)来做
*/
abstract void repair(IVisitor visitor);
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
古铁
/**
* 又是我们的古铁..
*/
public class AncientIron extends Robot {
@Override
void attack() {
System.out.println("自己操纵古铁还是非常有乐趣的,左轮打桩机!");
}
@Override
void repair(IVisitor visitor) {
visitor.visit(this);
}
}
访问者接口
public interface IVisitor {
/**
* 访问机体的功能
*/
void visit(Robot robot);
}
维修人员
public class RobotRepairer implements IVisitor {
@Override
public void visit(Robot robot) {
System.out.println(robot.getName() + ",你好!所谓成大事者不拘小节,维修这种事情还是让我们修理工做吧!");
}
}
测试
public class Test {
public static void main(String[] args) {
IVisitor repairer = new RobotRepairer();
Robot ancientIron = new AncientIron();
ancientIron.setName("古铁");
ancientIron.attack();
ancientIron.repair(repairer);
}
}
测试结果
自己操纵古铁还是非常有乐趣的,左轮打桩机!
古铁,你好!所谓成大事者不拘小节,维修这种事情还是让我们修理工做吧!
总结
访问者模式有很明显的优点,就是遵循了单一职责原则,假设一个类里面有一些非本职工作的方法,那么可以考虑把这些方法交给访问者去实现。那么,以后如果实现的逻辑有变化,只需要改变访问者,而无需对这个类做太大的改变。