工厂模式-参观者模式

参观者模式主要对一组固定结构的对象进行访问,一般和组合模式一起使用。

abstract class Hardware{
protected double price;
protected double getPrice();
void accept(IComputerVisitor visitor);

} 

class Mainboard extends Hardware{
void accept(IComputerVisitor visitor){
visitor.visitMainboard(this);
}
} 

class Memory extends Hardware{
void accept(IComputerVisitor visitor){
visitor.visitMemory(this);
} 

} 

class Display extends Hardware(
void accept(IComputerVisitor visitor){
visitor.visitDisplay(this);
} 

} 

class NetworkAdapter extends Hardware{
void accept(IComputerVisitor visitor){
visitor.visitNetworkAdapter(this);
} 

} 

class Computer extends Hardware[
private List<Hardware> parts = new Arraylist();
public List<Hardware> add(Hardware hardware){
parts.add(hardware);
return parts;
} 

public void accept(IComputerVisitor visitor){
for(Hardware h: parts){
h.accept(visitor); 


}
}
} 

interface IComputerVisitor{
void visitMainboard(Mainboard mainboard);
void visitNetworkAdapter(NetworkAdapter adapter);
void visitDisplay(Display display);
void visitMemory(Memory memory);

} 

//遍历computer的每个部件,汇总价格 

class PriceVisitor implements IComputerVisitor{ 

//总价格 

private double amountPrice; 

void visitMainboard(Mainboard mainboard){

amountPrice += mainboard.getPrice();
}
void visitNetworkAdapter(NetworkAdapter adapter) {

amountPrice += adapter.getPrice();
} 


void visitDisplay(Display display) {
amountPrice += display.getPrice();
} 


void visitMemory(Memory memory) {
amountPrice += memory.getPrice();
} 


} 

Client: 

Computer computer = new Computer();
Mainboard mainboard = new Mainboard();
NetworkAdapter networkAdapter = new NetworkAdapter();
Display display = new Display();
Memory memory = new Memory(); 



computer .add(mainboad)
.add(networkAdapter)
.add(display)
.add(memory);

IComputerVisitor visitor = new PriceVisitor();

visitor.accept(computer); 


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值