• (@WhiteTaken)设计模式学习——观察者模式


    忙里抽闲,继续学习设计模式,作为自己的读书笔记,这次介绍Java下实现的观察者模式。

    观察模式需要了解的三个概念:

    被观察者:被观察的对象,发生变化会通知观察者集合(存放观察者的容器)

    观察者:有update方法,当观察者发生变化的时候,update方法会被调用

    主类:实例化观察者,并向被观察者,添加观察者对象。

     

    追求目标:被观察变化,观察者做出反应!!!

    实现如下:

    Game类,就是一个普通对象,被GameMan类管理。

     1 public class Game {
     2     String name = "";
     3     String company = "";
     4     
     5     public String getName() {
     6         return name;
     7     }
     8     public void setName(String name) {
     9         this.name = name;
    10     }
    11     public String getCompany() {
    12         return company;
    13     }
    14     public void setCompany(String company) {
    15         this.company = company;
    16     }
    17 }

    GameMan类,有发布Game的方法,并适时做出改变。

     1 import java.util.Observable;
     2 
     3 public class GameMan extends Observable {
     4     public void PublishGame(String name, String company)
     5     {
     6         Game game = new Game();
     7         game.setName(name);
     8         game.setCompany(company);
     9         this.setChanged();
    10         this.notifyObservers(game);
    11     }
    12 }

    MyObserver类,实现update接口。处理一些被观察者发生变化后的操作。

     1 import java.util.Observable;
     2 import java.util.Observer;
     3 
     4 public class MyObserver implements Observer {
     5 
     6     @Override
     7     public void update(Observable o, Object arg) {
     8         System.out.println("游戏管理者发布了新游戏!");
     9         Game game = (Game)arg;
    10         System.out.println("新游戏的名字:" + game.getName());
    11         System.out.println("新游戏的开发公司:" + game.getCompany());
    12     }
    13 }

    MainClass类,主类,向被观察者注册观察者。

    1 public class MainClass {
    2     public static void main(String[] args) {
    3         GameMan gameMan = new GameMan();
    4         gameMan.addObserver(new MyObserver());
    5         gameMan.PublishGame("NGame", "WhiteTaken");
    6     }
    7 }

    运行之后的结果。

    至此,观察者模式介绍完毕。

  • 相关阅读:
    一个基础的CURL类
    设计自适应网页方法
    JQ点击列表显示隐藏
    获取当前页面的完整URL
    配置时间生成下拉菜单
    Contains Duplicate II
    Rectangle Area
    面试题47:不用加减乘除做加法
    面试题48:用C++设计一个不能被继承的类
    Reverse Linked List
  • 原文地址:https://www.cnblogs.com/WhiteTaken/p/7684384.html
Copyright © 2020-2023  润新知