java学习笔记-设计模式16(观察者模式)

意图

  定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。

public interface Observer {
    public void update();
}

  

public class Observer1 implements Observer {  

    @Override
    public void update() {
        System.out.println("observer1 has received!");
    }
}

  

public interface Subject {  

    /*增加观察者*/
    public void add(Observer observer);  

    /*通知所有的观察者*/
    public void notifyObservers();  

    /*自身的操作*/
    public void operation();
}

  

public abstract class AbstractSubject implements Subject {  

    private Vector<Observer> vector = new Vector<Observer>();
    @Override
    public void add(Observer observer) {
        vector.add(observer);
    }  

    @Override
    public void notifyObservers() {
        Enumeration<Observer> enumo = vector.elements();
        while(enumo.hasMoreElements()){
            enumo.nextElement().update();
        }
    }
}

  

public class MySubject extends AbstractSubject {  

    @Override
    public void operation() {
        System.out.println("update self!");
        notifyObservers();
    }  

}

  

public class ObserverTest {  

    public static void main(String[] args) {
        Subject sub = new MySubject();
        sub.add(new Observer1());  

        sub.operation();
    }  

}

  

时间: 2024-08-01 19:41:30

java学习笔记-设计模式16(观察者模式)的相关文章

Java学习笔记——设计模式之十.观察者模式

 观察者模式(Observer),定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. Subject类: 1 package cn.happy.design_pattern._10publishsubscribe; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Subject { 7 8 private

Java学习笔记——设计模式之一简单工厂

蜀道之难.难于上青天,侧身西望长咨嗟 --蜀道难 设计模式第一篇,简单工厂. 定义Operation类 1 package cn.no1.simplefactory; 2 3 public abstract class Operation { 4 5 private double numA; 6 private double numB; 7 8 public double getNumA() { 9 return numA; 10 } 11 12 13 public void setNumA(d

JAVA学习笔记-----设计模式之工厂模式

1.设计模式---------->工厂模式: Sender.java package me.ele.mytest; public interface Sender {    public void send(); } 2.MailSend package me.ele.mytest; public class MailSend implements Sender {     @Override     public  void send()     {         System.out.pr

Java学习笔记——设计模式之九.建造者模式

 建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Product类: 1 package cn.happy.design_pattern._09builder; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Product { 7 8 List<String> parts = new ArrayList<>(); 9 10

Java学习笔记——设计模式之五.工厂方法

水边一只青蛙在笑 --石头和水 工厂方法模式(Factory Method),定义了一个用于创建对象的接口,让实现类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 这里在简单和工厂的基础上写工厂: 先定义一个接口 1 package cn.no5.factorymethod; 2 3 import cn.no1.simplefactory.Operation; 4 5 public interface IFactory { 6 7 Operation CreateOperation(

Java学习笔记——设计模式之六.原型模式(浅克隆和深克隆)

That there's some good in this world, Mr. Frodo. And it's worth fighting for. 原型模式(prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 至于Object.clone()这里就不赘述了.文档看起来可能有些难懂,直接上代码反而更容易理解: 浅克隆: 1 package cn.happy.design_pattern._06prototype.shallowclone; 2 3 pub

Java学习笔记——设计模式之四.代理模式

To be, or not to be: that is the question. --<哈姆雷特> 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 上代码: 1 package cn.no4.proxy; 2 3 public interface IMakeMoney { 4 5 void makeMoney(); 6 } 1 package cn.no4.proxy; 2 3 public class Proxy implements IMakeMoney { 4

Java学习笔记——设计模式之七.模板方法模式

模板方法模式(TemplateMethod),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 结构图: 代码: 算法骨架: 1 package cn.happy.design_pattern._07templatemethod; 2 3 public abstract class AbstractClass { 4 5 public abstract void primitiveOperation1(); 6 pub

java学习笔记-设计模式20(备忘录模式)

意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到保存的状态. public class Original { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public Original(String value) { this.valu