java 23种设计模式之观察者模式(纯java后端代码演示,示例开箱即用)

574 篇文章 4 订阅

java 23种设计模式之观察者模式

前言介绍:

  • 设计模式简介:总共有23种设计模式(分为三大类:创建型、结构型、行为型)模式
  • 创建型(5种):单列模式、抽象工厂模式、建造者模式、工厂方法模式、原型模式
  • 结构型(7种):适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式
  • 行为型(11种):模板方法模式、命令模式、迭代子模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、 策略模式、职责链模式(责任链模式)、访问者模式。
  • 除了以上23种设计模式之外其实还有两大类:并发型模式和线程池模式。

此博文仅介绍 观察者模式。
1.写一个观察者类

package com.jidongcloud.observer;
public class Observer {
/**
 * 观察者模式介绍实现思想
 * 学生刚开始需要一个认真学习的状态
 * 当学生认真学习的状态改变,在上课吃辣条时
 * 老师观察到这个变化,就会请家长
 * 学生需要一个状态改变的方法,一个添加观察者老师的方法,还要有一个通知观察者自己状态改变的方法,并且再状态改变后立即让观察者老师 叫家长
 */
    String name;
    Observer(){}

    @Override
    public String toString() {
        return "Observer{" +
                "name='" + name + '\'' +
                '}';
    }
    //构造方法初始化
    public Observer(String name) {
        this.name = name;
    }
    //观察者成员方法
    public  void  look(String name,String state){
        System.out.println("我是"+this.name +",因为"+name+"在"+state+",我要叫家长!");
    }

}

2.写一个学生类

package com.jidongcloud.observer;
import java.util.*;
/**
 * ClassName:Student
 * PackageName:com.jidongcloud.observer
 * Description:
 *
 * @date:2020/4/22 11:23
 * @author:13812536906
 */
public class Student {
    String name;
    String state;
    List<Observer> observerList ;
   public  Student(){}
    public Student(String name) {
        this.name = name;
        this.state="学习";
        this.observerList=new ArrayList<Observer>();
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
        //只要状态发生变化,通知观察者,数据改变了
        this.tell();
    }
    public void attach(Observer observer){
         this.observerList.add(observer);
    }
    //通知方法
    public void tell() {
        for (Observer observer : observerList) {
            observer.look(this.name,this.state);
        }
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", state='" + state + '\'' +
                ", observerList=" + observerList +
                '}';
    }
}

3.写一个测试类

package com.jidongcloud.observer;

/**
 * ClassName:Test
 * PackageName:com.jidongcloud.observer
 * Description:
 *
 * @date:2020/4/22 14:15
 * @author:13812536906
 */
public class Test {
    public static void main(String[] args) {
        //创建2个观察者对象
        Observer observer=new Observer("班主任");
        Observer observer2=new Observer("教导主任");
        //创建被观察对象
//        Student s=new Student("小明");
        Student s=new Student("小花");
        //被观察对象添加观察对象
        s.attach(observer);
        s.attach(observer2);
        //先获取最开始的状态
        System.out.println(s.name+"之前在"+s.getState());
        //状态改变
//        s.setState("上课吃炸鸡");
        s.setState("喝饮料");
        System.out.println(s.name+"目前在"+s.getState());

    }
}

以下是控制台输出结果
在这里插入图片描述

程序员就该用代码交流!Hello,world!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值