观察者模式
2015-10-30 09:05
239 查看
观察者模式
摘自网络:
观察者模式:
定义:一对多的依赖关系,让多个观察者同时监听某一个主体帮助。当该对象变化时,
会通知所有的观察者,使他们的状态自动发生变化。
优点:减少对象之间的耦合,有利于系统的复用,并保证分工合作的高效
场合:如网站监听在线人数,并监听是什么用户做什么动作,接着发出指令或信息
ListenerDemo.java为个人的学习总结
被监听者:
自己的属性,自己的动作,监听器群,监听者群
监听器群:
多个监听器
监听者:
自己的属性,被监听的群组,
package fengke_test;
/**
* 学习总结
* @author 锋客
* <br>
* 通过学习Demo1.java,自行编写一个观察者模式。
*
*/
public class ListenerDemo {
//测试
public static void main(String[] args) {
//创建被监听者
Actor ac=new Actor("被监听者");
//设置监听器
ac.setListenertools(new listenertools() {
@Override
public void dorun(Listener listener) {
listener.setName("监听者B");
System.out.println(listener.getName()+"看到: "+listener.getActor()+"跑步了");
}
@Override
public void doeat(Listener listener) {
listener.setName("监听者C");
System.out.println(listener.getName()+"看到: "+listener.getActor()+"吃饭了");
}
});
ac.run();
ac.eat();
}
}
/*
* 被监听者
*/
class Actor{
//设置一个属性
private String name;
//配置监听器
private listenertools listenertools;
//构造器
public Actor(String name) {
super();
this.name = name;
}
//获取名字的方法
public String getName(){
return this.name;
}
//设置监听
public void setListenertools(listenertools lis){
this.listenertools=lis;
}
public void run(){
System.out.println(name+"跑步了!!!");
//如果存在监听,则给一个匿名内部类,将被监听者信息传入
if(listenertools!=null){
listenertools.dorun(new Listener(this));
}
}
public void eat(){
System.out.println(name+"吃了饭了!!!");
//如果存在监听,则给一个匿名内部类,将被监听者信息传入
if(listenertools!=null){
listenertools.doeat(new Listener(this));
}
}
}
/*
* 监听者
*/
class Listener{
//监听者
private String name;
//被监听的人
private Actor actor;
//构造器
public Listener(Actor actor){
super();
this.actor=actor;
}
//获取监听者信息
public String getName(){
return this.name;
}
//获取被监听者信息
public Actor getActor() {
return actor;
}
//设置监听者信息
public void setName(String name){
this.name=name;
}
//设置被监听者信息
public void setActor(Actor actor) {
this.actor = actor;
}
}
/*
* 监听工具
*
* 作用:将被监听者和监听者链接起来
*/
interface listenertools{
public void dorun(Listener listener);
public void doeat(Listener listener);
}
摘自网络:
观察者模式:
定义:一对多的依赖关系,让多个观察者同时监听某一个主体帮助。当该对象变化时,
会通知所有的观察者,使他们的状态自动发生变化。
优点:减少对象之间的耦合,有利于系统的复用,并保证分工合作的高效
场合:如网站监听在线人数,并监听是什么用户做什么动作,接着发出指令或信息
ListenerDemo.java为个人的学习总结
被监听者:
自己的属性,自己的动作,监听器群,监听者群
监听器群:
多个监听器
监听者:
自己的属性,被监听的群组,
package fengke_test;
/**
* 学习总结
* @author 锋客
* <br>
* 通过学习Demo1.java,自行编写一个观察者模式。
*
*/
public class ListenerDemo {
//测试
public static void main(String[] args) {
//创建被监听者
Actor ac=new Actor("被监听者");
//设置监听器
ac.setListenertools(new listenertools() {
@Override
public void dorun(Listener listener) {
listener.setName("监听者B");
System.out.println(listener.getName()+"看到: "+listener.getActor()+"跑步了");
}
@Override
public void doeat(Listener listener) {
listener.setName("监听者C");
System.out.println(listener.getName()+"看到: "+listener.getActor()+"吃饭了");
}
});
ac.run();
ac.eat();
}
}
/*
* 被监听者
*/
class Actor{
//设置一个属性
private String name;
//配置监听器
private listenertools listenertools;
//构造器
public Actor(String name) {
super();
this.name = name;
}
//获取名字的方法
public String getName(){
return this.name;
}
//设置监听
public void setListenertools(listenertools lis){
this.listenertools=lis;
}
public void run(){
System.out.println(name+"跑步了!!!");
//如果存在监听,则给一个匿名内部类,将被监听者信息传入
if(listenertools!=null){
listenertools.dorun(new Listener(this));
}
}
public void eat(){
System.out.println(name+"吃了饭了!!!");
//如果存在监听,则给一个匿名内部类,将被监听者信息传入
if(listenertools!=null){
listenertools.doeat(new Listener(this));
}
}
}
/*
* 监听者
*/
class Listener{
//监听者
private String name;
//被监听的人
private Actor actor;
//构造器
public Listener(Actor actor){
super();
this.actor=actor;
}
//获取监听者信息
public String getName(){
return this.name;
}
//获取被监听者信息
public Actor getActor() {
return actor;
}
//设置监听者信息
public void setName(String name){
this.name=name;
}
//设置被监听者信息
public void setActor(Actor actor) {
this.actor = actor;
}
}
/*
* 监听工具
*
* 作用:将被监听者和监听者链接起来
*/
interface listenertools{
public void dorun(Listener listener);
public void doeat(Listener listener);
}
相关文章推荐
- 别人走的路--uap
- 第七周实践项目6--停车场模拟
- 第九周 项目四 广义表
- 第8周项目 顺序串算法
- 用MJ 刷新加载
- 第九周项目1-猴子选大王 数组版
- C# ADO.NET访问SQL Server数据库<转>
- nyoj 82 迷宫寻宝(一)
- 顺序串
- 第8周项目2 建立链串的算法库
- 第八周项目4-字符串加密
- 第九周项目3——稀疏矩阵三元组表示的实现与应用(1)
- 无题
- 第8周项目2建立链串的算法库
- c++boost中的asio介绍
- 【mysql】重置密码的方法
- 4:登录知乎后爬取首页问题
- 第九周 项目3 稀疏矩阵的三元组表示的实现及应用(矩阵相加)
- 水上升下降抵消题(Problem ID:1049)
- 浅谈android事件分发机制