spring-设计模式

创建型模式

结构型模式

行为型模式

策略模式

首先,定义一个策略接口:

java 复制代码
public interface Strategy {
    public void draw(int radius, int x, int y);
}

然后定义具体的几个策略:

java 复制代码
public class RedPen implements Strategy {
    @Override
    public void draw() {
        System.out.println("red pen");
    }
}

public class YellowPen implements Strategy {
    @Override
    public void draw() {
        System.out.println("yellow pen");
    }
}

public class BluePen implements Strategy {
    @Override
    public void draw() {
        System.out.println("blue pen");
    }
}

使用策略的类:

java 复制代码
public class Context {
    private Strategy strategy;
    
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    
    public int excuteDraw(int radius, int x, int y) {
        return strategy.drwa(radius, x, y);
    }
}

客户端演示:

java 复制代码
public static void main(String[] args) {
    
    // 使用蓝笔画画
    Context context = new Context(new BluePen());
    context.excuteDraw(84, 62, 063);
}

图示:

观察者模式

首先,定义主题,每个主题需要持有观察者列表的引用,用于在数据变更的时候通知各个观察者:

java 复制代码
public Class Subject {
    private List<Observer> observerList = new ArrayList<>();
    private int state;
    
    public int getState() {
        return state;
    }
    public void setState(int state) {
        this.state = state;

        // 数据变更 通知观察者们
        notifyAll();
    }
    
    // 注册观察者
    public void addObserver(Observer observer) {
        observerList.add(observer);
    }
    
    // 通知观察者们
    public void notifyAll() {
        for (Observer observer : observerList) {
            observer.update();
        }
    }
}

定义观察者接口:

java 复制代码
public abstract class Observer {
    protected Subject subject;
    public abstract void update();
}

定义具体的2个观察者类:

java 复制代码
// 二进制观察者
public class BinaryObserver extends Observer {

    public BinaryObserver(Subject subject) {
        this.subject = subject;
        this.subject.addObserver(this);
    }
    
    // 本方法由主题类在数据变更时进行调用
    @Override
    public void update() {
        System.out.println("数据变化!对应的二进制变为:result");
    }
    
}


// 十六进制观察者
public class HexaObserver extends Observer {

    public HexaObserver(Subject subject) {
        this.subject = subject;
        this.subject.addObserver(this);
    }

    @Override
    public void update() {
        System.out.println("数据变化!对应的十六进制变为:result");
    }

}

客户端演示:

java 复制代码
public static void main(String[] args) {
    
    // 先定义一个主题
    Subject subject = new Subject();
    
    // 定义观察者
    new BinaryObserver(subject);
    new HexaObserver(subject);
    
    // 模拟数据变更 这个时候 观察者们的uodate方法会被调用
    subject.setState(8462063);
}
相关推荐
Flittly15 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
小强库计算机毕业设计20 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
毕设单片机1 天前
顺顺救助站流浪动物领养系统的设计与实现46649----SpringBoot + Vue.js + MySQL|领养审核、寻宠发布、救助站点与动物论坛协同
java·spring boot·管理系统·流浪动物
云烟成雨TD1 天前
Micrometer 系列【63】统一观测:基于 Spring Boot 的生产级演示案例 | 基于 OTLP 集成 Prometheus + Jaeger
spring boot·云原生·prometheus
csdn2015_1 天前
springboot +mybatis 查询myql开启程序级别缓存
spring boot·缓存·mybatis
chuan.bai1 天前
Java RAG 实战(第 8 篇):Spring Boot RAG 查询 API
java·spring boot·贪心算法
vx-程序开发1 天前
springboot旅游推介平台---附源码24175
java·spring boot·python·spring cloud·eclipse·django·idea
小蒜学长1 天前
“喵汪联盟”宠物领养系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·宠物
xbgRS1 天前
springboot的自动装配
java·spring boot
嘻哈∠※1 天前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端