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();
}
}
命令模式是将接收者要做的事情,抽象成命令,通过命令来解耦。在具体的命令中,用命令所引用的接收者实例进行相应的操作。命令的发送者负责发送各种命令。
网友评论