常见的设计模式(代理、观察者模式)

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、代理模式
删除

















全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务