设计模式对比及应用场景

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

设计模式对比及应用场景

单例模式:

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

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

策略模式:

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

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

代理模式:

应用场景:访问控制、延迟初始化、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 小时前
C++软件设计模式之外观(Facade)模式
c++·设计模式·外观模式
小小小妮子~1 小时前
框架专题:设计模式
设计模式·框架
先睡1 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
Damon_X9 小时前
桥接模式(Bridge Pattern)
设计模式·桥接模式
越甲八千14 小时前
重温设计模式--享元模式
设计模式·享元模式
码农爱java15 小时前
设计模式--抽象工厂模式【创建型模式】
java·设计模式·面试·抽象工厂模式·原理·23种设计模式·java 设计模式
越甲八千16 小时前
重温设计模式--中介者模式
windows·设计模式·中介者模式
犬余16 小时前
设计模式之桥接模式:抽象与实现之间的分离艺术
笔记·学习·设计模式·桥接模式
Theodore_102217 小时前
1 软件工程——概述
java·开发语言·算法·设计模式·java-ee·软件工程·个人开发
越甲八千19 小时前
重拾设计模式--组合模式
设计模式·组合模式