admin管理员组

文章数量:1031964

访问者模式Visitor Pattern

1.访问者模式定义

访问者模式是一种行为型设计模式,它可以让我们在不改变被访问者类的前提下定义一个新的操作。

它的主要目的是将操作从被访问者类中解耦出来,从而使被访问者和访问者之间的耦合度降低。

2.访问者模式优点

1)可以让我们实现可重用的访问者,

2)可以让被访问者维护所有的访问者的状态,

3)可以让我们实现面向对象的扩展性和可维护性

4)它可以让我们实现简单的代码复用,

5)可以让我们对不同的类型的访问者进行添加和删除,

6)可以让我们对多个访问者进行灵活的控制。

3.访问者模式缺点

1) 可能会导致系统变得非常复杂

2) 可能会增加系统的开发时间

3) 可能会导致系统性能的下降。

4.访问者模式示例代码

传统设计模式讲解时使用的示例代码,大都采用与读者日常生活接解的业务系统没有多大关联关系。以致大部分读者无法做到学以致用,学完就忘记。本文采用使用日常生活中随处可见的支付业务来编写实现代码:

//定义抽象访问者类

public interface PaymentVisitor {

void visit(Payment payment);

}

//定义具体访问者类

public class AlipayVisitor implements PaymentVisitor {

@Override

public void visit(Payment payment) {

//支付宝支付访问者

System.out.println("支付宝支付:" + payment.getAmount());

}

}

//定义另一个具体访问者类

public class WechatVisitor implements PaymentVisitor {

@Override

public void visit(Payment payment) {

//微信支付访问者

System.out.println("微信支付:" + payment.getAmount());

}

}

//定义被访问者类

public class Payment {

private int amount;

public Payment(int amount) {

this.amount = amount;

}

public int getAmount() {

return amount;

}

//接受访问者的访问

public void accept(PaymentVisitor visitor) {

visitor.visit(this); }

}

//定义对象结构类

public class PaymentObjectStructure {

private List<Payment> payments = new ArrayList<>();

//添加

payment public void add(Payment payment) {

payments.add(payment);

}

//移除

payment public void remove(Payment payment) {

payments.remove(payment);

}

//接受访问者

public void accept(PaymentVisitor visitor) {

for (Payment payment : payments) {

payment.accept(visitor);

}

}

}

//客户端使用

public class Client {

public static void main(String[] args) {

Payment payment1 = new Payment(100);

Payment payment2 = new Payment(200);

Payment payment3 = new Payment(300);

PaymentObjectStructure paymentObjectStructure = new PaymentObjectStructure();

paymentObjectStructure.add(payment1);

paymentObjectStructure.add(payment2);

paymentObjectStructure.add(payment3);

PaymentVisitor alipayVisitor = new AlipayVisitor();

PaymentVisitor wechatVisitor = new WechatVisitor();

paymentObjectStructure.accept(alipayVisitor);

paymentObjectStructure.accept(wechatVisitor);

}

}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2023-03-03,如有侵权请联系 cloudcommunity@tencent 删除paymentpublic设计模式微信支付系统

访问者模式Visitor Pattern

1.访问者模式定义

访问者模式是一种行为型设计模式,它可以让我们在不改变被访问者类的前提下定义一个新的操作。

它的主要目的是将操作从被访问者类中解耦出来,从而使被访问者和访问者之间的耦合度降低。

2.访问者模式优点

1)可以让我们实现可重用的访问者,

2)可以让被访问者维护所有的访问者的状态,

3)可以让我们实现面向对象的扩展性和可维护性

4)它可以让我们实现简单的代码复用,

5)可以让我们对不同的类型的访问者进行添加和删除,

6)可以让我们对多个访问者进行灵活的控制。

3.访问者模式缺点

1) 可能会导致系统变得非常复杂

2) 可能会增加系统的开发时间

3) 可能会导致系统性能的下降。

4.访问者模式示例代码

传统设计模式讲解时使用的示例代码,大都采用与读者日常生活接解的业务系统没有多大关联关系。以致大部分读者无法做到学以致用,学完就忘记。本文采用使用日常生活中随处可见的支付业务来编写实现代码:

//定义抽象访问者类

public interface PaymentVisitor {

void visit(Payment payment);

}

//定义具体访问者类

public class AlipayVisitor implements PaymentVisitor {

@Override

public void visit(Payment payment) {

//支付宝支付访问者

System.out.println("支付宝支付:" + payment.getAmount());

}

}

//定义另一个具体访问者类

public class WechatVisitor implements PaymentVisitor {

@Override

public void visit(Payment payment) {

//微信支付访问者

System.out.println("微信支付:" + payment.getAmount());

}

}

//定义被访问者类

public class Payment {

private int amount;

public Payment(int amount) {

this.amount = amount;

}

public int getAmount() {

return amount;

}

//接受访问者的访问

public void accept(PaymentVisitor visitor) {

visitor.visit(this); }

}

//定义对象结构类

public class PaymentObjectStructure {

private List<Payment> payments = new ArrayList<>();

//添加

payment public void add(Payment payment) {

payments.add(payment);

}

//移除

payment public void remove(Payment payment) {

payments.remove(payment);

}

//接受访问者

public void accept(PaymentVisitor visitor) {

for (Payment payment : payments) {

payment.accept(visitor);

}

}

}

//客户端使用

public class Client {

public static void main(String[] args) {

Payment payment1 = new Payment(100);

Payment payment2 = new Payment(200);

Payment payment3 = new Payment(300);

PaymentObjectStructure paymentObjectStructure = new PaymentObjectStructure();

paymentObjectStructure.add(payment1);

paymentObjectStructure.add(payment2);

paymentObjectStructure.add(payment3);

PaymentVisitor alipayVisitor = new AlipayVisitor();

PaymentVisitor wechatVisitor = new WechatVisitor();

paymentObjectStructure.accept(alipayVisitor);

paymentObjectStructure.accept(wechatVisitor);

}

}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2023-03-03,如有侵权请联系 cloudcommunity@tencent 删除paymentpublic设计模式微信支付系统

本文标签: 访问者模式Visitor Pattern