0
点赞
收藏
分享

微信扫一扫

[C/C++] -- 代理模式

千妈小语 2024-05-09 阅读 33

系列文章目录


前言

今天给大家介绍另一种设计模式--观察者模式,有了解webscoket实现原理的小伙伴应该对这个设计模式不陌生。不清楚也没关系,今天就给大家介绍一下这个设计模式。🌈


一、什么是观察者模式

观察者模式是一种常见的设计模式,用于在对象之间建立一对多的依赖关系。在该模式中,一个目标对象管理所有依赖于它的观察者对象,并在其状态改变时主动发出通知。

在观察者模式中,主要有以下几个角色:

UMl类图

二、有哪些应用场景

最常见的就是前后端实时通信的webscoket,观察者模式在其他实际应用中也具有广泛的应用场景,比如:

三、案例

我就以取快递这个案例为例,首先驿站拿到我们的快递后会给我们发送取件码,通知我们取件,然后我们接收到通知后,拿着取件码取件;这个过程中,驿站就是被观察者,我们自己就是观察者。接下来我们用代码实现这个过程。

首先,定义观察者接口或者抽象类

public abstract class Customer {
    public abstract void update();
}

具体观察者

public class CustomerA extends Customer{
    @Override
    public void update() {
        System.out.println("顾客A的快递已送达");
    }
}

public class CustomerB extends Customer{
    @Override
    public void update() {
        System.out.println("顾客B的快递已送达");
    }
}

 定义主题或目标接口

public interface Subject {
    void registerCustomer(Customer o);
    void removeCustomer(Customer o);
    void notifyCustomers();
}

 具体观察者

public class PostStation implements Subject{
    private List<Customer> customerList ;
    public PostStation(){
        this.customerList = new ArrayList<>();
    }
    //添加顾客
    @Override
    public void registerCustomer(Customer o) {
        customerList.add(o);
    }
    //删除顾客
    @Override
    public void removeCustomer(Customer o) {
        customerList.remove(o);
    }
    //通知所有顾客
    @Override
    public void notifyCustomers() {
        for (Customer customer : customerList){
            customer.update();
        }
    }
    //对外提供取快递方法
    public void PostExpress(){
        this.notifyCustomers();
    }
}

测试

 void test1(){
        //创建一个驿站
        PostStation postStation = new PostStation();
        Customer customerA = new CustomerA();
        Customer customerB = new CustomerB();
        //添加两位顾客
        postStation.registerCustomer(customerA);
        postStation.registerCustomer(customerB);
        //通知所以顾客取快递
        postStation.notifyCustomers();
    }

总结

优点

缺点

举报

相关推荐

0 条评论