常见的设计模式(代理、观察者模式)
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、代理模式
删除
