博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
观察者模式
阅读量:6991 次
发布时间:2019-06-27

本文共 3518 字,大约阅读时间需要 11 分钟。

设计模式的意义在于:面向业务内容、业务数据结构和系统架构,高内聚低耦合、优雅的将平面逻辑立体化。

1 package designPattern;  2   3 import java.util.ArrayList;  4 import java.util.List;  5 /**  6  * 观察者模式  7  * @author Administrator  8  */  9 public class B19_ObserverTest { 10  11     /** 12      * 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 13      */ 14     public static void main(String[] args) { 15         Policeman huangpuPoliceman=new HuangPuPoliceman(); 16         Policeman tianhePoliceman=new TianHePoliceman(); 17         Citizen c1=new HuangPuCitizen(); 18         Citizen c2=new TianHeCitizen(); 19          20         c1.register(huangpuPoliceman); 21         c1.register(tianhePoliceman); 22         c1.sendMessage("normal"); 23          24         c2.register(tianhePoliceman); 25         c2.sendMessage("unnormal"); 26     } 27 } 28 //subject 目标知道它的观察者。可以有任意多个观察者观察同一个目标。提供注册和删除观察者对象的接口。 29 abstract class Citizen { 30      31     @SuppressWarnings("rawtypes") 32     List pols; 33      34     String help = "normal"; 35      36     public void setHelp(String help) { 37         this.help = help; 38     } 39      40     public String getHelp() { 41         return this.help; 42     } 43      44     abstract void sendMessage(String help); 45  46     @SuppressWarnings("rawtypes") 47     public void setPolicemen() { 48         this.pols = new ArrayList(); 49     } 50      51     @SuppressWarnings("unchecked") 52     public void register(Policeman pol) { 53         this.pols.add(pol); 54     } 55  56     public void unRegister(Policeman pol) { 57         this.pols.remove(pol); 58     } 59 } 60 //observer 61 interface Policeman { 62  63     void action(Citizen ci); 64 } 65 //concreteSubject 66 class HuangPuCitizen extends Citizen { 67  68     public HuangPuCitizen() { 69         setPolicemen(); 70     } 71       72     public HuangPuCitizen(Policeman pol) { 73         setPolicemen(); 74         register(pol); 75     } 76      77     public void sendMessage(String help) { 78         setHelp(help); 79         for(int i = 0; i < pols.size(); i++) { 80             Policeman pol = (Policeman)pols.get(i); 81             //通知警察行动 82             pol.action(this); 83         } 84     } 85 } 86 class TianHeCitizen extends Citizen { 87     public TianHeCitizen() { 88         setPolicemen(); 89     } 90      91     public TianHeCitizen(Policeman pol) { 92         setPolicemen(); 93         register(pol); 94     } 95      96     public void sendMessage(String help) { 97         setHelp(help); 98         for (int i = 0; i < pols.size(); i++) { 99             Policeman pol =(Policeman)pols.get(i);100             //通知警察行动101             pol.action(this);102         }103     }104 }105 106 //concreteObserver107 class HuangPuPoliceman implements Policeman {108 109     public void action(Citizen ci) {110         String help = ci.getHelp();111         if (help.equals("normal")) {112             System.out.println("黄埔警察:一切正常, 不用出动");113         }114         if (help.equals("unnormal")) {115             System.out.println("有犯罪行为, 黄埔警察出动!");116         }117     }118 }119 class TianHePoliceman implements Policeman {120 121     public void action(Citizen ci) {122         String help = ci.getHelp();123         if (help.equals("normal")) {124             System.out.println("天河警察:一切正常, 不用出动");125         }126         if (help.equals("unnormal")) {127             System.out.println("有犯罪行为, 天河警察出动!");128         }129     }130 }

 

环境:JDK1.6,MAVEN,tomcat,eclipse

源码地址:http://files.cnblogs.com/files/xiluhua/designPattern.rar

欢迎亲们评论指教。

转载地址:http://lkbvl.baihongyu.com/

你可能感兴趣的文章
【iCore4 双核心板_FPGA】例程九:锁相环实验——锁相环使用
查看>>
05Hadoop-左外连接
查看>>
python3 识别图片文字
查看>>
文字在div中水平和垂直居中的的css样式
查看>>
cocos creator protobuf实践
查看>>
精品素材:推荐15套非常漂亮的 iOS 图标素材
查看>>
使用HttpSessionListener接口监听Session的创建和失效
查看>>
android 国际化
查看>>
10000单词积累,从今天开始(待续)。。。
查看>>
转Spring+Hibernate+EHcache配置(三)
查看>>
使用现有ECC数据库进行安装或者恢复系统
查看>>
发布我的高性能纯C#图像处理基本类,顺便也挑战一下极限。:)
查看>>
在Ubuntu上单机安装Hadoop
查看>>
安装SharePoint2010出现“Could not find stored procedure ‘sp_dboption’.”的解决方法
查看>>
存储过程中执行动态Sql语句
查看>>
SQL Server里简单参数化的痛苦
查看>>
《逻辑与计算机设计基础(原书第5版)》——1.9 习题
查看>>
停止去人性化吧 SOC应找回人的元素
查看>>
数据中心托管节约企业成本
查看>>
Spark大数据处理系列之Machine Learning
查看>>