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 }
  • 相关阅读:
    Mybatis异常There is no getter for property named 'XXX' in 'class java.lang.String'
    js javascript 容错处理代码屏蔽js错误
    springmvc访问项目默认先访问后台再返回首页
    杂记-格式化Date默认格式,日期加一天,jstl判断字符类型,ajax模拟from表单后台跳转页面,jstl访问数据库并在页面显示
    测试覆盖率工具EclEmma安装与使用
    GSON使用之对特殊字符的转换的处理
    eclipse启动自己添加的tomcat时tomcat的webapps下没有项目
    接口和抽象类
    枚举
    Java异常
  • 原文地址:https://www.cnblogs.com/loveer/p/11279698.html
Copyright © 2011-2022 走看看