你有没有发现,家里那些用起来特别顺手的东西,往往背后都藏着某种“套路”?比如厨房的调料架按使用频率摆,衣柜分区挂当季衣服,这些其实都是在用“模式”解决问题。软件开发里也有类似的智慧,叫“设计模式”,它们被分成三大类:创建型、结构型和行为型。
创建型:怎么把东西“生”出来
就像你不会每次做饭都从种菜开始,程序里对象的创建也有省事的办法。创建型模式关注的是“怎么new一个对象”。比如单例模式,确保全家只有一个路由器管理入口,谁连Wi-Fi都得通过它,避免冲突。
class Router {
private static Router instance;
private Router() {}
public static Router getInstance() {
if (instance == null) {
instance = new Router();
}
return instance;
}
}
这就像家里那台万能遥控器,只此一个,谁要用都得找它。
结构型:怎么把零件拼起来
装修时,你会把插座、开关、灯具合理组合成电路系统,而不是乱拉电线。结构型模式就是干这个的。比如适配器模式,让你的日版游戏机插上变压器就能在家用插座上运行。
class JapanesePlug {
public void plugIn() {
System.out.println("日版插头已插入");
}
}
class Adapter {
private JapanesePlug plug;
public Adapter(JapanesePlug plug) {
this.plug = plug;
}
public void powerOn() {
plug.plugIn();
System.out.println("电源已接通");
}
}
代码里的“变压器”,让不兼容的东西也能协同工作。
行为型:大家怎么配合干活
一家人过日子,谁洗碗、谁倒垃圾,得有默契。行为型模式管的就是对象之间的职责划分和通信方式。比如观察者模式,像你妈在厨房烧水,水开了壶哨一响,全家都知道该去关火。
interface Observer {
void update();
}
class Kettle {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer o) {
observers.add(o);
}
public void boil() {
System.out.println("水开了!");
for (Observer o : observers) {
o.update();
}
}
}
这种模式让变化自动通知到相关方,不用挨个敲门问。
其实生活处处是设计模式。你整理书架的方式可能用了“装饰者”,定闹钟起床是“策略模式”的体现。理解这三类模式,不只是写代码更顺,连过日子都能更清爽。