Design Patterns - Observer Pattern
来源:互联网 发布:阿里云节点选择 编辑:程序博客网 时间:2024/05/29 08:08
Observer pattern is used when there is one-to-many relationship between objects such as if one object is modified, its depenedent objects are to be notified automatically. Observer pattern falls under behavioral pattern category.
Implementation
Observer pattern uses three actor classes. Subject, Observer and Client. Subject is an object having methods to attach and detach observers to a client object. We have created an abstract class Observer and a concrete classSubject that is extending class Observer.
ObserverPatternDemo, our demo class, will use Subject and concrete class object to show observer pattern in action.
Step 1
Create Subject class.
Subject.java
import java.util.ArrayList;import java.util.List;public class Subject { private List<Observer> observers = new ArrayList<Observer>(); private int state; public int getState() { return state; } public void setState(int state) { this.state = state; notifyAllObservers(); } public void attach(Observer observer){ observers.add(observer); } public void notifyAllObservers(){ for (Observer observer : observers) { observer.update(); } } }
Step 2
Create Observer class.
Observer.java
public abstract class Observer { protected Subject subject; public abstract void update();}
Step 3
Create concrete observer classes
BinaryObserver.java
public class BinaryObserver extends Observer{ public BinaryObserver(Subject subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println( "Binary String: " + Integer.toBinaryString( subject.getState() ) ); }}
OctalObserver.java
public class OctalObserver extends Observer{ public OctalObserver(Subject subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println( "Octal String: " + Integer.toOctalString( subject.getState() ) ); }}
HexaObserver.java
public class HexaObserver extends Observer{ public HexaObserver(Subject subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println( "Hex String: " + Integer.toHexString( subject.getState() ).toUpperCase() ); }}
Step 4
Use Subject and concrete observer objects.
ObserverPatternDemo.java
public class ObserverPatternDemo { public static void main(String[] args) { Subject subject = new Subject(); new HexaObserver(subject); new OctalObserver(subject); new BinaryObserver(subject); System.out.println("First state change: 15"); subject.setState(15); System.out.println("Second state change: 10"); subject.setState(10); }}
Step 5
Verify the output.
First state change: 15Hex String: FOctal String: 17Binary String: 1111Second state change: 10Hex String: AOctal String: 12Binary String: 1010
- Design Patterns - Observer Pattern
- Design Pattern - Behavioral Patterns - Observer Pattern
- Head First Design Patterns 阅读笔记之二: Observer Pattern
- Design Pattern --------Observer pattern
- [Design Pattern]Observer Pattern
- OOP Design (Head First Design Patterns) 学习笔记--03 Observer Pattern
- Design Pattern 6-observer
- design pattern : Observer
- Observer Design Pattern
- 一句话Design Pattern:Observer
- Design Pattern----Creational Patterns
- Design Pattern----Structural Patterns
- Design Pattern----Behavioral Patterns
- Design Patterns - Bridge Pattern
- Design Patterns - Visitor Pattern
- 《Head First Design Patterns》笔记二:观察者模式(Observer Pattern)
- Observer Design Pattern in C#!
- Observer Design Pattern in C#!
- Android 事件分发onInterceptTouchEvent和onTouchEvent整理
- hashMap ,hashTable ,concurrentHashMap区别
- SimpleAdapter创建ListView
- centos7 开放端口
- SSLv3&TLS协议学习笔记(一)
- Design Patterns - Observer Pattern
- light oj 1004 水DP
- Java 并发:sleep,yield,join
- NOI题解(1.5编程基础之循环控制)(待补全)
- 设置ctl.start 属性启动init.rc 中service以及权限问题
- 关于appserv 中 php 安装php_imagic的问题
- java中按文件中的分隔符(空格、换行符等)逐项读取文件中的数据
- MySQL profiling 查找Query瓶颈
- Java微信二次开发之6-文本消息体内容换行的使用