移动架构--5.观察者模式、命令模式

2018-08-07  本文已影响0人  小小秤

1.观察者模式
观察者模式涉及到被观察者,观察者,当被观察者变化的时候通知观察者进行响应。一个最简单的例子,报纸的订阅,被观察者变化引起监听者变化。

//1.观察者接口
public interface Listener{
 void readNews(String content);
}
//2.被观察者
public class Paper{
  private List<Listener> listeners = null;
  public Paper(){
    listeners = new ArrayList<Listener>();
  }
//被观察者,保存观察者的实例对象
  public addListener(Listener listener){
    listeners.add(listener);
  }
  public removeListener(Listener listener){
    listeners.remove(listener);
  }
  //被观察者发生变化,通知观察者
  public void publishNews(String content){
     for(Listener listener: listeners){
         listener.readNews(content);
     }
  }
}
//3.观察者
public class PersonA implements Listener{
  @Override
  public void readNews(String content){
    System.out.println(content);
  }
}
//4.客户端调用
public class Client{
  public static void main(String[] args){
    Paper paper = new Paper();
    PersonA person1 = new PersonA();
    PersonA person2 = new PersonA();
    paper.addListener(person1);
    paper.addListener(person2);
    paper.publishNews("好消息,好消息!")
  }
}

2.命令模式
命令模式包括发送命令者,接收命令者、命令的抽象接口和命令的具体实现类。

//1.命令的抽象接口
public interface Command{
  void doCommand(){
  }
}
//2.命令接收者
public class Receiver{
  public void receiveDoA(){
  //执行具体的操作
  }
  public void receiveDoB(){
  //执行具体的操作
  }
}
//3.具体的命令
public class CommandImplA implements Command{
  private Receive receiver;
  public CommandImplA(Receiver receiver){
      this.receiver = receiver;
  }
  @Override
  void doCommand(){
     receive.receiveDoA();
  }
}
public class CommandImplB implements Command{
  private Receive receiver;
  public CommandImplB(Receiver receiver){
      this.receiver = receiver;
  }
  @Override
  void doCommand(){
     receive.receiveDoB();
  }
}
//4.命令的发送者
public class Sender{
  private Command command;
  public Sender(Command command){
    this.command = command;
  }
  public void sendCommand(){
    command.doCommand();
  }
}
//5.客户端使用
public class Client{
  public static void main(String[] args){
    Receiver receiver = new Receiver();
    CommandImplA cmdA = new CommandImplA(receive);
    CommandImplB cmdB = new CommandImplB(receive);
    Sender sender = new Sender(cmdA);
    sender.sendCommand();
  }
}

命令模式是将接收者要做的事情,抽象成命令,通过命令来解耦。在具体的命令中,用命令所引用的接收者实例进行相应的操作。命令的发送者负责发送各种命令。

上一篇 下一篇

猜你喜欢

热点阅读