当前位置: 首页 > wzjs >正文

网站改版中销售网站开发的背景

网站改版中,销售网站开发的背景,如何创建一个网站的步骤,中国建设银行金华分行网站一、模式定义 访问者模式(Visitor Pattern) 是一种行为设计模式,允许在不修改对象结构的前提下,为对象结构中的元素定义新的操作。核心思想是 算法与对象结构分离,实现 双重分派(Double Dispatch&#xff…

一、模式定义

访问者模式(Visitor Pattern) 是一种行为设计模式,允许在不修改对象结构的前提下,为对象结构中的元素定义新的操作。核心思想是 算法与对象结构分离,实现 双重分派(Double Dispatch) 机制。

二、核心组件

组件作用
Visitor声明访问具体元素的visit方法
ConcreteVisitor实现具体的访问逻辑
Element定义accept方法接受访问者
ConcreteElement具体元素,实现accept方法
ObjectStructure包含元素的集合,提供遍历接口

三、模式优势

开闭原则:新增访问逻辑无需修改元素类
聚合操作:相关操作集中到同一访问者
复杂操作解耦:分离核心业务与辅助功能
跨类层级操作:处理不同类型对象的统一接口

四、真实场景案例:电商平台商品分析系统

场景需求
商品类型包含:图书、电子产品、服装
需要实现:
价格计算(含折扣策略)
库存预警检查
商品信息导出(XML/JSON)
未来可能新增商品类型和分析功能

五、Java实现代码

1. 元素接口与实现

// 商品元素接口
public interface ProductElement {void accept(ProductVisitor visitor);
}// 具体商品类
class Book implements ProductElement {private String title;private double price;private int stock;private double discount; // 专属折扣public Book(String title, double price, int stock, double discount) {this.title = title;this.price = price;this.stock = stock;this.discount = discount;}@Overridepublic void accept(ProductVisitor visitor) {visitor.visit(this);}// Getters...
}class Electronics implements ProductElement {private String model;private double price;private int stock;private String warranty; // 保修期public Electronics(String model, double price, int stock, String warranty) {this.model = model;this.price = price;this.stock = stock;this.warranty = warranty;}@Overridepublic void accept(ProductVisitor visitor) {visitor.visit(this);}// Getters...
}class Apparel implements ProductElement {private String style;private double price;private int stock;private String sizeChart; // 尺码表public Apparel(String style, double price, int stock, String sizeChart) {this.style = style;this.price = price;this.stock = stock;this.sizeChart = sizeChart;}@Overridepublic void accept(ProductVisitor visitor) {visitor.visit(this);}// Getters...
}

2. 访问者接口与实现

// 访问者接口
public interface ProductVisitor {void visit(Book book);void visit(Electronics electronics);void visit(Apparel apparel);
}// 价格计算访问者
class PriceCalculator implements ProductVisitor {private double total = 0;@Overridepublic void visit(Book book) {total += book.getPrice() * book.getDiscount();}@Overridepublic void visit(Electronics electronics) {// 电子产品无折扣total += electronics.getPrice();}@Overridepublic void visit(Apparel apparel) {// 服装类满200减50double price = apparel.getPrice();total += price >= 200 ? price - 50 : price;}public double getTotal() {return total;}
}// 库存检查访问者
class StockChecker implements ProductVisitor {private List<String> warnings = new ArrayList<>();@Overridepublic void visit(Book book) {if (book.getStock() < 10) {warnings.add("图书缺货: " + book.getTitle());}}@Overridepublic void visit(Electronics electronics) {if (electronics.getStock() < 5) {warnings.add("电子产品缺货: " + electronics.getModel());}}@Overridepublic void visit(Apparel apparel) {if (apparel.getStock() < 20) {warnings.add("服装缺货: " + apparel.getStyle());}}public void printWarnings() {warnings.forEach(System.out::println);}
}// 数据导出访问者(JSON格式)
class JsonExporter implements ProductVisitor {private StringBuilder json = new StringBuilder("[\n");@Overridepublic void visit(Book book) {json.append(String.format("""{"type": "Book","title": "%s","price": %.2f,"stock": %d},""", book.getTitle(), book.getPrice(), book.getStock()));}@Overridepublic void visit(Electronics electronics) {json.append(String.format("""{"type": "Electronics","model": "%s","warranty": "%s","price": %.2f},""", electronics.getModel(), electronics.getWarranty(), electronics.getPrice()));}@Overridepublic void visit(Apparel apparel) {json.append(String.format("""{"type": "Apparel","style": "%s","sizes": "%s","price": %.2f},""", apparel.getStyle(), apparel.getSizeChart(), apparel.getPrice()));}public String getJson() {// 去除最后一个逗号if (json.charAt(json.length()-1) == ',') {json.deleteCharAt(json.length()-1);}return json.append("\n]").toString();}
}

3. 对象结构管理

public class ProductInventory {private List<ProductElement> products = new ArrayList<>();public void addProduct(ProductElement product) {products.add(product);}public void applyVisitor(ProductVisitor visitor) {products.forEach(p -> p.accept(visitor));}
}

4. 客户端使用

public class ECommerceSystem {public static void main(String[] args) {// 初始化商品库ProductInventory inventory = new ProductInventory();inventory.addProduct(new Book("设计模式", 89.99, 8, 0.8));inventory.addProduct(new Electronics("智能手机", 2999.0, 4, "2年保修"));inventory.addProduct(new Apparel("男士衬衫", 199.0, 25, "S/M/L/XL"));// 执行价格计算PriceCalculator priceCalc = new PriceCalculator();inventory.applyVisitor(priceCalc);System.out.printf("总金额: ¥%.2f%n", priceCalc.getTotal());// 执行库存检查StockChecker stockCheck = new StockChecker();inventory.applyVisitor(stockCheck);System.out.println("\n库存预警:");stockCheck.printWarnings();// 执行数据导出JsonExporter exporter = new JsonExporter();inventory.applyVisitor(exporter);System.out.println("\n商品JSON:");System.out.println(exporter.getJson());}
}

六、运行结果

总金额: ¥2979.19库存预警:
图书缺货: 设计模式
电子产品缺货: 智能手机商品JSON:
[{"type": "Book","title": "设计模式","price": 89.99,"stock": 8},{"type": "Electronics","model": "智能手机","warranty": "2年保修","price": 2999.00},{"type": "Apparel","style": "男士衬衫","sizes": "S/M/L/XL","price": 199.00}
]

七、模式变体与优化

1. 动态访问者

// 使用反射处理未知类型
public class UniversalVisitor implements ProductVisitor {@Overridepublic void visit(Object element) {try {Method visitMethod = this.getClass().getMethod("visit", element.getClass());visitMethod.invoke(this, element);} catch (Exception e) {// 默认处理}}
}

2. 组合访问者

// 组合多个访问者操作
public class BatchVisitor implements ProductVisitor {private List<ProductVisitor> visitors = new ArrayList<>();public BatchVisitor add(ProductVisitor visitor) {visitors.add(visitor);return this;}@Overridepublic void visit(Book book) {visitors.forEach(v -> v.visit(book));}// 其他visit方法同理...
}

八、行业应用场景

场景具体应用优势体现
编译器构建语法树分析(类型检查/代码生成)分离语法结构与分析逻辑
文档处理XML/JSON节点处理支持多种格式转换
UI框架GUI组件树遍历(渲染/布局)统一处理不同组件类型
医疗系统检查报告分析(不同科室视角)扩展新分析维度不影响核心数据
游戏引擎场景图遍历(碰撞检测/渲染)优化性能关键路径

九、最佳实践建议

访问者生命周期管理

// 使用工厂模式创建访问者
public class VisitorFactory {public static ProductVisitor createPriceCalculator() {return new PriceCalculator();}public static ProductVisitor createStockChecker() {return new StockChecker();}
}

状态管理策略

// 上下文传递参数
public interface ContextAwareVisitor extends ProductVisitor {void setContext(AnalysisContext context);
}class PriceCalculator implements ContextAwareVisitor {private AnalysisContext context;@Overridepublic void setContext(AnalysisContext context) {this.context = context;}
}

性能优化

// 缓存访问结果
public class CachedVisitor implements ProductVisitor {private Map<ProductElement, Object> cache = new WeakHashMap<>();@Overridepublic void visit(Book book) {if (!cache.containsKey(book)) {// 执行计算并缓存结果}}
}

十、与相似模式对比

模式核心差异适用场景
访问者集中处理异构对象操作需要为对象结构添加多种新功能
迭代器专注集合遍历需要统一遍历接口
装饰器动态添加对象功能需要透明扩展对象功能
策略封装可互换算法需要动态切换单一算法

通过这个电商商品分析案例,可以看到访问者模式如何 有效管理对复杂对象结构的多种操作。该模式特别适合以下场景:
需要对复杂对象结构(如组合结构)进行多种不相关操作
操作需要访问不同类型对象的私有状态
操作可能频繁变化,而对象结构相对稳定
实际使用时需权衡访问者模式的灵活性带来的复杂性,建议在操作类型明显多于元素类型时采用本模式。

一句话总结

访问者模式是在不修改被访问者类代码的前提下,通过访问者动态地为被访问者添加新的操作或功能。(多个对象)


文章转载自:

http://rnZtMkTN.gwbfx.cn
http://SjfogyoD.gwbfx.cn
http://Ews7cnT0.gwbfx.cn
http://5Bh8LTv2.gwbfx.cn
http://4RrB5Gap.gwbfx.cn
http://u4RobEYu.gwbfx.cn
http://G2Kh7ely.gwbfx.cn
http://HJKPy3xz.gwbfx.cn
http://8WwzaqfQ.gwbfx.cn
http://ok92NbRN.gwbfx.cn
http://N1hfGV8a.gwbfx.cn
http://E1bhTvog.gwbfx.cn
http://wwVeUXCS.gwbfx.cn
http://zn5nDI7b.gwbfx.cn
http://JIiC1Aqr.gwbfx.cn
http://L1QZjHuo.gwbfx.cn
http://LFIWXV9z.gwbfx.cn
http://9QVtm8jC.gwbfx.cn
http://bMicNpw0.gwbfx.cn
http://9YUqJ7GM.gwbfx.cn
http://cec9oboU.gwbfx.cn
http://cn8UBEKe.gwbfx.cn
http://T23yXc6h.gwbfx.cn
http://XbAeDviY.gwbfx.cn
http://xB2oT3J9.gwbfx.cn
http://qntPSOxi.gwbfx.cn
http://WB0DBBAd.gwbfx.cn
http://irl2yY2i.gwbfx.cn
http://YYozrVKo.gwbfx.cn
http://7t11CKX8.gwbfx.cn
http://www.dtcms.com/wzjs/771136.html

相关文章:

  • 天津大型网站设计公司重庆平台网站建设
  • 网站根目录是什么浙江大境软装设计公司
  • 丢了么网站专业网站设计师去哪找
  • 河南省建设协会网站网站建设ps模板下载
  • 网站 用户体验的重要性城乡建设部网站首页甲级
  • 企业建设网站的目的手机上自己设计房子软件
  • 永嘉高端网站建设效果要建设一个网站需要什么手续费
  • 做门户网站代码质量方面具体需要注意什么网站设计需要哪些技能
  • 用小米路由器做网站wordpress页面是什么意思
  • 深圳哪家做网站好wordpress自建电商网站
  • 做视频网站可以自学吗项目外包和人力外包的区别
  • 做服务器的网站都有哪些分类网站营销
  • 网站规划与设计大作业四平网络推广公司
  • 网站建设 蜀美网络h5网站实例
  • 番禺网站开发服务台州网站建设技术外包
  • 青海互动网站建设温州网站建设技术托管
  • wordpress中英文站点设计作品集模板
  • 建设网站找谁公司信息查询网
  • 海南网站推广抖音小程序怎么挂到抖音上
  • wordpress开启多站点功网站为什么被挂马
  • 做网站都要学什么编程网站scratch网址
  • 网站建设计划图公司网络组建设计与方案
  • 昆明电商网站建设网站的交流的功能怎么做
  • 用阿里云建站wordpressWordPress 长文 阅读
  • 做网站拿来卖中国购物网站排行榜
  • 社交网站实名备案wordpress获取主页路径
  • 浙江电信关于网站备案信息核实的公告永州网站制作
  • php自建网站天机seo
  • SEO网站建设全方位部署seo项目培训
  • 淘宝客做网站可行么响应式网站源码.net