观察者模式(行为型)
来源:互联网 发布:淘宝助理搬家 编辑:程序博客网 时间:2024/06/06 10:59
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
观察者模式有以下的4个角色:
1.抽象主题:又称为被观察者,可以增加和删除观察者对象;
2.抽象观察者:为所有具体的观察者都定义了一个共同的接口,在具体主题内部状态改变的时候,为所有的观察者发出通知。
3.具体主题
4.具体观察者
下面是观察者模式的UML图例:
下面模拟一个点击按钮的例子:
首先是两个抽象接口:
public interface Clickable {void Click();void addClickableObserver(ClickableObserver observer);void removeClickableOberver(ClickableObserver observer);}
public interface ClickableObserver {void click(Clickable clickable);}
下面是具体的主题和具体的观察者:
import java.util.ArrayList;import java.util.List;public class Button implements Clickable{List<ClickableObserver> observers=new ArrayList<ClickableObserver>();int x,y;public String Color;public void Click() {// TODO Auto-generated method stubSystem.out.println("按钮被单击!");for(int i=observers.size()-1;i>=0;i--){observers.get(i).click(this);}}public void addClickableObserver(ClickableObserver observer) {// TODO Auto-generated method stubobservers.add(observer);}public void removeClickableOberver(ClickableObserver observer) {// TODO Auto-generated method stubobservers.remove(observer);}@Overridepublic String toString() {return "Button [Color=" + Color + ", x=" + x + ", y=" + y + "]";}}
具体的观察者有3个:
public class ChangeColorObserver implements ClickableObserver {public void click(Clickable clickable) {// TODO Auto-generated method stubButton b=(Button) clickable;b.Color="红色";}}
public class ChangeCoordinateObserver implements ClickableObserver{public void click(Clickable clickable) {// TODO Auto-generated method stubButton b=(Button) clickable;b.x=100;b.y=90;}}
public class OtherObserver implements ClickableObserver {public void click(Clickable clickable) {// TODO Auto-generated method stubSystem.out.println("执行其他的操作");}}最后给出主程序:
public class Main {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubButton button=new Button();button.Color="白色";button.x=0;button.y=0;button.addClickableObserver(new ChangeColorObserver());button.addClickableObserver(new ChangeCoordinateObserver());button.addClickableObserver(new OtherObserver());button.Click();//模拟一次按钮点击System.out.println(button);}}
0 0
- 行为型-观察者模式
- 行为型模式-观察者
- 行为型--观察者模式
- 观察者模式(行为型)
- 观察者模式(行为型)
- 观察者模式(行为型)
- 行为型模式-观察者模式
- 行为型之观察者模式
- 行为型模式-观察者observer
- 观察者模式(行为型)
- 12-行为型-观察者模式
- 行为型之观察者模式
- 设计模式 - 行为型模式 - 观察者模式
- 设计模式->行为型模式->观察者模式
- 行为型模式-观察者模式(Observer)
- 设计模式--行为型--观察者模式
- 观察者模式--行为型模式之三
- 设计模式15:观察者模式【行为型】
- *[Lintcode]Wiggle Sort摆动排序
- java中的int i=(int)(Math.random()*100)+1;怎样理解?
- 决策树——过拟合的处理
- 奇异值分解
- Python 面向对象
- 观察者模式(行为型)
- 微信小程序开发之『侧边栏滑动』特效
- 将GridView导出为PDF 通过itextsharp
- C++11 array数组的测试
- PAT1094
- Linux安装PIL模块
- argc,argv的用法
- oracle 11g 从+DATA迁移到+newdata ASM 磁盘组迁移
- android中自动生成parcelable