设计模式:代码界的“武林秘籍”——深入浅出解读三大类设计模式

80 阅读4分钟

设计模式:代码界的“武林秘籍”——深入浅出解读三大类设计模式

一、设计模式的四大核心要素

(想象你是个刚入门的程序员,正在参加“代码江湖大会”,突然被长老拉到一旁传授秘籍——)

1. 模式名称

“这是‘单例模式’,别问为什么叫这个名字,问就是皇帝只有一个!”
“适配器模式?就是把Type-C转成Lightning的充电器!”

2. 问题

“我明明要一个对象,为啥总被造出一堆?!”(单例模式的痛点)
“两个系统接口像在说不同语言,怎么对话?”(适配器模式的困境)

3. 解决方案

“私有构造函数+全局访问点,这波操作666!”(单例模式的解决方案)
“造个中间人,把接口翻译成对方能听懂的!”(适配器模式的妙招)

4. 效果

“内存省了,资源不乱用了,还能防皇帝被篡位!”(单例模式的战果)
“旧系统和新系统握手言和,数据终于能自由流通了!”(适配器模式的胜利)


二、创建型设计模式:造物主的四大神器

1. 单例模式(Singleton)

问题:皇帝想搞终身制,但总被造出多个“分身”。
解决方案

private static Emperor instance = new Emperor();
private Emperor() {} // 私有构造函数:禁止民间造反!
public static Emperor getInstance() { return instance; }

效果:内存里只保留一个“真命天子”,资源占用率降为0.5%(比普通百姓还省)。

2. 工厂模式(Factory Method)

问题:造车时客户总问“要燃油版还是电车?”,代码写得像超市收银台。
解决方案

// 父类:造车工厂
public abstract class CarFactory {
    public abstract Car createCar();
}
// 子类:电动车工厂
class TeslaFactory extends CarFactory {
    @Override
    public Car createCar() { return new ElectricCar(); }
}

效果:客户只需说“我要特斯拉”,代码自动造车,连4S店销售都失业了!

3. 建造者模式(Builder)

问题:点奶茶时要求“大杯去冰三分糖+波霸+珍珠+椰果”,参数多到爆表。
解决方案

// 奶茶建造者
public class BubbleTeaBuilder {
    private String size;
    private boolean ice;
    private List<Topping> toppings = new ArrayList<>();
    // 各种setter方法
    public BubbleTea build() { return new BubbleTea(this); }
}

效果:菜单参数从17个精简到0,顾客只需说“照常!”,代码自动复用上次的“波霸狂魔”配方。


三、结构型设计模式:搭积木的高手

1. 适配器模式(Adapter)

场景:你的Type-C充电器遇到Lightning接口的苹果手机。
解决方案

// 适配器类
class TypeCAdapter implements LightningInterface {
    private TypeCInterface typeC;
    public TypeCAdapter(TypeCInterface typeC) {
        this.typeC = typeC;
    }
    public void chargeWithLightning() {
        typeC.chargeWithTypeC();
    }
}

效果:苹果手机终于能用你的充电器,双方CEO握手言和。

2. 装饰器模式(Decorator)

场景:711便利店的“可乐+冰块+柠檬+薄荷叶”组合,价格随心叠加。
解决方案

// 抽象饮料类
abstract class Beverage {
    public abstract String getDescription();
    public abstract double cost();
}
// 装饰器抽象类
abstract class CondimentDecorator extends Beverage {
    protected Beverage beverage;
}
// 具体装饰:加柠檬
class LemonDecorator extends CondimentDecorator {
    public LemonDecorator(Beverage beverage) {
        this.beverage = beverage;
    }
    @Override
    public String getDescription() {
        return beverage.getDescription() + ", 柠檬";
    }
    @Override
    public double cost() {
        return beverage.cost() + 1.5;
    }
}

效果:顾客可以自由组合“可乐+冰+柠檬+薄荷”,代码像搭乐高一样灵活。


四、行为型设计模式:代码世界的“社交关系学”

1. 观察者模式(Observer)

场景:天气预报APP,你订阅了“下雨提醒”,系统自动推送。
解决方案

// 天气主题
public class WeatherSubject {
    private List<Observer> observers = new ArrayList<>();
    public void addObserver(Observer o) { observers.add(o); }
    public void notifyObservers() {
        for (Observer o : observers) o.update();
    }
}
// 订阅者
class User implements Observer {
    public void update() { System.out.println("下雨啦!快收衣服!"); }
}

效果:天气变化时,所有订阅用户自动收到通知,像微信群发一样高效。

2. 策略模式(Strategy)

场景:打车软件的“经济/舒适/豪华”模式切换。
解决方案

// 计价策略接口
interface PricingStrategy {
    double calculatePrice(double distance);
}
// 具体策略:经济模式
class EconomyStrategy implements PricingStrategy {
    public double calculatePrice(double distance) {
        return distance * 1.5;
    }
}
// 上下文类
class RideContext {
    private PricingStrategy strategy;
    public void setStrategy(PricingStrategy s) { strategy = s; }
    public double getPrice(double distance) {
        return strategy.calculatePrice(distance);
    }
}

效果:用户切换车型时,代码就像换衣服一样简单,连司机都夸“这系统快得像开挂”。

3. 责任链模式(Chain of Responsibility)

场景:公司请假流程:1天找组长,3天找总监,5天找CEO。
解决方案

// 请假请求
class LeaveRequest {
    private int days;
    public LeaveRequest(int days) { this.days = days; }
    public int getDays() { return days; }
}
// 审批者抽象类
abstract class Approver {
    protected Approver nextApprover;
    public void setNext(Approver next) { this.nextApprover = next; }
    public abstract void processRequest(LeaveRequest request);
}
// 具体审批者:组长
class TeamLeader extends Approver {
    public void processRequest(LeaveRequest request) {
        if (request.getDays() <= 1) {
            System.out.println("组长批准了1天假");
        } else {
            nextApprover.processRequest(request);
        }
    }
}

效果:请假流程自动流转,再也不用员工追着领导跑,效率提升200%!


五、为什么设计模式这么“香”?

  1. 代码复用:就像用乐高积木搭房子,一套零件能造出千种造型。
  2. 可维护性:当系统升级时,就像给手机换系统——旧应用还能用,新功能也能加。
  3. 沟通效率:当你说“我用了观察者模式”,队友立刻知道你在实现“订阅-通知”机制。

最后送你一句程序员名言

“设计模式不是万能钥匙,但没有它,你连门都找不到。”

下次写代码时,记得看看这23种“秘籍”,说不定就能让代码从“凑合用”变成“优雅飞”!