java 观察者设计模式_Java设计模式之【观察者设计模式】言简意赅

观察者设计模式,是java23种设计模式中比较经典也是比较常用之一。好多产品与优秀的技术框架多多少少都用到了观察者设计模式。

设计模式的出现,是为了阐述一种编程和设计思想。使其代码结构具有灵魂~

概念图示

07674f56d01974b12f51509496840db4.png

以上拿新闻联播广播来举例的,定义新闻联播为一个具体的主题,CCTV央视新闻发布中心为具体的新闻发布者。当每天晚上7点的时候,CCTV央视新闻发布中心就会向所有注册进来的卫视频道做新闻广播。

不同的卫视就是具体的观察者(订阅者),通过注册到新闻发布中心完成新闻的订阅。当新闻发布中心有新闻广播时,就会收到相应的信息。

代码实现新闻联播抽象接口

定义新闻发布的一些行为

/**

* 抽象的发布者

* 定义发布者就有的行为和功能

*/

public interface INews {

//提供具体的卫视频道进行注册

public void registerTV(ITV tv);

//删除一个卫视频道

public void removeTV(ITV tv);

//广播新闻

public void broadcast(String msg);

}电视台卫视抽象接口

定义卫视频道的一些行为

/**

* 抽象的卫视电视台

* 用于定义电视台的行为和功能

*/

public interface ITV {

//收听广播

public void radio(String msg);

}

CCTV新闻联播中心-具体的新闻发布者

具体的新闻生产者,广播者

public class CCTVNewsCenter implements INews{

//维护所有注册进来的电视台卫视

private List itvList = null;

public CCTVNewsCenter(){

itvList = new ArrayList<>();

}

//添加一个卫视到集合中

@Override

public void registerTV(ITV tv) {

if(!itvList.contains(tv)){

itvList.add(tv);

}

}

//删除一个卫视

@Override

public void removeTV(ITV tv) {

if(itvList.contains(tv)){

itvList.remove(tv);

}

}

//向所有卫视广播新闻

@Override

public void broadcast(String msg) {

for (ITV tv : itvList){

tv.radio(msg);

}

}

}

具体的收听卫视实现者(观察者)

/**

* 河北卫视

*/

public class HeBeiTV implements ITV {

@Override

public void radio(String msg) {

System.out.println("-----------这里是河北卫视------------");

System.out.println(msg);

}

}

/**

* 山东卫视

*/

class ShanDongTV implements ITV{

@Override

public void radio(String msg) {

System.out.println("-----------这里是山东卫视------------");

System.out.println(msg);

}

}

/**

* 辽宁卫视

*/

class LiaoNingTV implements ITV{

@Override

public void radio(String msg) {

System.out.println("-----------这里是辽宁卫视------------");

System.out.println(msg);

}

}

测试结论

public class Test {

public static void main(String[] args) {

//创建CCTV中心实例

INews iNews = new CCTVNewsCenter();

//创建三个卫视频道

ITV heBei = new HeBeiTV();

ITV shanD = new ShanDongTV();

ITV liaoN = new LiaoNingTV();

//将三个卫视频道注册到CCtV新闻中心

iNews.registerTV(heBei);

iNews.registerTV(shanD);

iNews.registerTV(liaoN);

//CCTV频道开始广播新闻

iNews.broadcast("现在时刻7点整,下面开始播报今天的新闻联播!");

}

}输出

-----------这里是河北卫视------------

现在时刻7点整,下面开始播报今天的新闻联播!

-----------这里是山东卫视------------

现在时刻7点整,下面开始播报今天的新闻联播!

-----------这里是辽宁卫视------------

现在时刻7点整,下面开始播报今天的新闻联播!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值