java常用设计模式-观察者模式

观察者模式:

设计到的角色:

主题:是一个接口,同时必须包含一个观察者列表,必须有添加,删除,通知观察者的方法

具体主题:主题的实现类

观察者:也是接口,接口中需要定义接到通知之后的操作

具体观察者:观察者的实现类,同时观察者要订阅主题则需要注册,即必须要添加到主题的观察者列表中,取消订阅则是删除

当主题的状态发生变化的时候,所有的观察者都得到通知

主题:

package com.design2;

public interface SubjectInterface {
void add(ObserverInterface observer);
void delete(ObserverInterface observer);
void notifyObserver();
void giveMess(String mess);
}

具体主题:

package com.design2;

import java.util.ArrayList;
import java.util.List;

public class Subject implements SubjectInterface {
List<ObserverInterface> observerList;
String mess;
boolean isNotify;
public Subject(){
observerList = new ArrayList<ObserverInterface>();
mess = "";
isNotify = false;
}
@Override
public void add(ObserverInterface observer) {
if (observer != null && !observerList.contains(observer)) {
observerList.add(observer);
}

}

@Override
public void delete(ObserverInterface observer) {
if (observerList.contains(observer)) {
observerList.remove(observer);
}
}

@Override
public void notifyObserver() {
if (isNotify) {
for (ObserverInterface object : observerList) {
object.update(mess);
}
}
}

@Override
public void giveMess(String message) {
if (mess.equals(message)) {
isNotify = false;
} else {
mess = message;
isNotify = true;
}
}
}

观察者接口:

package com.design2;

public interface ObserverInterface {
void update(String mess);
}

观察者:

package com.design2;

public class Observer implements ObserverInterface {
private String name;
private SubjectInterface subject;
public Observer(String name,SubjectInterface subject){
this.name = name;
subject.add(this);
}

@Override
public void update(String mess) {
System.out.println(name + "接受的消息:" + mess);
}

}

测试:

package com.design2;

public class Application {
public static void main(String[] args) {
SubjectInterface subject = new Subject();
ObserverInterface zhangsan = new Observer("zhangsan", subject);
ObserverInterface lisi = new Observer("zhangsan", subject);
subject.giveMess("123");
subject.notifyObserver();
subject.giveMess("123");
subject.notifyObserver();
subject.giveMess("456");
subject.notifyObserver();
}
}

原文地址:https://www.cnblogs.com/xiaokang-share/p/9270909.html

时间: 2024-10-12 02:30:03

java常用设计模式-观察者模式的相关文章

Java常用设计模式——观察者模式

观察者模式又叫做发布-订阅-模式.模型-视图-模式.源-监听器-模式或者从属者模式.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己,它是一种行为型模式 观察者模式所涉及的角色有: 抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者.抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又

java常用设计模式之 工厂模式

工厂模式: 定义 一个用于创建对象的接口,让子类决定实例化哪一个类. 一句话概括: 是一个类的实例化延迟到其子类.     适用于 以下情况: ①:当一个类 ,不知道它所必须创建的对象的类的时候. ②:当一个类,希望由它的子类来指定它所创建的对象的时候. ③:当类将创建对象的职责给多个帮助子类中的一个,并且希望将哪一个帮助子类是代理这一信息局部化的时候. 说明: ① Product :定义工厂方法所创建的对象的接口. ② ConcreteProduct:实现Product 接口. ③ Creat

java常用设计模式(一)单例模式

第一次写博客,也是第一篇,从单例模式开始,不足之处,望各位看官海涵. 简介 首先我们都知道单例模式是java常用的23种设计模式之一,它的用途可谓是非常广泛.它的核心就在于单实例,即整个环境中该类有且只能有一个对象.而java创建实例的方式已知的有四种,分别是通过new.clone.反射或者序列化这四种方式去创建实例,怎样保证单例呢,下面且听我一一道来. 单例模式的常见写法: 1.基础饿汉式单例 优点: 类加载时就去初始化,没有线程安全问题,不能通过new创建实例 缺点: ①.能通过反射或者序列

java常用设计模式

一个程序员对设计模式的理解: "不懂"为什么要把很简单的东西搞得那么复杂. 后来随着软件开发经验的增加才开始明白我所看到的"复杂"恰恰就是设计模式的精髓所在,我所理解的"简单"就是一把钥匙开一把锁的模式, 目的仅仅是着眼于解决现在的问题,而设计模式的"复杂"就在于它是要构造一个"万能钥匙",目的是提出一种对所有锁的开锁方案. 在真正理解设计模式之前我一直在编写"简单"的代码.这个&quo

JAVA常用设计模式整理

设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目的仅仅是着眼于解决现在的问题,而设计模式的“复杂”就在于它是要构造一个“万能钥匙”,目的是提出一种对所有锁的开锁方案.在真正理解设计模式之前我一直在编写“简单”的代码.这个“简单”不是功能的简单,而是设计的简单.简单的设计意味着缺少灵活性,代码很钢硬,只在这个项目里有用,拿到其它的项目中

java常用设计模式链接

转自:作者:dreamOwn     https://www.cnblogs.com/wabi87547568/p/5280905.html Java中常用的设计模式 1.单例模式 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 总之,选择单例模式就是为了避免不一致状态,避免政出多头. 推荐链接:http://blog.csdn.net/

java常用设计模式-单例模式

java设计模式系列之单例模式 单例模式定义 一个类有且仅有一个实例,并且自行实例化向整个系统提供. 单例模式作用 简单来说,就是在整个程序运行的生命期中,任何一个时刻,单例类的实例都只有一个(当然也可以一个都没有). 如何保证对象的唯一性 思想:(1)不让其他程序创建该类对象: (2)在本类中创建该类对象: (3)创建一个对外提供的方法,可以让其他类进行调用. 步骤:(1)因为创建对象的时候都要初始化构造函数,将该类的构造函数私有化,其他程序就无法再创建该类对象: (2)就是在本类中创建本类对

IOS常用设计模式——观察者模式(IOS开发)

观察者模式(Observer)也叫发布/订阅模式(Publish/Subscribe) - 问题: 在软件设计中,经常需要对一个对象的状态改变,从而引起很多对象的状态发生改变.这个特点很明显,复用性强,而且对象之间匿名通信.观察者模式最为适合. - 原理: 举个例子: 包括四个角色: 1.抽象主题(subject).是个协议,是一个观察者集合容器,定义了添加,移除和对所有观察者发送通知(分别对应attach/detach/notifyObserver三个方法). 2.抽象观察者(Observer

For Exam (Java常用设计模式) 介绍

一 创建型模式 工厂模式(Factory): 定义一个用以创建对象的接口 抽象工厂模式(Abstract Factory): 提供一个创建一系列相关或相互依赖对象的接口 单例模式(Singleton): 保证一个类仅有一个实例,并提供一个访问它的全局控制点. 建造者模式(Builder): 将一个复杂对象的构建与它的表示分离. 二 结构型模式 适配器模式(Adapter): 将一个类的接口转换成客户希望的另一个接口. 合成模式(Composite): 合成模式将对象组合成树型结构以表示“部分--