观察者模式

1.设计模式分为三大类:创建型模式、结构型模式、行为型模式。创建型模式主要是将创建和使用代码进行解耦,结构型模式是将不同的功能代码进行解耦,行为型模式是将不同的行为代码进行解耦。其实我个人认为后面两者的说法很类似,不管是不同的功能代码和不同的行为代码是一回事,可能侧重点不一样。

观察者模式又称为发布订阅设计模式,属于行为型模式,根据应用场景的不同,可以有不同的代码实现方式:同步阻塞实现方式,和异步非阻塞的实现方式;还有进程内的实现方式,跨进程的实现方式。

之前对观察者模式理解不到位,感觉很是抽象。下面先以一个同步阻塞最简单的一个例子,这个例子是我从哔站上面看到的,感觉方便理解,一个借款方可能会有多个贷款方,一个借款方张三,多个贷款方比如王五和赵四。张三同时向赵四和王五借钱。

/**
 * @Description: 借款方接口
 * @Author
 * @Date 2023/3/19
 * @Version 1.0
 */
public interface Debit {
    void borrow(Credit credit);

    void notifyCredit();
}
/**
 * @Description: 贷款方接口
 * @Author
 * @Date 2023/3/19
 * @Version 1.0
 */
public interface Credit {
    void takeMoney();
}
/**
 * @Description: 借款方实现类
 * @Author
 * @Date 2023/3/19
 * @Version 1.0
 */
public class Zhangsan implements Debit{

    List<Credit> creditList = new ArrayList<>();

    @Override
    public void borrow(Credit credit) {
        creditList.add(credit);
        System.out.println("张三借钱+1");
    }

    @Override
    public void notifyCredit() {
        creditList.forEach(Credit::takeMoney);
    }
}
/**
 * @Description: 贷款方实现类
 * @Author
 * @Date 2023/3/19
 * @Version 1.0
 */
public class Zhaosi implements Credit{

    @Override
    public void takeMoney() {
        System.out.println("赵四要钱");
    }
}
/**
 * @Description: 贷款方实现类
 * @Author
 * @Date 2023/3/19
 * @Version 1.0
 */
public class Wangwu implements Credit{

    @Override
    public void takeMoney() {
        System.out.println("王五要钱");
    }
}
/**
 * @Description: 观察者模式 实现类
 * @Author
 * @Date 2023/3/19
 * @Version 1.0
 */
public class ObserveTest {

    public static void main(String[] args) {
        Debit debit = new Zhangsan();
        debit.borrow(new Wangwu());
        debit.borrow(new Zhaosi());
        debit.notifyCredit();
    }
}

运行结果:

张三借钱+1

张三借钱+1

王五要钱

赵四要钱

2.小结

观察者模式的优缺点:

a、观察者模式能将观察者和被观察者的代码进行解耦

借助设计模式,我们利用更好的代码结构,将一大坨代码拆分成职责更单一的小类,让其满足开闭原则、高内聚松耦合等特性,以此来控制和应对代码的复杂性,提高代码的可扩展性。

b、目标与观察者之间创建一套触发机制;

  1. 问题

“生产者 - 消费者”模型和观察者模式的区别和联系是什么?

我看到经典的评论直接截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值