知识卡片
把方法调用封装成头等对象消除访问者模式的类爆炸
内容
如果把一次特性调用(对象、方法名、参数)本身封装进一个可传递、可存储、可延迟触发的独立对象——即把方法调用变成头等对象——那么给已有类型新增操作就不再需要为每个操作造一整套访问者类,只需把这个操作包成一个这样的封装对象,注册进一个通用的访问工具类即可。这本质是把函数式编程里操作是一等公民的思想搬进面向对象框架,用一个通用封装机制取代了访问者模式里成堆的、只服务单一操作的具体子类。
参考来源
- 位置:《架构之美》第13章《软件架构:面向对象与面向函数》13.6.3节《基于代理的程序库使访问者模式变成多余的》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0273.xhtml)
- 结论依据:原文明确"对于用访问者模式笨拙地解决的问题,代理机制提供了更好的解决方法……它不会产生访问者类的大爆炸,只需要一个VISITOR程序库类,学习register和visit两个特性的基本用法即可"。
- 原始内容:对于用访问者模式笨拙地解决的问题,代理机制提供了更好的解决方法:向现有的类型添加操作,并且不改变其支持的类……它可以复用需要的类,并接受其子孙类:它不会产生访问者类的大爆炸,只需要一个VISITOR程序库类,学习register和visit两个特性的基本用法即可。