设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
设计模式分为三种类型,共23种:
参照Hongyang、菜鸟教程等处文章所写。如有错误欢迎指正,如有侵权,请联系我删除。

定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。
对于JDK或者Andorid中都有很多地方实现了观察者模式,比如XXXView.addXXXListenter , 当然了 XXXView.setOnXXXListener不一定是观察者模式,因为观察者模式是一种一对多的关系,对于setXXXListener是1对1的关系,应该叫回调。
专题接口:Subject.java ;
```java /* * 注册一个观察者 / public void registerObserver(Observer observer);
/* * 移除一个观察者 / public void removeObserver(Observer observer);
/* * 通知所有观察者 / public void notifyObservers(); ```
3D服务号的实现类:ObjectFor3D.java
java
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
int index = observers.indexOf(observer);
if (index >= 0) {
observers.remove(index);
}
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(msg);
}
}
/**
* 主题更新信息
*/
public void setMsg(String msg) {
this.msg = msg;
notifyObservers();
}
所有观察者需要实现此接口:Observer.java
java
public ObserverUser1(Subject subject) {
subject.registerObserver(this);
}
@Override
public void update(String msg) {
Log.e("-----ObserverUser1 ", "得到 3D 号码:" + msg + ", 我要记下来。");
}
java
// 创建服务号
objectFor3D = new ObjectFor3D();
// 创建两个订阅者
observerUser1 = new ObserverUser1(objectFor3D);
observerUser2 = new ObserverUser2(objectFor3D);
// 两个观察者,发送两条信息
objectFor3D.setMsg("201610121 的3D号为:127");
objectFor3D.setMsg("20161022 的3D号为:000");
简单列一下这个模式的家族:
1、静态工厂模式
2、简单工厂模式(店里买肉夹馍)
java
public RoujiaMo creatRoujiaMo(String type) {
RoujiaMo roujiaMo = null;
switch (type) {
case "Suan":
roujiaMo = new ZSuanRoujiaMo();
break;
case "La":
roujiaMo = new ZLaRoujiaMo();
break;
case "Tian":
roujiaMo = new ZTianRoujiaMo();
break;
default:// 默认为酸肉夹馍
roujiaMo = new ZSuanRoujiaMo();
break;
}
return roujiaMo;
}
3、工厂方法模式(开分店)
提供创建肉夹馍店抽象方法:RoujiaMoStore.java
java
public abstract RoujiaMo sellRoujiaMo(String type);
具体实现抽象方法:XianRoujiaMoStore.java
分店依旧使用简单工厂模式:XianSimpleRoujiaMoFactory.java
4、抽象工厂模式(使用官方提供的原料)
java
/**
* 准备工作
*/
public void prepare(RoujiaMoYLFactory roujiaMoYLFactory) {
Meet meet = roujiaMoYLFactory.creatMeet();
YuanLiao yuanLiao = roujiaMoYLFactory.creatYuanLiao();
Log.e("---RoujiaMo:", "使用官方的原料 ---" + name + ": 揉面-剁肉-完成准备工作 yuanLiao:"+meet+"yuanLiao:"+yuanLiao);
}
单例模式主要是为了避免因为创建了多个实例造成资源的浪费,且多个实例由于多次调用容易导致结果出现错误,而使用单例模式能够保证整个应用中有且只有一个实例。
(3) 定义一个公有的方法,将在该类中所创建的对象返回
饿汉式[可用]:SingletonEHan.java
```java private SingletonLanHan() {} private static SingletonLanHan singletonLanHanFour; public static SingletonLanHan getSingletonLanHanFour() { if (singletonLanHanFour == null) { synchronized (SingletonLanHan.class) { if (singletonLanHanFour == null) { singletonLanHanFour = new SingletonLanHan(); } } } return singletonLanHanFour; }
```
策略模式:定义了算法族,分别封装起来,让它们之间可相互替换,此模式让算法的变化独立于使用算法的客户。
$ claude mcp add DesignPattern \
-- python -m otcore.mcp_server <graph>