设计模式对比及应用场景

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

设计模式对比及应用场景

单例模式:

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

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

策略模式:

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

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

代理模式:

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

}

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

相关推荐
float_六七2 小时前
Java——单例类设计模式
java·单例模式·设计模式
老菜鸟的每一天2 小时前
创建型模式-Prototype 模式(原型模式)
设计模式·原型模式
码熔burning3 小时前
(五)趣学设计模式 之 建造者模式!
java·设计模式·建造者模式
黑不溜秋的11 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
付聪121013 小时前
策略模式介绍和代码示例
设计模式
ThereIsNoCode14 小时前
「软件设计模式」状态模式(State)
设计模式·状态模式
菜鸟一枚在这20 小时前
深入理解设计模式之代理模式
java·设计模式·代理模式
mjr1 天前
设计模式-Java
java·设计模式
yuanpan1 天前
23种设计模式之《组合模式(Composite)》在c#中的应用及理解
开发语言·设计模式·c#·组合模式
FLZJ_KL1 天前
【设计模式】【创建型模式】单例模式(Singleton)
java·单例模式·设计模式