设计模式-观察者模式

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 设计模式-观察者模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

观察者模式的运用

 (1)案例背景:

 某在线股票系统需要提供以下功能:当股票购买者所购买的某只股票价格变化幅度达到 5%时,系统 将自动发送通知(包括新价格)给购买该股票的股民。现使用观察者模式设计该系统,绘制类图并编程实 现

(2)实现步骤:

  • Ø 根据题意,画出在线股票系统的类图,类图中应包括目标类 Stock,抽象观察者 Investor 以及具体 观察者 ConcreteInvestor。Stock 类中应该包含添加观察者的功能 attach(),移除观察者的功能 detach(),获取股票名称 getStockName(),设定股票名称 setStockName(),设定股票价格 setPrice(),获取股票功能 getPrice()以及通知观察者的功能 notifyInvestor();观察者应该 有能够根据观察目标的改变作出反应的 upDate()方法
  • Ø 根据类图,实现上述类的具体代码以及用户类 Client。
  • Ø 编译并运行程序,使得股民能够在价格变化超过 5%的时候收到通知。

(4)案例总结: 在以下情况可以使用观察者模式:

 Ø 一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两个方面封装在独立的对象中 使它们可以各自独立地改变和复用

 Ø 一个对象的改变将导致一个或多个其他对象发生改变,并且不知道具体有多少对象将发生改变, 也不知道这些对象是谁

 Ø 需要在系统中创建一个触发链

代码结构:

 设计模式-观察者模式

详细代码:

Stock.java:

package Observer;



import java.util.ArrayList;



public class Stock {

    protected ArrayList observers = new ArrayList();

    String stockName;

    int price;



    public void attach(Investor investor){

        observers.add(observers);

    }



    public void detach(Investor investor){

        observers.remove(observers);

    }



    public String getStockName() {

        return stockName;

    }



    public void setStockName(String stockName) {

        this.stockName = stockName;

    }



    public int getPrice() {

        return price;

    }



    public void setPrice(int price) {

        this.price = price;

    }



    public void notifyInvestor(){

        System.out.println("通知:价格变化超过5%!");

        System.out.println("----------------");



        for (Object obs:observers){

            ((Investor)obs).upDate();

        }

    }







}

Investor.java:

package Observer;



public interface Investor {

    void upDate();

}

 

ConcreateInvestor.java:

package Observer;



public class ConcreateInvestor implements Investor{

    public void upDate(){

        System.out.println("价格变化超过5%!");



    }

}

 

 

Clent.java:

package Observer;



public class Client {

    public static void main(String[] args) {

        System.out.println("详细设计实验报告  1904班白旭君  2019005368");



        Stock stock1 = new Stock();

        Stock stock2 = new Stock();

//        String stockName;

//        int price;

        Investor investor1 = new ConcreateInvestor();

        Investor investor2 = new ConcreateInvestor();



        stock1.attach(investor1);

        stock1.setPrice(49);

        stock1.setStockName("股票1");

        stock1.setPrice(50);



        stock2.attach(investor2);

        stock2.setPrice(49);

        stock2.setStockName("股票2");

        stock2.setPrice(100);





        if ((stock1.getPrice() >= 49 * 1.05 ) || (stock1.getPrice() <= 49 * 0.95) ){

            System.out.print(stock1.getStockName());

            investor1.upDate();

        }



        if ((stock2.getPrice() >= 49 * 1.05 ) || (stock2.getPrice() <= 49 * 0.95) ){

            System.out.print(stock2.getStockName());

            investor2.upDate();

        }



//        investor1.setStockName("股票1");

//        investor1.setPrice(50);

//

//        investor2.setStockName("股票2");

//        investor2.setPrice(90);

//

//        Stock.attach(stock1);

    }

}

实验结果:

股票1,股票2原本的price都为49.之后将股票1setprice50,股票2setprice100,显然,股票2增长超过5%,所以给股民提示:股票2变化超过5%

设计模式-观察者模式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/128198.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!