访问者模式

1. 访问者模式

访问者模式表示一个作用于某对象结构中的各元素的操作. 它使开发者可以在不改变各元素的类的前提下定义作用于这些元素的新操作

2. 超市中购物的列子


public interface Goods{
double computer(Visitor visitor);
}

public class Wine implements Goods{
public double accountByBottle(){
return getCount()*getPrice();
}
public double computer(Visitor visitor){
return visitor.computerMoney(this);
}
............
}

public class Television implements Goods{
public double accountByNumber(){
return getCount()*getNumber();
}
public double computer(Visitor visitor){
return visitor.computerMoney(this);
}
............
}

3. 设计一个抽象的访问者类


public interface Visitor {
double computerMoney(Wine wine);
double computerMoney(Television television);
}




4. 设计一个具体的访问者类


public class VisitorImpl implements Vistor {
public double computerMoney(Wine wine){
return wine.accountByBottle();
}
public double computerMoney(Television television){
return televison.accountByNumber();
}
}



5. 购物车类


public class ShoppingCart{
public void add(Object object){
list.add(Object);
}
public void remove(Object object){
list.remove(Object);
}

public List getList(){
return list;
}

private List list = new ArrayList();

}


6. 计价器类


public class AccountMachine {
private double total;
public void account(List list){
Visitor visitor = new VisitorImple();
for (int i = 0; i < list.size(); i++){
total+=(Goods)list.get(i).computer(visitor);
}
public double getTotal(){
return total;
}
}
}


客户端调用代码


Wine wine = new Wine();
wine.setCount(10);
wine.setPrice(20f);
Television television = new Television();
television.setCount(12);
television.setPrice(1000f);

ShoppingCart shoppingCart = new ShoppingCart();
shoppingCart.add(wine);
shoppingCart.add(television);

AccountMachien accountMachine = new AccountMachine();
accountMachine.account(shoppingCart.getList());
account.getTotal();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值