设计模式对比及应用场景

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

设计模式对比及应用场景

单例模式:

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

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

策略模式:

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

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

代理模式:

应用场景:访问控制、延迟初始化、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("设置缓存");
}

}

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

相关推荐
WaaTong3 小时前
《重学Java设计模式》之 单例模式
java·单例模式·设计模式
WaaTong5 小时前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
霁月风5 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
暗黑起源喵8 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
wrx繁星点点15 小时前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
金池尽干17 小时前
设计模式之——观察者模式
观察者模式·设计模式
也无晴也无风雨17 小时前
代码中的设计模式-策略模式
设计模式·bash·策略模式
捕鲸叉1 天前
MVC(Model-View-Controller)模式概述
开发语言·c++·设计模式
wrx繁星点点1 天前
享元模式:高效管理共享对象的设计模式
java·开发语言·spring·设计模式·maven·intellij-idea·享元模式
凉辰1 天前
设计模式 策略模式 场景Vue (技术提升)
vue.js·设计模式·策略模式