设计模式简单总结

设计模式简单总结(参考:Head Fisrt 设计模式)

策略模式

策略模式定义了算法族,分别封装起来,让他们之间可以相互替换。

在这里插入图片描述

观察者模式(监听器模式)

在对象之间定义一对多的依赖(注意:这种依赖并没有先后次序关系),这样一来,当主体对象发生改变,依赖他的对象都能收到通知,并且自动更新。
在这里插入图片描述

装饰者模式

动态地将责任(或者功能)附加到对象上。

和责任链模式最大的不同就是,责任链只负责顺序处理且只负责处理,不附加额外功能,不持有对象。责任链强调的是流程处理,装饰者强调的是功能附加。

装饰者模式个人觉得有两个缺点,一个是下一个装饰者持有上一个装饰者,最前面一个装饰者持有者被装饰者,这种链式持有不小心处理没有释放的话,容易导致OOM。另外一个缺点是对新手不友好,新手分不清一个对象是装饰者还是被装饰者,容易在一个接受被装饰者的地方传了装饰者,导致异常。例如书里面的咖啡例子,如果客人需要一杯加了糖的咖啡,系统错误返回了糖(糖和咖啡都继承自饮料,所以返回的糖在客户看来也是饮料)这个装饰者,那么客人无法享用咖啡。

在这里插入图片描述

简单工厂模式(其实不属于设计模式)

设计一个类,直接new对应的产品。

在这里插入图片描述

工厂模式

定义了一个创建对象的接口,但由工厂子类决定生产哪个对象。

在这里插入图片描述

抽象工厂模式

提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。也就是说,抽象工厂不但可以生产Shape,还可以生产其他周边,可以看成由多个工厂模式组合而成。

在这里插入图片描述

单例模式

确保类只有一个实例。类图不画。

命令模式

将请求封装成对象命令,这可以让下游命令接受者(队列,日志等)不用关注这个命令具体是什么命令,只管执行命令就是。

在这里插入图片描述

适配器模式

将一个类的接口(或实例),转换成客户期待的另一个接口(或实例)。

外观模式

提供了一个统一的接口,用来访问子系统中的一群接口。用户不需要关心具体操作哪个子系统。同时子系统还是对外提供服务,用户也可以直接自己调用子系统接口绕过facade接口。

简单来说,外观模式,其实就是类似于一个service,只不过他是service上面的service,它聚合了底层service的一系列接口,用于简化用户的操作。

在这里插入图片描述

模版方法模式

在一个方法中定义一个算法的骨架,而将一些步骤延迟子类中,子类也可以复写父类的步骤。

模版方法中的模版,定义了一业务的具体接口以及业务顺序,其中可能已经提供了接口的默认实现逻辑,也可能通过委派模式让子类去实现自己的业务逻辑。子类也可以复写模版中的接口的默认实现,达到子类具有的特定实现逻辑。

在这里插入图片描述

迭代器模式

提供一种方法访问一个聚合对象的各个元素,而又不暴露其内部表示。例如便利数组,list和Map的时候都包装成Iterator。参考java内置的Iterator。

组合模式

允许你将对象组成树形结构来表现整合和部分之间的层次关系。可以理解为树。不画图。

状态模式

根据内部状态,决定行为。

和策略模式不同的是,策略模式是外驱的,也就是需要客户方手动变更策略。而状态模式则是内驱+外驱的,它可以自己改变内部状态,也可以接受外部命令更改状态,例如游戏AI,可能随着时间tick从警戒状态进入战斗状态,也可以接受玩家命令从战斗状态进入停止状态。

在这里插入图片描述

代理模式

为另一个对象提供一个替身或者占位符以控制对这个对象的访问。

代理的对象可以是本地对象,也可以代理远程对象。代理远程对象可以把处理网络细节封装到一起,上游服务不必关心服务是本地服务还是远程服务。

桥接模式

通过将实现和抽象放在两个不同的类层次中,从而使抽象和实现分离出来,实现可以单独改变。

生成器模式

封装一个对象的构建过程,并允许按步骤和按要求构造。

责任链模式

对同一个对象进行链式处理。和装饰者模式不同的是,对象被装饰者包装,而责任链则是被当做参数传递下去,责任链对象并不持有要处理的对象。

蝇量模式

创建一个对象,用来维护某个类的所有子类对象的访问。

解释器模式

定义不同的类,对处理对象进行不同的解释。有点类似策略模式。

中介者模式

定义一个类,封装了上游服务访问下游服务过程,上游服务把访问下游服务交个中介者,从而把上游服务和下游服务解耦。

备忘录模式

定义一个类,用来维护另外一个类或系统的关键变量,用于让对象返回以前的状态。

原型模式

复制现有的对象模式数据,产生另外一个新的实例。

访问者模式

定义一个中间类,用于提供对下游服务的访问,避免下游服务暴露于上游服务。个人觉得类似于中介者模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值