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);
}
相关推荐
兜兜风d'31 分钟前
RabbitMQ 持久性详解
spring boot·分布式·rabbitmq·1024程序员节
问道飞鱼2 小时前
【微服务组件】Springboot结合Dubbo实现RPC调用
spring boot·微服务·rpc·dubbo
I'm Jie2 小时前
(二)Gradle 依赖仓库及安全凭证配置
java·spring boot·spring·gradle·maven
李少兄3 小时前
记一次 Spring Boot 项目中 Redis 工具类的重构实践
spring boot·redis·重构
摇滚侠4 小时前
Spring Boot3零基础教程,生命周期启动加载机制,笔记64
spring boot·笔记
摇滚侠5 小时前
Spring Boot3零基础教程,整合 Redis,笔记69
spring boot·redis·笔记
bug攻城狮5 小时前
Spring Boot 2.6+ 整合 PageHelper 启动报错:循环依赖解决方案全解析
java·spring boot·后端
摇滚侠6 小时前
Spring Boot3零基础教程,生命周期监听,自定义监听器,笔记59
java·开发语言·spring boot·笔记
摇滚侠7 小时前
Spring Boot3零基础教程,事件驱动开发,设计登录成功后增加积分记录信息功能,笔记61
java·spring boot·笔记·后端
这周也會开心8 小时前
SpringBoot的搭建方式
java·spring boot·后端