image.png
在电商平台中,需要对商品进行多种操作,例如计算总价、库存盘点、生成报表等。这些操作可能会随着业务的发展而增加,但商品本身不应对这些操作负责。
2. 为什么要使用访问者设计模式
访问者模式允许将数据结构(商品)与在其上执行的操作(访问者)分离,使得增加新的操作变得容易,而不需要修改现有的数据结构。
3. 标准访问者设计模式图
image.png
4. 业务访问者设计模式图
image.png
5. 业务代码参考
// 商品接口
interface Product {
void accept(ProductVisitor visitor);
}
// 电子产品类
class Electronics implements Product {
private String name;
private double price;
private int stock;
// 构造函数、getter 和 setter
@Override
public void accept(ProductVisitor visitor) {
visitor.visit(this);
}
public void specificElectronicsOperation() {
// 电子产品特定操作
}
}
// 服装类
class Clothing implements Product {
private String name;
private double price;
private int stock;
// 构造函数、getter 和 setter
@Override
public void accept(ProductVisitor visitor) {
visitor.visit(this);
}
public void specificClothingOperation() {
// 服装特定操作
}
}
// 商品访问者接口
interface ProductVisitor {
void visit(Electronics electronics);
void visit(Clothing clothing);
}
// 价格计算访问者
class PriceCalculator implements ProductVisitor {
@Override
public void visit(Electronics electronics) {
// 计算电子产品价格
System.out.println("电子产品价格: " + electronics.price);
}
@Override
public void visit(Clothing clothing) {
// 计算服装价格
System.out.println("服装价格: " + clothing.price);
}
}
// 库存检查访问者
class InventoryChecker implements ProductVisitor {
@Override
public void visit(Electronics electronics) {
// 检查电子产品库存
System.out.println("电子产品库存: " + electronics.stock);
}
@Override
public void visit(Clothing clothing) {
// 检查服装库存
System.out.println("服装库存: " + clothing.stock);
}
}
// 客户端使用
class ECommercePlatform {
public static void main(String[] args) {
List<Product> products = new ArrayList<>();
products.add(new Electronics("手机", 2999.00, 50));
products.add(new Clothing("T恤", 99.00, 100));
ProductVisitor priceCalculator = new PriceCalculator();
ProductVisitor inventoryChecker = new InventoryChecker();
for (Product product : products) {
product.accept(priceCalculator);
product.accept(inventoryChecker);
}
}
}
6. 使用访问者设计模式的好处
- 分离数据结构与操作:商品类不需要知道具体操作的细节。
- 扩展性:新增操作时,只需新增访问者类,不需要修改商品类。
7. 其他使用访问者设计模式场景参考
- 代码编辑器:对不同类型的代码元素执行不同的操作。
- 报表生成:对数据集合中的不同数据项执行汇总和统计。
8. 可参考开源框架
- ANTLR:一个强大的解析器生成器,使用访问者模式来处理不同的语法结构。
总结
访问者模式提供了一种将数据结构与操作分离的方法,使得对数据结构的操作更加灵活和易于扩展。
历史热点文章
- 外观模式(Facade Pattern):微服务架构中的数据库访问实战案例分析
- 代理模式(Proxy Pattern):权限校验API调用实战案例分析
- 桥接模式(Bridge Pattern):多样式用户界面组件实战案例分析
- 组合模式(Composite Pattern): 在线教育平台课程管理实战案例分析
- 享元模式(Flyweight Pattern):网页游戏中的角色对象管理实战案例分析
- 观察者模式(Observer Pattern):股票交易系统实战案例分析
- 策略模式(Strategy Pattern):电商平台的优惠券系统实战案例分析
- 模板方法模式(Template Method Pattern):视频播放应用实战案例分析
- 命令模式(Command Pattern):网络爬虫任务队列实战案例分析
- 迭代器模式(Iterator Pattern):电商平台商品分类浏览实战案例分析
- 中介者模式(Mediator Pattern):即时通讯软件实战案例分析
- 备忘录模式(Memento Pattern):游戏存档系统实战案例分析
- 状态模式(State Pattern):电商平台订单状态管理实战案例分析
- 责任链模式(Chain of Responsibility Pattern):电商平台的订单审批流程实战案例分析
- 访问者模式(Visitor Pattern):电商平台商品访问统计实战案例分析
- 工厂方法模式(Factory Method Pattern): 电商多种支付实战案例分析
- 抽象工厂模式(Abstract Factory Pattern):多风格桌面应用实战案例分析
- 建造者模式(Builder Pattern): 在线订单系统实战案例分析
- 原型模式(Prototype Pattern): 云服务环境配置实战案例分析
- 适配器模式(Adapter Pattern):第三方支付集成实战案例分析
- 装饰器模式(Decorator Pattern):电商平台商品价格策略实战案例分析
- 单例模式(Singleton Pattern):购物车实战案例分析