zoukankan      html  css  js  c++  java
  • 设计模式一观察者模式

    观察者(Observer)模式的定义:
    指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,
    所有依赖于它的对象都得到通知并被自动更新
    这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。

    抽象主题(Subject)角色:
    也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,
    以及通知所有观察者的抽象方法。
    具体主题(Concrete Subject)角色
    也叫具体目标类,它实现抽象目标中的通知方法,
    当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。
    抽象观察者(Observer)角色:
    它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。
    具体观察者(Concrete Observer)角色:
    实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。
     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 public class Observer {
     5     public static void main(String[] args) {
     6         Subjecting sub = new ConcreteSubject();
     7         sub.add(new Observering1());
     8         sub.add(new Observering2());
     9         ((ConcreteSubject) sub).change("变天啦");
    10     }
    11 }
    12 
    13 //首先是一个被观察者的父类,它维护了装有观察者引用集合的功能。
    14 abstract class Subjecting {
    15     //观察者集合
    16     private List<Observering> arr = new ArrayList<Observering>();
    17 
    18     public void add(Observering ob) {
    19         arr.add(ob);
    20     }
    21 
    22     public void remove(Observering ob) {
    23         arr.remove(ob);
    24     }
    25 
    26     //通知观察者
    27     public void update(String newstatue) {
    28         for (int i = 0; i < arr.size(); i++) {
    29             Observering observering = arr.get(i);
    30             observering.update(newstatue);
    31         }
    32     }
    33 }
    34 
    35 //具体的被观察者对象
    36 class ConcreteSubject extends Subjecting {
    37     private String statue;
    38 
    39     public String getStatue() {
    40         return statue;
    41     }
    42 
    43     public void setStatue(String statue) {
    44         this.statue = statue;
    45     }
    46 
    47     public void change(String statuee) {
    48         statue = statuee;
    49         update(statuee);
    50     }
    51 }
    52 
    53 //观察者
    54 interface Observering {
    55     public void update(String statue);
    56 }
    57 
    58 class Observering1 implements Observering {
    59     private String statue;
    60 
    61     @Override
    62     public void update(String statuee) {
    63         statue = statuee;
    64         System.out.println(statuee + "---快走");
    65     }
    66 }
    67 
    68 class Observering2 implements Observering {
    69     private String statue;
    70 
    71     @Override
    72     public void update(String statuee) {
    73         statue = statuee;
    74         System.out.println(statuee + "--快----跑---");
    75     }
    76 }
  • 相关阅读:
    231. Power of Two
    204. Count Primes
    205. Isomorphic Strings
    203. Remove Linked List Elements
    179. Largest Number
    922. Sort Array By Parity II
    350. Intersection of Two Arrays II
    242. Valid Anagram
    164. Maximum Gap
    147. Insertion Sort List
  • 原文地址:https://www.cnblogs.com/loveer/p/11279698.html
Copyright © 2011-2022 走看看