设计模式5

[size=large]
  命令模式
  命令模式是对命令的封装,命令模式把发出命令的责任和执行命令的责任分隔开、委派给不同的对象。
  命令模式允许请求的一方和接收的一方独立开来、使得请求的一方无需接收请求的一方的接口。
  每一个命令都是一个操作、命令类中通常只会有一个方法,请求的一方发出请求要求执行一个操作、接收的一方收到请求并执行操作;两者分开互不影响。
  //先定义一个类、类中有两个方法。这个类负责接收命令的请求。
  Public class Receiver{
  Public void startup(){
  //启动
  }
  Public void close(){
  //关闭
  }
  
  }
  再定义一个命令接口:
  Public interface Command{
  Public void actionPerformed();
  }
  然后实现此接口
  Public class StartupCommand implements Commend{
  Receiver rece;
  Public StartupCommand(Receiver rece){
  This.rece= rece;
  }
  Public void actionPerformed(){
  Rece.startup();
  }
  }
  startupCommand调用了Receiver类中的startup方法、把具体的请求交给了Receiver类中的startup方法处理
  ShutdownCommand类也同样实现了Command接口、代表一个具体的关闭请求。
  Public class ShutDownCommand implements Command{
  Receiver rece;
  Public shutdownCommand(Receiver rece){
  This.rece = rece;
  }
  Public void actionPerformend(){
  Rece.close();
  }
  }
  最后客户端调用代码:
  Public class Client{
  Public void test(){
  Receiver rece = new Receiver();
  Command cmd = new StartupCommand(rece);
  Cmd.actionPerformed();
  }
  
  }
  
  观察者模式
  我们在生活中会发生这样的情况、当商品信息发生变化时,需要通知每一个客户;而这种通知是自动发生的、就好像客户始终在监听产品一样,这就需要在产品中添加观察者这样的角色;以便客户端的产品发生变化、观察者能自动观察到这种变化;并能及时的进行update和notify动作,这就是观察者模式
  Java的API中提供了两个类,Observable 提供公开的方法支持观察者对象;另一是Observer
  被观察者类product、里面定义两个属性;
  Public class product extends Observable{
  String name;
  String price;
  Public String getName(){
  Return name;
  }
  Public void setName(String name){
  This.name= name;
  this.setChanged();
  //通知观察者对象
  this.notifyObservers();
  
  }
  Public String getPrice(){
  Return price;
  }
  Public void setPrice(String price){
  This.price = price;
  this.setChanged();
  //通知观察者
  this.notifyObservers(price);
  }
  
  }
在product类中、当发生对name属性和price属性的改变时、使用了Observable中的方法setChanger()、用来在被观察者内部设置一个修饰标记;使用notifyObservers()方法向观察者通知这一变化。
接着、我们定义两个观察者类,分别为productNameObserver和ProductPriceObserver;这两个类都实现了Observer接口。这个接口中只定义了一个update()方法、当被观察者对象的对象发生变化时,被观察者对象的notifyObservers()方法会自动调用这一方法。
  Public class productNameObserver implements Observer{
  Public void update(Observer obsv,Object obj){
  //修改产品
  }
  }
  Public class productpriceObserver implements Observer{
  Public void update(Observer obsv,Object obj){
  //修改价格
  }
  }
  最后调用:
  Public class Client{
  Public void test(){
  Product product =new Product();
  product.addObserver(new ProductNameObserver());
  product.addObserver(new ProductprictObserver());
  product.setName(“名字要发生改变”);
  product.setPrict(“价格要变”);
  }
  }
  
  

[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值