【每日一记】设计模式——访问者模式
来源:互联网 发布:小甲鱼c语言视频怎么样 编辑:程序博客网 时间:2024/06/05 20:22
概述
- 定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作
- 适用场景:
- 对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作
- 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类
实现
// 商品接口public interface Goods { int accept(Visitor visitor);}class Basketball implements Goods { private int price; public Basketball(int price) { this.price = price; } public int getPrice() { return price; } @Override public int accept(Visitor visitor) { return visitor.visit(this); }}class Fruit implements Goods { private int price; public Fruit(int price) { this.price = price; } public int getPrice() { return price; } @Override public int accept(Visitor visitor) { return visitor.visit(this); }}
// 访问者接口public interface Visitor { int visit(Basketball basketball); int visit(Fruit fruit);}class VisitorImpl implements Visitor { @Override public int visit(Basketball basketball) { System.out.println(basketball + " , " + basketball.getPrice()); return basketball.getPrice(); } @Override public int visit(Fruit fruit) { System.out.println(fruit + " , " + fruit.getPrice()); return fruit.getPrice(); }}
// 客户端public class Client { public static void main(String[] args) throws Exception { Goods[] gs = new Goods[] { new Basketball(3), new Basketball(6), new Fruit(2) }; Visitor v = new VisitorImpl(); int sum = 0; // 计算商品总价格 for(Goods g : gs) { sum += g.accept(v); } System.out.println("total: " + sum); }}
访问者模式将元素类中与元素类本身关系不大且易变的操作移到访问者类中,使得元素类的职责更单一,同时若想改变操作逻辑,只需要改变访问者即可
0 0
- 【每日一记】设计模式——访问者模式
- 【每日一记】设计模式——单例模式
- 【每日一记】设计模式——工厂模式
- 【每日一记】设计模式——建造者模式
- 【每日一记】设计模式——原型模式
- 【每日一记】设计模式——适配器模式
- 【每日一记】设计模式——装饰器模式
- 【每日一记】设计模式——代理模式
- 【每日一记】设计模式——外观模式
- 【每日一记】设计模式——桥接模式
- 【每日一记】设计模式——组合模式
- 【每日一记】设计模式——享元模式
- 【每日一记】设计模式——策略模式
- 【每日一记】设计模式——模板方法模式
- 【每日一记】设计模式——观察者模式
- 【每日一记】设计模式——迭代器模式
- 【每日一记】设计模式——责任链模式
- 【每日一记】设计模式——命令模式
- Spring常用注解
- HDU 1025 Constructing Roads In JGShining's Kingdom(最长上升子序列的长度)
- 使用SQL Developer 报错:Unable to find a Java Virtual Machine
- gmake缺失错误
- Qt quick qml设置ios窗口满屏和设置状态栏颜色
- 【每日一记】设计模式——访问者模式
- 分析system_call中断处理过程
- ext2文件系统初步
- sql创建自动备份数据库
- Visual Studio Code安装和配置
- UE4官方文档链接记录
- Android 低功耗蓝牙(BLE)开发(3)-- BluetoothDevice详解
- 6. ZigZag Conversion*
- MyBatis(5):MyBatis 集成 Spring 事务管理(上)