设计模式对比及应用场景

设计模式的选择通常取决于特定的设计问题和上下文环境。以下是对一些设计模式的对比和它们在不同应用场景下的使用示例:

设计模式对比及应用场景

单例模式:

应用场景:配置管理器、线程池、数据库连接池等。

特点:确保全局只有一个实例,提供统一访问点。

策略模式:

应用场景:算法动态切换,如排序算法、优惠促销策略等。

特点:定义一系列可互换的算法,可动态更改对象的行为。

代理模式:

应用场景:访问控制、延迟初始化、AOP底层实现等。

特点:为其他对象提供一种代理,以控制对它的访问。

观察者模式:

应用场景:事件监听、用户界面更新、Zookeeper监听器等。

特点:定义对象间的一对多依赖关系,当对象状态改变时,所有依赖它的对象都会得到通知。

责任链模式:

应用场景:审批流程、网关鉴权等。

特点:使多个对象都有机会处理请求,避免请求发送者与接收者之间的耦合。

装饰器模式:

应用场景:动态添加功能,如缓存装饰器、日志装饰器等。

特点:动态地给一个对象添加额外的职责。

模板方法模式:

应用场景:需要固定算法骨架,同时允许子类定制某些步骤,如JdbcTemplate。

特点:在方法中定义算法骨架,延迟一些步骤的实现。

线程池的单例模式实现

单例模式确保全局只有一个线程池实例,适用于资源池管理。

电商优惠促销策略模式实现

策略模式允许根据不同的促销活动动态切换优惠策略。

// 优惠策略接口

interface PromotionStrategy {

double applyDiscount(double originalPrice);

}

// 具体优惠策略

class PercentagePromotion implements PromotionStrategy {

@Override

public double applyDiscount(double originalPrice) {

return originalPrice * 0.8; // 打8折

}

}

// 促销上下文

class PromotionContext {

private PromotionStrategy strategy;

复制代码
public void setPromotionStrategy(PromotionStrategy strategy) {
    this.strategy = strategy;
}

public double getDiscountedPrice(double originalPrice) {
    return strategy.applyDiscount(originalPrice);
}

}

AOP底层代理模式实现

代理模式在AOP中用于创建代理对象,实现方法的前置或后置处理。

// 目标对象

class TargetObject {

public void performTask() {

System.out.println("执行任务");

}

}

// 代理对象

class ProxyObject implements ITarget {

private TargetObject target;

复制代码
public ProxyObject(TargetObject target) {
    this.target = target;
}

@Override
public void performTask() {
    // 前置处理
    System.out.println("前置处理");
    target.performTask();
    // 后置处理
    System.out.println("后置处理");
}

}

RedisTemplate、JdbcTemplate模板模式实现

模板模式在JdbcTemplate和RedisTemplate中用于定义操作数据库或Redis的固定步骤。

// 模板类

class JdbcTemplate {

public void execute(String sql) {

System.out.println("执行SQL: " + sql);

// 其他数据库操作

}

}

Zookeeper监听器观察者模式实现

观察者模式在Zookeeper中用于监听节点变化,实现分布式协调。

// 观察者接口

interface Watcher {

void process(WatchedEvent event);

}

// Zookeeper客户端

class ZookeeperClient {

public void registerWatcher(Watcher watcher) {

// 注册监听器

}

}

微服务网关鉴权责任链模式实现

责任链模式在微服务网关中用于实现多级鉴权。

// 鉴权处理器接口

interface Authenticator {

boolean authenticate(Request request, Authenticator next);

}

// 具体鉴权处理器

class PasswordAuthenticator implements Authenticator {

@Override

public boolean authenticate(Request request, Authenticator next) {

// 密码鉴权逻辑

if (/* 鉴权成功 */) {

return true;

} else if (next != null) {

return next.authenticate(request, null);

}

return false;

}

}

多级缓存架构装饰器模式实现

装饰器模式在多级缓存架构中用于动态添加缓存层。

// 缓存接口

interface Cache {

Object get(Object key);

void set(Object key, Object value);

}

// 具体缓存实现

class SimpleCache implements Cache {

@Override

public Object get(Object key) {

return null; // 获取缓存

}

复制代码
@Override
public void set(Object key, Object value) {
    // 设置缓存
}

}

// 缓存装饰器

class LoggingCacheDecorator implements Cache {

private Cache cache;

复制代码
public LoggingCacheDecorator(Cache cache) {
    this.cache = cache;
}

@Override
public Object get(Object key) {
    System.out.println("访问缓存");
    return cache.get(key);
}

@Override
public void set(Object key, Object value) {
    cache.set(key, value);
    System.out.println("设置缓存");
}

}

每种设计模式都有其特定的使用场景和特点,合理选择和应用设计模式可以提高代码的可读性、可维护性和灵活性。

相关推荐
禅思院1 小时前
前端请求取消与调度完全指南:从 AbortController 到企业级优先级架构
前端·设计模式·前端框架
小bo波1 小时前
用匿名内部类优雅地计算方法执行时间
java·设计模式·性能测试·模板方法模式·lambda·代码优化·匿名内部类
写代码的小阿帆2 小时前
行为型设计模式之观察者(发布-订阅)模式
设计模式
王_teacher3 小时前
23种设计模式全解析(GoF 设计模式)
设计模式·软考·软件设计师·软考中级
阿坤带你走近大数据4 小时前
分别介绍下java主流的开发框架、设计模式与对应编程语言的高级特性
java·开发语言·设计模式
geovindu4 小时前
go: Coroutines Pattern
开发语言·后端·设计模式·golang·协程模式
Anastasiozzzz5 小时前
构建健壮软件系统的基石:深入解析面向对象设计七大原则
开发语言·javascript·设计模式·ecmascript
qq_297574671 天前
设计模式系列文章(基础篇第19篇):中介者模式——封装交互关系,解耦网状依赖
设计模式·交互·中介者模式
AI大法师1 天前
老牌媒体怎么从“出版物更新”走到“品牌系统升级”
大数据·人工智能·设计模式·新媒体运营
野生技术架构师1 天前
Java 23 种设计模式:从踩坑到精通 —— 开篇及系列介绍
java·开发语言·设计模式