大家好,今天小编来为大家解答深入解析:软件开发的经典设计模式全解这个问题,很多人还不知道,现在让我们一起来看看吧!
基本概念
观察者模式是对象的行为模式,也称为发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、Source/Listener 模式或Dependents 模式。
观察者模式定义了一对多的依赖关系,允许多个观察者对象同时监视某个主体对象。当这个主题对象改变状态时,它会通知所有观察者对象,以便它们能够自动更新自己。
类图
观察者模式涉及的角色有:
1.抽象主(Subject)角色:抽象主题角色存储对集合中观察者对象(例如ArrayList对象)的所有引用。每个主题可以有任意数量的观察者。抽象主题提供了添加和删除观察者对象的接口。抽象主体角色也称为抽象可观察角色。
2、具体主题(ConcreteSubject)角色:存储具体观察者对象中的相关状态;当特定主体的内部状态发生变化时,会向所有注册的观察者发送通知。具体主体角色也称为具体可观察角色。
3.抽象观察者(Observer)角色:定义了一个接口,供所有特定观察者在收到主题通知时进行自我更新。该接口称为更新接口。
4、具体观察者(ConcreteObserver)角色:存储与主体状态一致的状态。具体观察者角色实现抽象观察者角色所需的更新接口,以便协调其自身状态与主体的状态图像。如果需要,具体观察者角色可以维护对具体主题对象的引用。
Paste_Image.png
实例
Subject抽象类包com.nemo.design.observer;
导入java.util.ArrayList;
导入java.util.List;
/**
* 由nemo 于2015 年11 月15 日创建。
*/
公共抽象类主题{
Listobservers=new ArrayList();
公共无效addObserver(观察者观察者){
观察者.add(观察者);
}
公共无效removeObserver(观察者观察者){
观察者.删除(观察者);
}
公共无效notifyObserver(){
for(观察者观察者: 观察者){
观察者.doWork();
}
}
公共抽象无效变化(字符串newState);
}ConcreteSubjec类包com.nemo.design.observer;
导入java.util.ArrayList;
导入java.util.List;
/**
* 由nemo 于2015 年11 月15 日创建。
*/
公共抽象类主题{
Listobservers=new ArrayList();
公共无效addObserver(观察者观察者){
观察者.add(观察者);
}
公共无效removeObserver(观察者观察者){
观察者.删除(观察者);
}
公共无效notifyObserver(){
for(观察者观察者: 观察者){
观察者.doWork();
}
}
公共抽象无效变化(字符串newState);
}Observer接口包com.nemo.design.observer;
/**
* 由nemo 于2015 年11 月15 日创建。
*/
公共接口观察者{
公共无效doWork();
}ConcreteObserver包com.nemo.design.observer;
/**
* 由nemo 于2015 年11 月15 日创建。
*/
公共类ConcreteObserver 实现Observer {
字符串名称;
公共ConcreteObserver(字符串名称){
this.name=名称;
}
公共无效doWork() {
System.out.println("Observer" + this.name + "发现更改");
【深入解析:软件开发的经典设计模式全解】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
设计模式是什么来着?好像听说过好久了...
有16位网友表示赞同!
学习设计模式感觉很抽象啊,有没有简单一点的方式理解?
有14位网友表示赞同!
我想学习一些常用设计模式,可以推荐点书吗?
有6位网友表示赞同!
项目里什么时候要用到这些设计模式呢?实用性很重要!
有15位网友表示赞同!
我刚入门编程,不太懂这些高阶的概念,先好好夯实基础吧!
有8位网友表示赞同!
设计模式能够提高代码的可读性和可维护性吗?
有11位网友表示赞同!
有没有什么工具可以帮我们应用设计模式的?
有20位网友表示赞同!
听起来很有深度啊,以后试试在代码里用这些模式!
有13位网友表示赞同!
设计模式学习起来会很枯燥吗?
有17位网友表示赞同!
感觉学了设计模式之后就能写出高大上代码来了!
有11位网友表示赞同!
设计模式主要针对什么类型的项目呢?
有16位网友表示赞同!
我想知道一些常见的设计模式,有几个具体的例子?
有5位网友表示赞同!
学习设计模式的好处有哪些?
有14位网友表示赞同!
有没有讲设计模式的视频教程推荐?
有11位网友表示赞同!
会不会有哪种场景不需要用那么多设计模式呢?
有12位网友表示赞同!
听说过装饰模式,就是说可以动态地改变类的行为吗?
有16位网友表示赞同!
感觉像是一个非常成熟的技术体系...
有6位网友表示赞同!
还是得好好理解这些概念啊!
有14位网友表示赞同!
学习设计模式这方面的东西,可以帮助我们更好地理解代码结构?
有17位网友表示赞同!
有没有一些案例分析能让我们更有感性地理解设计模式?
有18位网友表示赞同!