《大话设计模式》
设计模式
韩运畅
这个作者很懒,什么都没留下…
展开
-
装饰模式
装饰者模式是针对的这样一种情况,程序对于一个类在不同情况下需要不同的功能,而这些功能都是在不改变最简洁功能的基础上实现的。我们可以将最核心的功能抽取出来单独作为一个类,装饰者只要持有该对象的一个引用,然后利用原有功能重写对应的方法即可。还有一点需要注意的是,装饰者对象要么是原对象的子类要么拥有共同的父接口,这样装饰对象也可以作为一个原对象传入另一个装饰者对象,以实现对原对象一层一层装饰的作用。装...原创 2020-04-23 21:09:52 · 83 阅读 · 0 评论 -
策略模式
代码中诸多可以相互替换的不同算法分离出去,作为一个个具体的类继承共同的父类(接口,抽象类),原代码中多出一个父类字段,当我们需要使用哪种算法时,就将保存一个对应类的引用。策略模式的本质就是分离算法,选择实现。策略模式面对的场景之一是,一个类中需要if else选择判断使用何种算法,这些算法解决的问题相同只是实现不同,并且他们可能存在重复的逻辑。策略模式的正式解释是,它定义了算法家族,分别封装起...原创 2020-03-29 12:25:23 · 62 阅读 · 0 评论 -
访问者模式
它的本质就是将数据与操作解开,使得操作集合可以自由的演化。最直达本质的一个点是,被访问者的accpet方法public void accpet(Visitor visitor){visitor.visit(this);//访问者的visit方法对不同的类型做了重载}访问者模式也有不少缺点:被访问者的数据必须要暴露出去需要要求数据是稳定的,一旦变化需要波及到许多visitor访问者...原创 2020-03-29 12:21:35 · 67 阅读 · 0 评论 -
享元模式
意义是重复共享对象,提高内存利用率,如字符串常量池。不必关心UnsharedConcreteFlyweight,其中讲的内部状态与外部状态没搞懂。但是最简单的享元模式直接key-value不就行了。...原创 2020-03-29 11:59:49 · 51 阅读 · 0 评论 -
命令模式
命令模式的优点是解除了请求者与服务者的耦合,请求者只需要关心想要调用什么命令,而不必关心是谁实现的它;将请求包装成命令,方便于命令的管理。...原创 2020-03-29 11:43:02 · 52 阅读 · 0 评论 -
状态模式
当一个类不同的状态对应不同行为时,我们可以将不同的state分离出来,每个state中分装了它所对应的行为,这样就可以避免大量的if else语句而是直接调用当前state里的方法就好了。状态模式的使用需要考虑如何设计state的切换,比如将切换逻辑放入到context中,或者是state中。状态模式与策略模式UML图相似,但是前者是服务于本身这个类,后者是服务于客户的,客户需要知道各个算法类...原创 2020-03-29 11:35:46 · 60 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式与工厂方法模式很相似,只不过不同的是抽象工程模式不再是实现一个产品,而是可以实现一个产品族。当我们需要将一组相关或者相互依赖的产品生产与使用隔离的时候可以考虑使用。 抽象工厂模式的缺点在于它不利于产品族横向扩展,一旦产品族中出现新的产品品类,需要在所有的子工厂中增加相关方法。、...原创 2020-03-29 11:21:54 · 59 阅读 · 0 评论 -
桥接模式
工厂方法模式最大的优点是,客户通过工厂获得一个对象的实例,而不是new一个对象的实例,这样会产生硬编码。客户拿到的是一个接口,这样当想要获得的对象变化只需要改动工厂即可,上层模块并不需要变化。最常见的就是将数据库从mysql切换到oracle只需要在配置文件中该下驱动名称即可。工厂方法模式与简单工厂模式的对比:简单工厂模式与工厂方法模式都是将对象的创建于使用分离开来,对于简单工厂模式,当我们新...原创 2020-03-29 10:29:43 · 75 阅读 · 0 评论 -
建造者模式
建造者模式就是方便于客户获得定制的复杂的类,但是将该类定制的构建细节封装到builder与director中,客户只需要从director中获得想要的定制的类就好了。优点是方便客户操作,提高了代码的重用性,封装性(客户不必知道建造细节)。...原创 2020-03-29 10:23:36 · 56 阅读 · 0 评论 -
外观模式
外观模式的优点是方便客户操作,解除客户与各个接口的耦合,防止客户直接使用底部接口以保证安全性。原创 2020-03-29 09:46:16 · 53 阅读 · 0 评论 -
备忘录模式
主要用于取消不确定或错误的操作原创 2020-03-29 09:41:38 · 51 阅读 · 0 评论 -
观察者模式
建立了一对多的注册监听机制原创 2020-03-28 12:51:18 · 45 阅读 · 0 评论 -
抽象的意义
1.提高代码复用性2.可以定义规范3.模块之间依赖抽象开发,降低耦合原创 2020-03-28 12:44:16 · 160 阅读 · 0 评论 -
迭代器模式
迭代器模式的意义在于方便于用户遍历一个集合,又不暴露该集合的内部表示。A ----------> B代表A依赖于B原创 2020-03-28 12:34:51 · 64 阅读 · 0 评论 -
代理模式
代理模式的优点之一在于,可以屏蔽掉客户对原类的访问以达到安全性的保证。原创 2020-03-28 12:28:35 · 52 阅读 · 0 评论 -
原型模式
原型模式可以逃脱构造方法来实例化出一个对象,如果构造方法较为耗时的话,原型模式不失为一个较好的选择;并且原型模式可以使用少量的代码生产出大量与原对象相同的实例。...原创 2020-03-28 12:25:45 · 60 阅读 · 0 评论 -
模板方法模式
将不变的代码抽取到父类构成算法的骨架,子类只需要重写部分空方法,便可以实现不同的逻辑。如AQS与同步工具。原创 2020-03-28 12:20:00 · 68 阅读 · 0 评论 -
中介者模式
对象之间通过中介者进行交互而不是直接交互,从而削弱耦合。原创 2020-03-28 12:16:40 · 67 阅读 · 0 评论 -
适配器模式
当一个可以使用的类只是接口类型不匹配可以使用适配器模式原创 2020-03-28 12:11:35 · 57 阅读 · 0 评论 -
迪米特原则
一个类只与它的直接朋友打交道,直接朋友是指类中定义的字段,方法定义的参数以及返回值对应的类型。原创 2020-03-28 12:09:39 · 63 阅读 · 0 评论 -
组合模式
组合模式的优点是:局部与整体可以被一致对待。原创 2020-03-28 11:58:43 · 72 阅读 · 0 评论