设计模式系列 - 访问者模式
程序员文章站
2022-05-04 13:44:50
访问者模式通过使用一个访问者类,是主业务改变执行算法 介绍 访问者模式属于行为型模式,通过依据不同的访问者来动态调整访问方式,将数据结构和数据操作进行分离,符合单一职责原则,扩展性较好。 类图描述 代码实现 1、定义组件接口 2、定义访问者 C public class Keyboard : ICo ......
访问者模式通过使用一个访问者类,是主业务改变执行算法
介绍
访问者模式属于行为型模式,通过依据不同的访问者来动态调整访问方式,将数据结构和数据操作进行分离,符合单一职责原则,扩展性较好。
类图描述
代码实现
1、定义组件接口
public interface icomputerpart { void accept(computerpartvisitor computerpartvisitor); }
2、定义访问者
public class keyboard : icomputerpart { public void accept(computerpartvisitor computerpartvisitor) { computerpartvisitor.visit(this); } } public class monitor : icomputerpart { public void accept(computerpartvisitor computerpartvisitor) { computerpartvisitor.visit(this); } } public class mouse : icomputerpart { public void accept(computerpartvisitor computerpartvisitor) { computerpartvisitor.visit(this); } } public class computer : icomputerpart { readonly icomputerpart[] parts; public computer() => parts = new icomputerpart[] { new mouse(), new keyboard(), new monitor() }; public void accept(computerpartvisitor computerpartvisitor) { for (int i = 0; i < parts.length; i++) { parts[i].accept(computerpartvisitor); } computerpartvisitor.visit(this); } }
3、定义抽象访问者
public abstract class computerpartvisitor { public abstract void visit(computer computer); public abstract void visit(mouse mouse); public abstract void visit(keyboard keyboard); public abstract void visit(monitor monitor); }
4、实现访问者
public class computerpartdisplayvisitor : computerpartvisitor { public override void visit(computer computer) { console.writeline("displaying computer"); } public override void visit(mouse mouse) { console.writeline("displaying mouse"); } public override void visit(keyboard keyboard) { console.writeline("displaying keyboard"); } public override void visit(monitor monitor) { console.writeline("displaying monitor"); } }
5、上层调用
class program { static void main(string[] args) { icomputerpart computer = new computer(); computer.accept(new computerpartdisplayvisitor()); console.readkey(); } }
总结
访问者模式对访问功能进行统一管理,通过再被访问者的类中加几个对外提供接待访问者的接口,从而改变具体访问者的执行方式。
上一篇: Python-调用系统指令小记
下一篇: struct的匿名用法详解