设计模式程序参考2
来源:互联网 发布:人人聚财网络贷款 编辑:程序博客网 时间:2024/05/07 17:21
参观者模式 观察者模式
Client:
Client:
参观者模式主要对一组固定结构的对象进行访问,一般和组合模式一起使用。
- abstract
class Hardware{ -
double price; -
double getPrice(); -
accept(IComputerVisitor visitor); - }
-
- class
Mainboard extendsHardware{ -
accept(IComputerVisitor visitor){ -
visitor.visitMainboard( -
} - }
-
- class
Memory extendsHardware{ -
accept(IComputerVisitor visitor){ -
visitor.visitMemory( -
} - }
-
- class
Display extendsHardware( -
accept(IComputerVisitor visitor){ -
visitor.visitDisplay( -
} - }
-
- class
NetworkAdapter extendsHardware{ -
accept(IComputerVisitor visitor){ -
visitor.visitNetworkAdapter( -
} - }
-
- class
Computer extendsHardware[ -
List<Hardware> newparts = Arraylist(); -
List<Hardware> add(Hardware hardware){ -
parts.add(hardware); -
parts; -
} -
void accept(IComputerVisitor visitor){ -
h: parts){ -
h.accept(visitor); -
} -
} - }
-
- interface
IComputerVisitor{ -
visitMainboard(Mainboard mainboard); -
visitNetworkAdapter(NetworkAdapter adapter); -
visitDisplay(Display display); -
visitMemory(Memory memory); - }
-
- //遍历
computer 的每个部件,汇总价格 - class
PriceVisitor implementsIComputerVisitor{ -
-
double amountPrice; -
visitMainboard(Mainboard mainboard){ -
amountPrice += mainboard.getPrice(); -
} -
visitNetworkAdapter(NetworkAdapter adapter) { -
amountPrice += adapter.getPrice(); -
} -
visitDisplay(Display display) { -
amountPrice += display.getPrice(); -
} -
visitMemory(Memory memory) { -
amountPrice += memory.getPrice(); -
} - }
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);
- //主题,这里是快餐店
- class
SnackShop{ -
List<Customer> newcustomers = Arraylist(); -
void add(Customer customer){ -
customers.add(customer); -
} -
-
void notify(){ -
c: customers){ -
c.getFood(); -
} -
} - }
-
- //订阅者,这里是客户
- class
Customer{ -
Customer (SnackShop shop){ -
-
shop.add( -
} -
-
void getFood(){ -
-
} - }
//主题,这里是快餐店class SnackShop{ private List<Customer> customers = new Arraylist(); public void add(Customer customer){ customers.add(customer); } //通知,对订阅主题的客户发布通知,比如“外卖已好” public void notify(){ for(Customer c: customers){ c.getFood(); } }}//订阅者,这里是客户class Customer{ Customer (SnackShop shop){ //将客户加入到快餐店列表 shop.add(this); } //回调函数,当接到通知后,客户的动作 public void getFood(){ //取得外卖 }}
Client:
- SnackShop
snackShop new= SnackShop(); - Customer
zhangSan new= Customer(snackShop); - snackShop.notify();
SnackShop snackShop = new SnackShop();Customer zhangSan = new Customer(snackShop);snackShop.notify();策略模式
- //密钥对生成接口
- interface
IKeyPairGenerable{ -
KeyPair create(); - }
-
- class
KeyPair{ - }
-
- class
DesKeyPairGenerator implementsIKeyPairGenerable{ - }
-
- class
IdeaKeyPairGenerator implementsIKeyPairGenerable{ - }
-
- class
RsaKeyPairGenerator implementsIKeyPairGenerable{ - }
-
- class
KeyPairManager{ -
IKeyPairGenerable generator; -
List newkeyPairList = Arraylist(); -
void setGenerator(IKeyPairGenerable generator){ -
= generator; -
} -
KeyPair create(){ -
KeyPair keyPair = -
!= generator){ -
keyPair = generator.create(); -
keyPairList.add(keyPair); -
} -
keyPair; -
} - }
//密钥对生成接口interface IKeyPairGenerable{ KeyPair create();}class KeyPair{}class DesKeyPairGenerator implements IKeyPairGenerable{}class IdeaKeyPairGenerator implements IKeyPairGenerable{}class RsaKeyPairGenerator implements IKeyPairGenerable{}class KeyPairManager{ private IKeyPairGenerable generator; private List keyPairList = new Arraylist(); public void setGenerator(IKeyPairGenerable generator){ this.generator = generator; } public KeyPair create(){ KeyPair keyPair = null; if(null != generator){ keyPair = generator.create(); keyPairList.add(keyPair); } return keyPair; }}
Client:
- IKeyPairGenerable
desGenerator new= DesKeyPairGenerator(); - IKeyPairGenerable
rsaGenerator new= RsaKeyPairGenerator(); - IKeyPairGenerable
ideaGenerator new= IdeaKeyPairGenerator(); -
- KeyPairManager
manager new= KeyPairManager(); -
- //使用
DES 算法生成密钥 - manager.setGenerator(desGenerator);
- KeyPair
keyPair = manager.create(); -
- //使用
RSA 算法生成密钥 - manager.setGenerator(rsaGenerator);
- KeyPair
keyPair = manager.create();
IKeyPairGenerable desGenerator = new DesKeyPairGenerator();IKeyPairGenerable rsaGenerator = new RsaKeyPairGenerator();IKeyPairGenerable ideaGenerator = new IdeaKeyPairGenerator();KeyPairManager manager = new KeyPairManager();//使用 DES 算法生成密钥manager.setGenerator(desGenerator);KeyPair keyPair = manager.create();//使用 RSA 算法生成密钥manager.setGenerator(rsaGenerator);KeyPair keyPair = manager.create();
可以看出,KeyPairManager 仅仅依赖于接口 IKeyPairGeneratble, 改变密钥对生成算法不改变KeyPairManager 类。
策略模式一般用来封装算法的不同实现。
- 设计模式程序参考2
- 设计模式程序参考
- 设计模式程序参考3
- 设计模式快速参考
- 设计模式参考书籍
- 在线设计模式参考
- js 设计模式 参考
- 设计模式参考书籍
- 模式设计参考
- visitor设计模式参考
- 设计模式参考
- MVC设计模式参考一
- php设计模式 参考地址
- 一个参考Junit的设计模式ppt
- 12种设计模式的快速参考
- /LGC设计模式/GUI 项目参考
- 23种设计模式的实现参考
- 12种设计模式的快速参考
- 图基本概念
- 二叉树
- Perl模式匹配
- 递归练习
- 设计模式程序参考
- 设计模式程序参考2
- 设计模式程序参考3
- 数据库 索引
- 存储过程 sql sever
- 触发器 sql
- linux面试(1)
- linux面试(2)
- linux常用命令
- 英语面试