案例分析:设计模式与代码的结构特性

1.总体来说设计模式分为三大类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

2.我们选择观察者模式进行分析。

观察者模式(又称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系。能够实现让多个观察者监听某一个对象的动态。当这个对象发布新动态的时候,会通知所有已订阅的观察者。观察者根据自己的行为来处理该通知。

主要应用场景

在我们生活中处处存在着观察者模式(或者称为发布-订阅模式),例如:10086给移动用户发送短信、微信群聊发送消息给全体人员、微博粉丝接收明星发送的动态等。所有一对多的关系基本都可以转化为观察者模式。以下例分析。

  • 抽象主题(Subject):定义了一个主题的基本方法,其中最重要的是一个观察者订阅方法。
  • 抽象观察者(Observer):定义了观察者的基本方法,其中最重要的方法是update方法,主题发布通知后,会通知观察者调用update方法处理

具体代码如下:

普通用户

public class User implements Observe {

    private String username;

    public User(String username) {
        this.username = username;
    }

    @Override
    public void notify(String msg) {
        System.out.println(username + ":快看Idol发布动态了");
    }
}

抽象观察者

public interface Observe {

    void notify(String msg);

}

notify方法:消息发布者发布新动态后,会调用notify,从而实现偶像(主题)发布消息及时通知fans(观察者)的效果。

具体的主题(偶像)

public class Idol implements Subject {

    @Override
    public void addFans(Observe fan) {
        this.fans.add(fan);
    }

    public void sendMsg(String msg) {
        for (Observe fan : this.fans) fan.notify(msg);
    }
}

sendMsg方法:运用了java面向对象的多态机制。即使是不同的类,但只要它是Observe的子类,运行sendMsg方法后,它们都会根据自己实现的notify做出不同的响应。

main方法

public static void main(String[] args) {
    Idol zhouJieLun = new Idol();

    User a = new User("用户A");
    User b = new User("用户B");
    User c = new User("用户C");
    User d = new User("用户D");

    zhouJieLun.addFans(a);
    zhouJieLun.addFans(b);
    zhouJieLun.addFans(c);
    zhouJieLun.addFans(d);

    zhouJieLun.sendMsg("新专辑《说好不哭》");
}

以上是一个动态发布的观察者模式。

posted @ 2020-01-10 16:26  fgtao  阅读(83)  评论(0编辑  收藏  举报