public class Watched
{
Watcher watcherList;
public synchronized void addWatcher(Watcher w)
{
if (w == null)
{
return;
}
watcherList =WatcherMultiCaster.add(watcherList,w);
}
public synchronized void removeWatcher(Watcher s) {
if (s == null) {
return;
}
watcherList = WatcherMultiCaster.remove(watcherList, s);
}
public void processAction(String msg){
Watcher w = watcherList;
if(w!=null){
w.action(msg);
}
}
}
//---------------------------------------------------------------------------------------------------------
public interface Watcher //观察者接口
{
public void action(String msg);
}
//---------------------------------------------------------------------------------------------------------
public class WatcherMultiCaster implements Watcher //铸造器
{
protected final Object a,b;
protected WatcherMultiCaster(Object a,Object b){
this.a = a;
this.b = b;
}
public static Watcher add(Watcher a,Watcher b){
return (Watcher) addInternal(a,b);
}
public static Watcher remove(Watcher w,Watcher oldw){
return (Watcher)removeInternal(w,oldw);
}
protected static Object addInternal(Object a,Object b){
if (a == null) return b;
if (b == null) return a;
return new WatcherMultiCaster(a, b);
}
protected static Object removeInternal(Object w, Object oldw)
{
if (w == oldw || w == null) {
return null;
} else if (w instanceof WatcherMultiCaster) {
return ((WatcherMultiCaster)w).remove(oldw);
} else {
return w;
}
}
private Object remove(Object oldw)
{
if (oldw == a) return b;
if (oldw == b) return a;
Object a2 = removeInternal(a, oldw);
Object b2 = removeInternal(b, oldw);
if (a2 == a && b2 == b) {
return this;
}
return addInternal(a2, b2);
}
@Override
public void action(String msg)
{
((Watcher)a).action(msg);
((Watcher)b).action(msg);
}
}
//---------------------------------------------------------------------------------------------------------
public class WatcherA implements Watcher
{
@Override
public void action(String msg)
{
System.out.println("WatcherA recived:"+msg);
}
}
public class WatcherB implements Watcher
{
@Override
public void action(String msg)
{
System.out.println("WatcherB recived: "+msg);
}
}
public class WatcherC implements Watcher
{
@Override
public void action(String msg)
{
System.out.println("WatcherC recived:"+msg);
}
}
//---------------------------------------------------------------------------------------------------------
public class ObserverTest
{
/**
* @param args
*/
public static void main(String[] args)
{
Watched watched = new Watched();
WatcherA wa = new WatcherA();
WatcherB wb = new WatcherB();
WatcherC wc = new WatcherC();
watched.addWatcher(wa);
watched.addWatcher(wb);
watched.addWatcher(wc);
watched.processAction("Stand up!");
watched.removeWatcher(wb);
watched.processAction("Sit down");
watched.addWatcher(new WatcherC());
watched.processAction("Sing!");
}
}
分享到:
相关推荐
在本实验中,我们使用观察者模式实现了一个学校公布信息系统。我们定义了一个主题接口 `Notice`,它提供了发布信息的方法。然后,我们定义了三个观察者类:`Student`、`Teacher` 和 `Administrator`。每个观察者类都...
在本实验中,我们将使用观察者模式实现学校发布信息的功能,学生、老师和行政人员可以订阅学校发布的信息,并在信息变化时得到通知。 在观察者模式中,我们定义了一个主题接口 Notice 和观察者接口 Observer,...
在Java中,观察者模式的实现基于Java.util.Observable和Java.util.Observer接口。 Java的观察者模式通常包含两个主要角色: 1. **主题(Subject)**:这是被观察的对象,它可以是具体的类或抽象类。主题维护了一个...
在实际应用中,观察者模式可以与其他设计模式结合,如组合模式来处理树形结构的观察者,或者策略模式来实现不同的处理策略。此外,Java和.NET等现代编程语言提供了内置的事件和委托机制,简化了观察者模式的实现,但...
python 项目里常用的设计模式 单例模式 组合模式 策略模式 抽象工厂 代理模式 工厂模式 观察者模式简单工厂 建造者模式 模板模式 桥接多维度 桥接模式 适配器模式 外观模式 享元模式 责任链组合模式
Java实验中的策略模式、观察者模式和组合模式是软件设计中常见的面向对象设计模式,它们在实际开发中具有广泛的应用。下面将详细解释这三个模式及其在实验中的具体应用。 1. **策略模式**: 策略模式是一种行为...
【Java 实验:策略模式、观察者模式和组合模式】 实验目标主要集中在理解和应用三种设计模式:策略模式、观察者模式和组合模式。这三种模式是面向对象设计中常用且重要的设计模式,它们有助于提高代码的灵活性、可...
实验要求使用策略模式、观察者模式和组合模式来实现一个二维数组的数据显示和编辑。当用户在用户界面上移动滑块改变数组值时,饼状图和柱状图会根据二维数组每一维的总和实时更新。 实验环境主要包括PC微机、DOS或...
### Java实验策略模式、观察者模式和组合模式详解 ...通过以上分析,我们可以清晰地了解到策略模式、观察者模式和组合模式在Java中的具体实现方式及其应用场景,这对于深入理解和掌握这些设计模式具有重要意义。
Java 实验中涉及了三种设计模式:策略模式、观察者模式和组合模式。这三种模式是面向对象设计中常见的行为模式,它们可以帮助我们构建更加灵活、可扩展且易于维护的代码。 1. **策略模式**: 策略模式是一种行为...
这里可以使用观察者模式实现。 **实验实例**: - **主题接口**:定义一个 `Subject` 接口,包括添加观察者、移除观察者以及通知观察者的抽象方法。 - **观察者接口**:定义一个 `Observer` 接口,包括更新状态的...
python 实现 观察者模式3(双向解耦 抽象观察者,抽象通知者) python 实现 观察者模式4(委托) python 实现 简单工厂模式 python 实现 命令模式 python 实现 模板方法模式 python 实现 桥接模式 python 实现 适配器...
java实验策略模式、观察者模式和组合模式.doc
java实验:策略模式、观察者模式和组合模式.pdf
**Android设计模式之观察者模式** 观察者模式(Observer Pattern)是软件设计模式中的行为模式之一,它在Android开发中有着广泛的应用。该模式的主要目的是定义对象之间的一种一对多依赖关系,当一个对象的状态发生...
4. **组合(Composition)**:观察者模式中的关系是通过组合而不是继承建立的。这意味着主题可以动态地添加或移除观察者,而无需更改主题或观察者的代码,这遵循了组合复用原则。 5. **注册与通知**:当一个新的...
抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子模式、中介者模式、备忘录模式、...
本篇将详细讲解工厂模式和观察者模式,并通过C#语言实现的示例来帮助初学者理解这两种模式的核心概念。 1. 工厂模式: 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,将对象的创建过程封装起来,...
观察者模式是软件设计模式中的一种行为模式,它在Java中有着广泛的应用。该模式的主要目的是定义对象...在Java中,通过`Observable`和`Observer`的组合,我们可以轻松地实现观察者模式,提高代码的复用性和可维护性。