设计模式学习记录:一句话+代码体会设计模式。
九大常用设计模式
单例模式:https://blog.csdn.net/qq_37902949/article/details/87903569
简单工厂/静态工厂方法模式:https://blog.csdn.net/qq_37902949/article/details/87931684
工厂方法模式:https://blog.csdn.net/qq_37902949/article/details/87931610
代理模式:https://blog.csdn.net/qq_37902949/article/details/87931864
模板方法模式:https://blog.csdn.net/qq_37902949/article/details/87931912
观察者模式:https://blog.csdn.net/qq_37902949/article/details/87931995
适配器模式:https://blog.csdn.net/qq_37902949/article/details/87931940
装饰者模式:https://blog.csdn.net/qq_37902949/article/details/87931800
策略模式:https://blog.csdn.net/qq_37902949/article/details/87932047
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
一个公众号流程例子体会观察者模式 。
定义主题接口
/**
* 定义主题接口
*/
public interface Subject {
// 添加观察者
boolean addObserve(Observer observer);
// 移除观察者
boolean removeObserver(Observer observer);
// 通知所有观察者
void notice(String message);
}
抽象观察者
/**
* 抽象观察者
*/
public interface Observer {
// 定义更新自己的方法
void update(String message);
}
公众号操作
/**
* 公众号
*/
public class Subscription implements Subject {
private List<Observer> observerList = new ArrayList<>();
@Override
public boolean addObserve(Observer observer) {
return observerList.add(observer);
}
@Override
public boolean removeObserver(Observer observer) {
return observerList.remove(observer);
}
@Override
public void notice(String message) {
for (Observer observer : observerList) {
observer.update(message);
}
}
}
微信用户
/**
* 微信用户类
*/
public class WechatUser implements Observer {
private String name;
public WechatUser(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name+"->"+message);
}
}
测试
/**
* 测试观察者设计模式
*/
public class TestObserver {
public static void main(String[] args) {
// 创建一个公众号
Subscription sub = new Subscription();
// 创建微信用户
WechatUser user1 = new WechatUser("张三");
WechatUser user2 = new WechatUser("李四");
WechatUser user3 = new WechatUser("王五");
WechatUser user4 = new WechatUser("田七");
// 让其订阅公众号
sub.addObserve(user1);
sub.addObserve(user2);
sub.addObserve(user3);
sub.addObserve(user4);
// 公众号发出更新通知
sub.notice("公众号更新了国庆放假通知......");
// 退订
sub.removeObserver(user2);
System.out.println("==========================");
// 公众号发出更新通知
sub.notice("公众号更新了国庆放假通知......");
}
}
设计模式是软件开发人员在软件开发过程中面临一般问题的解决方案。
设计模式还是要慢慢体会。。