设计模式
SpadeA_Iverxin
学无止境
展开
-
写在前面
本系列为笔者拜读《Head First Design Patterns》英文版笔记整理。其中代码大部分来自该书。如有理解偏差或错误请指正。原创 2020-09-20 19:25:52 · 103 阅读 · 0 评论 -
设计模式(12)Compund Pattern 各种模式的组合使用案例
<h1 id="模式的组合使用">模式的组合使用</h1><h2 id="案例一:小鸭子">案例一:小鸭子</h2><p>这里仍然使用书中第一章的鸭子的案例。</p><p>首先创建一个“叫”的接原创 2020-09-20 19:21:39 · 203 阅读 · 0 评论 -
设计模式(11)代理模式(The Proxy Pattern)- 2 虚拟代理和动态代理
代理模式定义为另一个对象提供一个代理或者占位符,来控制对他的访问。几个控制访问的方法:一个远程代理控制对远程对象的访问虚拟代理控制对创建成本较高的资源的访问保护代理控制对于权限资源的访问远程代理见:设计模式(11)代理模式The Proxy Pattern - 1 - 远程代理rmi虚拟代理虚拟代理用来标识一个需要昂贵代价去创建的对象。虚拟代理通常来推迟这个对象的创建,直到这个对象被需要时再创建。在被代理对象创建完成之前,虚拟代理扮演者被代理者(RealSubject)原创 2020-09-17 15:21:17 · 170 阅读 · 0 评论 -
设计模式(11)代理模式The Proxy Pattern - 1 - 远程代理rmi
代理模式假设现在需要设置一个监视器Monitor,能够监视糖贩卖机GumballMachine的状态,位置信息、还有多少糖果等。一个简单的想法就是创建一个Monitor的类,构造参数包括GumballMachine。然后就可以调用GumballMachine的一些状态函数。但是如果GumballMachine在另一台机器上、或者在不同的Java堆上,显然是不能够将GumballMachine的引用传递过来。这是后就需要使用代理模式来解决。思路:添加一个新的类叫做MonitorProxy。Monito原创 2020-07-03 20:57:32 · 332 阅读 · 0 评论 -
设计模式(10) 状态模式 The State Pattern
文章目录状态模式简介:常规的设计方式和面临的问题状态模式:State接口图NoQuarterState为例,状态类实现:Gumball Machine 贩卖机类的实现:扩展Reference状态模式简介:在一些基于状态转换的应用中,可以考虑使用这种模式。下面是一个简单的案例:假设有一个糖果售卖机,那么动作和状态之间的转换图如下所示:状态:No Quarter: 没有投币Ha...原创 2020-04-17 16:23:45 · 182 阅读 · 0 评论 -
设计模式(9) The Iterator and Composite Patterns(迭代和组合模式)
文章目录应用场景问题:解决:初识迭代器模式(Iterator Pattern)原理实现:实际使用:迭代器模式定义:单一设计原则组合模式定义例:使用组合模式设计菜单反思:让组合模式支持迭代器关于NullIterator应用场景一个 ArrayList作为容器存储数据,另一个使用的是Array(普通数组)。现在想要把这两个容器合并成一个,但是基于这两个容器开发的代码很多,重新修改会需要重写很多代码...原创 2020-04-12 16:56:48 · 307 阅读 · 0 评论 -
设计模式(8)the Template Method Pattern (模板方法模式)
文章目录概念实现比较Template Method Method Pattern:Hook(钩子)方法Hollywood Principle概念Template Method(模板方法):例如做咖啡和茶是有类似的过程的:烧水混合(放入咖啡或者茶叶)倒入杯子添加一些附加材料(糖或者其他)其中步骤2和4有些许不同。我们在写这样的一个类,如果分开写,1,4步骤的代码要被重复写两次。所...原创 2020-03-28 16:03:32 · 170 阅读 · 0 评论 -
设计模式笔记(7)The Adapter and Facade Patterns(适配器和外观模式)
文章目录Adapter概念实例使用:对象(Object)适配器和类(Class)适配器一个案例Facade Pattern概念设计原则The Principle of Least KnowledgeAdapter概念Adapter(适配器):把一个类的接口转换成用户所期望的另一个接口。适配器能够让两个不兼容的接口一起工作。假设你已经有一个软件系统,现在你想要让这个软件系统给一个新的供应商使用...原创 2020-03-21 10:04:33 · 256 阅读 · 0 评论 -
设计模式笔记(6) The Command Pattern 命令模式
文章目录定义简易版实现:设计使用:升级版带撤销命令其他应用场景定义命令模式: 把请求封装成一个对象,从而允许用不同的请求、队列或日志请求对其他对象进行参数化,并支持可撤消操作一个简单的例子:遥控器、被遥控设备(电灯、电视等)对于遥控器来说,只是辨别一件事:发送什么命令。而具体命令是如何实现的,每个设备实现方法不同,遥控器无需考虑这些。这个命令对象包含了这行这个命令的设备信息。而命令都...原创 2020-03-19 13:31:58 · 149 阅读 · 0 评论 -
设计模式笔记(5) The Singleton Pattern (单例模式)
文章目录单例模式和static修饰的全局变量区别:定义Classic Signleton多线程问题处理单例模式一个对象只有一个实例。比如下面这些类,我们希望在程序中只有唯一的,如果实例化超过两个,则会造成资源的浪费或者不一致的结果。线程池caches电话本处理属性和注册的设置用来登录的类用来作为一个设备对象去驱动设备或者显卡的类和static修饰的全局变量区别:全局变量需...原创 2020-03-18 11:33:48 · 172 阅读 · 0 评论 -
设计模式(一):Program to an interface/supertype
文章目录问题提出解决如何实现?本系列是《Head First Design Patterns》读书笔记加之个人理解,如有错误,请纠正。问题提出假设你设计了一个简单的展示鸭子的app。设计了一个父类Duck,其他各种类型的鸭子都继承这个父类。但是现在有了一个新的需求,鸭子要能够飞。聪明的你很快的在父类Duck里面添加了fly()这个函数。但是问题来了,在演示的时候发现有一个继承Duck...原创 2019-12-01 18:18:29 · 174 阅读 · 0 评论 -
设计模式(二)The Observer Pattern(观察者模式)
2_The_Observer_Pattern。Head First Design Patterns 读书笔记概念观察者模式主要的功能是用来解决一类一对多的关系。类似于报纸出版商和订阅者关系。报纸出版(数据更新)会将通知订阅者。订阅者有权取消订阅。当取消订阅就不再接受通知。Publishers + Subscribers = Observer Pattern我们叫publishe...原创 2019-12-09 18:45:46 · 187 阅读 · 0 评论 -
设计模式(三)The_Decorator_Pattern(装饰者模式)
the Decorator Pattern文章目录the Decorator Pattern概述问题提出装饰模式实现概述装饰者模式实现的功能是在运行的时候使用object composition对象组合,从而达能在不改变代码的情况下给对象以新的功能。问题提出如果你想要设计一个饮品的类,那么你可能设计如下:一个抽象的Beveragedescription,是一个实例变量,可以使St...原创 2019-12-15 17:43:30 · 216 阅读 · 0 评论 -
设计模式笔记(4) 工厂模式The Factory Pattern
4_The Factory Pattern问题引出当使用new,正在实例化一个具体的类。这是一个类实现的过程。我们使用接口类来接收我们使用new构造出来的一个具体实例,使用接口是为了让代码更加灵活。Duck duck ; // Duck是一个接口。if(picnic){ duck = new MallardDuck();}else if(hunting){ duck ...原创 2020-03-17 13:27:02 · 134 阅读 · 0 评论