常见的设计模式(代理、观察者模式)
1、观察者模式
观察者模式,在对象之间若是出现一对多的关系的时候,一个对象发生了改变,其他的观察者对象就会随着改变,像这种变化关系需要使用观察者模式。
具体代码实现:
/** * 观察者对象的抽象类 */ public abstract class Observers { // 观察者所关联的主体对象 protected Subject subject; // 用于更新观察者对象的方法 public abstract void update(); }
package 牛客网; import java.util.ArrayList; import java.util.List; public class Subject { // 存放观察者对象 List<Observers> list = new ArrayList<>(); private int state; public int getState() { return state; } // 添加观察者对象 public void attch(Observers observers) { list.add(observers); } // 当状态改变的时候是需要通知更新观察者状态的 public void setState(int state) { this.state = state; notifyAllObservers(); } /** * 用于实现通知函数 */ private void notifyAllObservers() { for (Observers obj : list) { obj.update(); } } }
/** * 观察者对象的具体实现类 */ public class lisi extends Observers{ // 在初始化的时候,设置该观察者对象观察的是哪个主体,并将该观察者放在观察者列表中 public lisi(Subject subject) { this.subject = subject; subject.list.add(this); } // 观察者进行更新 @Override public void update() { System.out.println("李四" + subject.getState()); } }
/** * 观察者对象的具体实现类 */ public class wangwu extends Observers{ // 在初始化的时候,设置该观察者对象观察的是哪个主体,并将该观察者放在观察者列表中 public wangwu(Subject subject) { this.subject = subject; subject.list.add(this); } // 观察者进行更新 @Override public void update() { System.out.println("王五" + subject.getState()); } }
/** * 观察者对象的具体实现类 */ public class zhangsan extends Observers{ // 在初始化的时候,设置该观察者对象观察的是哪个主体,并将该观察者放在观察者列表中 public zhangsan(Subject subject) { this.subject = subject; subject.list.add(this); } // 观察者进行更新 @Override public void update() { System.out.println("张三" + subject.getState()); } }
public class Main { public static void main(String[] args) { // 创建一个主体对象 Subject subject = new Subject(); // 实例化这三个观察者对象 new zhangsan(subject); new lisi(subject); new wangwu(subject); subject.setState(20); } }
2、代理模式
删除