| 模式 | 关键思路 | 何时使用 | 优化点 |
|---|---|---|---|
| 组合模式(Composite) | 定义统一Component接口,Leaf与Composite一视同仁,递归处理整棵树 | 树形结构与“部分-整体”关系:如文件系统、组织架构、GUI 容器与控件 | 统一操作接口,减少instanceof与类型分支,新增节点类型无需改既有逻辑 |
| 策略模式(Strategy) | 将可替换的算法封装为策略,运行时注入 | 同一问题存在多种算法/规则,需要动态切换 | 避免大条件分支,便于单元测试与A/B 测试 |
| 装饰器模式(Decorator) | 通过组合在不改原类的情况下叠加职责 | 需要透明地增强对象功能(如日志、缓存、校验) | 比继承更灵活,支持按需叠加与组合复用 |
interface Graphic { void draw(); }
class Circle implements Graphic {
public void draw() { System.out.println("Drawing a Circle"); }
}
class Square implements Graphic {
public void draw() { System.out.println("Drawing a Square"); }
}
class CompositeGraphic implements Graphic {
private final List<Graphic> children = new ArrayList<>();
void add(Graphic g) { children.add(g); }
void remove(Graphic g) { children.remove(g); }
public void draw() { children.forEach(Graphic::draw); }
}
// 使用
var g = new CompositeGraphic();
g.add(new Circle()); g.add(new Square());
g.draw(); // Drawing a Circle \n Drawing a Square
interface PaymentStrategy { void pay(int amount); }
class Alipay implements PaymentStrategy {
public void pay(int amount) { System.out.println("Paid " + amount + " via Alipay"); }
}
class WeChatPay implements PaymentStrategy {
public void pay(int amount) { System.out.println("Paid " + amount + " via WeChatPay"); }
}
class CheckoutService {
private final PaymentStrategy strategy;
CheckoutService(PaymentStrategy s) { this.strategy = s; }
void checkout(int amount) { strategy.pay(amount); }
}
// 使用
new CheckoutService(new Alipay()).checkout(100);
new CheckoutService(new WeChatPay()).checkout(200);
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。