设计模式分类与总览
2026/8/24大约 2 分钟
设计模式分类与总览
设计模式是软件设计中反复出现问题的成熟解决方案,按目的分为创建型、结构型、行为型三类。
模式分类
| 类型 | 描述 | 包含模式 |
|---|---|---|
| 创建型 | 在创建对象的同时隐藏创建逻辑 | 工厂、抽象工厂、单例、建造者、原型 |
| 结构型 | 关注类和对象的组合 | 适配器、桥接、过滤器、组合、装饰器、外观、享元、代理 |
| 行为型 | 关注对象之间的通信 | 责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、空对象、策略、模板、访问者 |
Android 框架中的模式速查
| 模式 | Android 示例 |
|---|---|
| 工厂模式 | BitmapFactory.decodeResource() |
| 单例模式 | InputMethodManager.getInstance() |
| 建造者模式 | AlertDialog.Builder |
| 原型模式 | ArrayList.clone()、Intent.clone() |
| 适配器模式 | RecyclerView.Adapter |
| 观察者模式 | notifyDataSetChanged()、广播机制 |
| 代理模式 | ContextWrapper 委托 ContextImpl |
| 责任链模式 | ViewGroup 事件分发 |
单例模式示例:InputMethodManager
public static InputMethodManager getInstance() {
synchronized (InputMethodManager.class) {
if (sInstance == null) {
sInstance = new InputMethodManager(Looper.getMainLooper());
}
return sInstance;
}
}系统服务通常以单例形式提供,保证全局唯一实例并避免资源重复消耗。
建造者模式示例:AlertDialog.Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Message");
AlertDialog dialog = builder.create();
dialog.show();Builder 内部通过 AlertController.AlertParams 暂存参数,create() 时一次性应用到新构建的 AlertDialog。
原型模式示例:ArrayList.clone()
public Object clone() {
try {
ArrayList<?> v = (ArrayList<?>) super.clone();
v.elementData = Arrays.copyOf(elementData, size); // 浅拷贝
v.modCount = 0;
return v;
} catch (CloneNotSupportedException e) {
throw new InternalError(e);
}
}观察者模式示例:RecyclerView 数据刷新
public final void notifyDataSetChanged() {
mObservable.notifyChanged(); // 通知所有观察者
}
static class AdapterDataObservable extends Observable<AdapterDataObserver> {
public void notifyChanged() {
for (int i = mObservers.size() - 1; i >= 0; i--) {
mObservers.get(i).onChanged(); // 回调 RecyclerViewDataObserver
}
}
}