如何理解这6种常见设计模式?( 五 )
简单实现
package proxy; public class ProxyPattern { public static void main(String[] args) { Proxy proxy = new Proxy(); proxy.request(); } } //抽象主题 interface Subject { void request(); } //真实主题 class RealSubject implements Subject { public void request() { System.out.println(''访问真实主题方法...''); } } //代理 class Proxy implements Subject { private RealSubject realSubject; public void request() { if (realSubject==null) { realSubject=new RealSubject(); } preRequest(); realSubject.request(); afterRequest(); } public void preRequest() { System.out.println(''访问真实主题之前的预处理 。 ''); } public void afterRequest() { System.out.println(''访问真实主题之后的后续处理 。 ''); } }6 观察者模式(Observer)
出差在外 , 想了解孩子在家的情况 , 这时候只要加入“相亲相爱一家人”群 , 老爸老妈会经常把孩子的照片和视频发到群里 , 你要做的就是作为一个观察者 , 刷一刷群里的信息就能够了解一切了 。
观察者模式结构
观察者模式包含如下角色:
- Subject:目标
- ConcreteSubject:具体目标
- Observer:观察者
- ConcreteObserver:具体观察者
本文插图
时序图:
本文插图
优缺点
- 优点:将复杂的串行处理逻辑变为单元化的独立处理逻辑 , 被观察者只是按照自己的逻辑发出消息 , 不用关心谁来消费消息 , 每个观察者只处理自己关心的内容 。 逻辑相互隔离带来简单清爽的代码结构 。
- 缺点:观察者较多时 , 可能会花费一定的开销来发消息 , 但这个消息可能仅一个观察者消费 。
适用于一对多的的业务场景 , 一个对象发生变更 , 会触发N个对象做相应处理的场景 。 例如:订单调度通知 , 任务状态变化等 。
注意事项
避免观察者与被观察者之间形成循环依赖 , 可能会因此导致系统崩溃 。
简单实现
package observer; import java.util.*; public class ObserverPattern { public static void main(String[] args) { Subject subject = new ConcreteSubject(); Observer obsA = new ConcreteObserverA(); Observer obsb = new ConcreteObserverB(); subject.add(obsA); subject.add(obsB); subject.setState(0); } } //抽象目标 abstract class Subject { protected List
推荐阅读
- 徐峥|徐峥年初被23家电影公司联名“封杀”,上万人签名抵制,现状如何
- 游戏葡萄|七年磨一剑的任天堂,如何用美术诠释游戏?
- 智能城市崛起,看智能化如何定义未来之城
- 萍姐姐调侃体育|郭艾伦如何回应?国产第一后卫之争愈演愈烈,吴前爆发孙铭徽开挂
- 王者荣耀|李小龙皮肤如何搭配才最帅气,这个回城特效绝配,搭配特效秒变传说皮肤!
- 剖析爱奇艺积分体系,如何做留存和转化
- ZAKER生活|在俄避难的斯诺登,结局如何?,7年前曝光美国“棱镜计划”
- 周到|复盘上海德比首回合 上港如何破申花的密集防守
- 晴晴侃游戏|盗贼和狂暴战谁更适合呢,魔兽怀旧服咸鱼剑近战该如何选择
- 王者荣耀|王者荣耀:不知道如何玩好射手?S21赛季全射手出装铭文合集送给你!
