java设计模式进阶_observer

原创 2016年08月31日 11:57:05

这里写图片描述

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : WeatherObserver.java
//  @ Date : 2016/8/31
//  @ Author : 
//
//




public interface WeatherObserver {
    public void update(WeatherType weatherType);
}

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Hobbits.java
//  @ Date : 2016/8/31
//  @ Author : 
//
//




public class Hobbits implements WeatherObserver {
    public void update(WeatherType weatherType) {

        switch(weatherType)
        {
        case COLD:
            System.out.println("The hobbits are shivering in the cold weather.");
            break;
        case RAINY:
            System.out.println("The hobbits look for cover from the rain.");
            break;
        case SUNNY:
            System.out.println("The happy hobbits bade in the warm sun.");
            break;
        case WINDY:
            System.out.println("The hobbits hold their hats tightly in the windy weather.");
            break;
        default:
            break;
        }

    }
}


//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Orcs.java
//  @ Date : 2016/8/31
//  @ Author : 
//
//




public class Orcs implements WeatherObserver {
    public void update(WeatherType weatherType) {
        switch(weatherType)
        {
        case COLD:
            System.out.println("The orcs are freezing cold.");
            break;
        case RAINY:
            System.out.println("The orcs are dripping wet.");
            break;
        case SUNNY:
            System.out.println("The sun hurts the orcs' eyes.");
            break;
        case WINDY:
            System.out.println("The orc smell almost vanishes in the wind.");
            break;
        default:
            break;
        }
    }
}

import java.util.ArrayList;
import java.util.List;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Weather.java
//  @ Date : 2016/8/31
//  @ Author : 
//
//




public class Weather {

    private WeatherType currentWeather;
    private List<WeatherObserver> observers;

    public Weather() {
        observers = new ArrayList<>();
        currentWeather = WeatherType.SUNNY;
    }

    public void addObserver(WeatherObserver observer) {
        observers.add(observer);
    }

    public void removeObserver(WeatherObserver observer) {
        observers.remove(observer);
    }

    public void timePasses() {
        WeatherType[] enumValues = WeatherType.values();
        currentWeather = enumValues[(currentWeather.ordinal() + 1) % enumValues.length];
        System.out.println("The weather changed to " + currentWeather + ".");
        notifyObservers();
    }

    private void notifyObservers() {
        for(WeatherObserver obs : observers)
        {
            obs.update(currentWeather);
        }
    }
}


public enum WeatherType {

    SUNNY,//阳光的
    RAINY,//下雨的
    WINDY,//多风的
    COLD;//寒冷的

    public String toString() {
        return this.name().toLowerCase();
    };

}



public class App {

    public static void main(String[] args) {

        Weather weather = new Weather();
        weather.addObserver(new Orcs());
        weather.addObserver(new Hobbits());

        weather.timePasses();
        weather.timePasses();
        weather.timePasses();
        weather.timePasses();

    }

}

/*
The weather changed to rainy.
The orcs are dripping wet.
The hobbits look for cover from the rain.
The weather changed to windy.
The orc smell almost vanishes in the wind.
The hobbits hold their hats tightly in the windy weather.
The weather changed to cold.
The orcs are freezing cold.
The hobbits are shivering in the cold weather.
The weather changed to sunny.
The sun hurts the orcs' eyes.
The happy hobbits bade in the warm sun.
*/


//示例2:


public interface Observer<S extends Observable<S,O,A>, O extends Observer<S,O,A>, A> {

    void update(S subject,A argument);
}

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;


public abstract class Observable<S extends Observable<S,O,A>,O extends Observer<S,O,A>,A> {

    protected List<O> observers;

    public Observable(){
        this.observers = new CopyOnWriteArrayList<>();
    }

    public void addObserver(O observer){
        this.observers.add(observer);
    }

    @SuppressWarnings("unchecked")
    public void notifyObservers(A argument)
    {
        for(O observer : observers)
        {
            observer.update((S)this, argument);
        }
    }

}


import com.think.in.java.design.pattern.lesson22.WeatherType;

public interface Race extends Observer<GWeather,Race,WeatherType>{

}


import com.think.in.java.design.pattern.lesson22.WeatherType;

public class GHobbits implements Race{

    @Override
    public void update(GWeather o, WeatherType weatherType) {
        switch (weatherType) {
        case COLD:
            System.out.println("The hobbits are shivering in the cold weather.");
            break;
        case RAINY:
            System.out.println("The hobbits look for cover from the rain.");
            break;
        case SUNNY:
            System.out.println("The happy hobbits bade in the warm sun.");
            break;
        case WINDY:
            System.out.println("The hobbits hold their hats tightly in the windy weather.");
            break;
        default:
            break;
        }
    }

}


import com.think.in.java.design.pattern.lesson22.WeatherType;

public class GOrcs implements Race{

    @Override
    public void update(GWeather o, WeatherType weatherType) {
        switch (weatherType) {
         case COLD:
             System.out.println("The orcs are freezing cold.");
             break;
         case RAINY:
             System.out.println("The orcs are dripping wet.");
             break;
         case SUNNY:
             System.out.println("The sun hurts the orcs' eyes.");
             break;
         case WINDY:
             System.out.println("The orc smell almost vanishes in the wind.");
             break;
        default:
            break;
        }
    }

}

import com.think.in.java.design.pattern.lesson22.WeatherType;

public class GWeather extends Observable<GWeather,Race,WeatherType >{

    private WeatherType currentWeather;

    public GWeather(){
        currentWeather = WeatherType.SUNNY;
    }

    public void timePasses()
    {
        WeatherType[] enumValues = WeatherType.values();
        currentWeather = enumValues[(currentWeather.ordinal() + 1) % enumValues.length];
        System.out.println("The weather changed to " + currentWeather + ".");
        notifyObservers(currentWeather);
    }
}


import com.think.in.java.design.pattern.lesson22.b.GHobbits;
import com.think.in.java.design.pattern.lesson22.b.GOrcs;
import com.think.in.java.design.pattern.lesson22.b.GWeather;

public class App {

    public static void main(String[] args) {

        GWeather gWeather = new GWeather();
        gWeather.addObserver(new GOrcs());
        gWeather.addObserver(new GHobbits());

        gWeather.timePasses();
        gWeather.timePasses();
        gWeather.timePasses();
        gWeather.timePasses();

    }

}

/*
The weather changed to rainy.
The orcs are dripping wet.
The hobbits look for cover from the rain.
The weather changed to windy.
The orc smell almost vanishes in the wind.
The hobbits hold their hats tightly in the windy weather.
The weather changed to cold.
The orcs are freezing cold.
The hobbits are shivering in the cold weather.
The weather changed to sunny.
The sun hurts the orcs' eyes.
The happy hobbits bade in the warm sun.

*/


版权声明:本文为博主原创文章,未经博主允许不得转载。

设计模式----Observer模式

在以下任一情况下可以使用观察者模式: 1、当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这二者封装在独立的对象中以使他们可以各自独立的改变和复用 2、当对一个对象的改变需要同时改变其他...
  • fly542
  • fly542
  • 2011年08月25日 00:00
  • 4701

Java面向对象设计模式(十五)——观察者模式(Observer)

相关文档:Java面向对象设计模式 观察者模式(Observer)         包括这个模式在内的接下来的四个模式,都是类和类之间的关系,不涉及到继承,学的时候应该 记得归纳,记得本文...
  • u011814346
  • u011814346
  • 2017年05月08日 14:54
  • 211

设计模式 - 观察者模式(Observer Pattern) 详解

观察者模式(Observer Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权...
  • u012515223
  • u012515223
  • 2014年05月22日 14:37
  • 2983

设计模式——观察者模式(Observer)

要想正确理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 设计模式学习笔记,欢迎交流。 ——Shulin 转载请注明出处:http://blog.csdn.net/zhsh...
  • u012909091
  • u012909091
  • 2014年08月20日 16:52
  • 2964

设计模式总结之Observer Pattern(观察者模式)

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。...
  • cooldragon
  • cooldragon
  • 2016年08月11日 00:53
  • 971

C#,由委托到Observer设计模式,再到事件机制

1. 什么是委托? 开始处理诸如int,bool等基本数据类型,它们是数据的类型。委托,是方法的类型。 如  int a; a可以是1,2,3,4,5......... 那么 delegate D; ...
  • u013781568
  • u013781568
  • 2014年03月01日 11:30
  • 998

Java设计模式——观察者模式(Observer Pattern)

场景一 描述:《孙子兵法》有云:“知彼知己,百战不殆;不知彼而知己,一胜一负;不 知彼,不知己,每战必殆”,那怎么才能知己知彼呢?知己是很容易的,自己的军队嘛,很容易知道,那怎么知彼呢?安插间谍是很...
  • u012401711
  • u012401711
  • 2016年09月08日 21:33
  • 640

浅谈JAVA设计模式之——观察者模式(Observer)

一、概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 二、适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...
  • l1028386804
  • l1028386804
  • 2015年05月09日 13:22
  • 1115

[Android&Java]浅谈设计模式-代码篇:观察者模式Observer

观察者,就如同一个人,对很多东西都感兴趣,就好像音乐、电子产品、Game、股票等,这些东西的变化都能引起爱好者们的注意并时刻关注他们。在代码中,我们也有这样的一种方式来设计一些好玩的思想来。今天就写个...
  • sunjundelove
  • sunjundelove
  • 2015年07月22日 20:47
  • 981

设计模式(行为型)之观察者模式(Observer Pattern)

观察者模式用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应...
  • yanbober
  • yanbober
  • 2015年05月04日 20:46
  • 5175
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式进阶_observer
举报原因:
原因补充:

(最多只允许输入30个字)