摘要: @[读书笔记][markdown]##从尼克的角度> “每当你想要批评任何人的时候,”他对我说,“你要记住,这个世界上所有的人,并不是各个都有过你那些优越条件” 尼克是一个自信满满,立志成为一名优秀的金融师的人,他家住在纽约西卵的一间老房子里,和盖茨比的豪宅隔壁。因为从老家搬到纽约,他的表妹黛西... 阅读全文
posted @ 2015-07-30 12:51 maverick_fu 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 第八个模式:模版方法模式 8.1引入模版方法模式 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现 下面我们来看模板方法模式的类图: 8.2模板方法的应用 1.使用模板方法排序(很简单,只是需要实现compareTo接口): 现在就可以测试这个类了: 8.3小结 阅读全文
posted @ 2015-05-16 18:35 maverick_fu 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 第十一个模式:代理模式 11.1问题引入 远程代理的角色: 远程代理就好比“远程对象的本地代表”。所谓“远程对象”?这是一种对象,活在不同的JVM堆中。所谓“本地代表”?这是一种可以由本地方法调用的对象,其行为会转发到远程对象中。 11.2解决方案: 1.制作远程接口: 远程接口定义出可以让客户远程调用的方法。客户用它作为服务的类型。Stub和实际服务都实现此接口。 package net.... 阅读全文
posted @ 2015-05-14 21:46 maverick_fu 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 第十个模式:状态模式 10.1问题引入 我们在这里所讨论的是一个通用的技巧:如何对对象内的状态建模-通过创建一个实例变量来持有状态值,并在方法内书写条件代码来处理不同的状态。 糖果机的问题: 这样的设计,会出现以下的问题: 10.2解决方案: 定义状态接口和类: 定义每个状态类: 。。。。。。。。。。。。。 然后,定义GumballMachine类: 我们可以看到,这样可以实现哪... 阅读全文
posted @ 2015-05-14 20:54 maverick_fu 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 第九个模式:迭代器与组合模式 9.1问题引入: 我要需要创建一个对象,将它称为迭代器(Iterator),利用它来封装“遍历集合内的每个对象的过程”。想让我们在ArrayList上试试: 将它也在数组上试试: 9.2会见迭代器模式 关于迭代器模式,我们需要知道的就是它依赖于一个名为迭代器的接口。一旦我们有了这个接口,就可以为各种对象集合实现迭代器:数组、散列表、列表····如果我们想要为数组实... 阅读全文
posted @ 2015-05-14 19:37 maverick_fu 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 第七个模式:适配器模式与外观模式 7.1问题引入 对于去欧洲旅行的美国旅客,需要注意的是欧洲标准的插座与美国的标准插座是不同的,所以需要引入适配器。同样,OO适配器和真实世界的适配器扮演同样的角色:将一个接口转换成另一个接口,以符合客户的期望。 7.2面向对象适配 让我们来看看使用中的适配器。以第一章中的鸭子为例,鸭子接口和类如下图: 绿头鸭是鸭子的子类: 然后,再看最新的“火鸡”接口: 现... 阅读全文
posted @ 2015-05-14 17:02 maverick_fu 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 第六个模式:命令模式 6.1问题引入 命令模式可以将“动作的请求者”从“动作的执行者”对象中解耦。 下面是命令模式下遥控器-电灯的类图: 以下是测试代码: 6.2命令模式 命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 阅读全文
posted @ 2015-05-14 16:53 maverick_fu 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 第五个模式:单件模式 5.1问题引入: 有一些对象我们其实只需要一个,比方说:线程池,缓存,对话框,处理偏好设置和注册表的对象,日志对象,充当打印机、显卡等设备的驱动程序的对象。 5.2解决方案1: 单件模式:确保一个类只有一个实例,并提供一个全局访问点 让我们来看看代码:getInstance()是静态的,这意味着它是一个类方法,所以可以在代码的任何地方使用Singleton.getInsta... 阅读全文
posted @ 2015-05-14 16:42 maverick_fu 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 第四个模式:工厂模式 4.1写在前面:定义简单工厂模式 简单工厂不是一个设计模式,反而比较像是一种编程习惯。 看看如何根据订单生产这些披萨的: 1.先看看Ethan的订单:我们首先需要一个纽约披萨店: PizzaStore nypizzastore = new NYPizzaStore(); 2.现在有了一个店,可以下单了: nyPizzaStore.orderPizza(“che... 阅读全文
posted @ 2015-05-14 16:13 maverick_fu 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 第三个模式:装饰者模式 3.1 模式引入 辛巴克咖啡,购买咖啡时,也可以要求在其中加入各种调料,例如:蒸奶(Steamed milk)、豆浆(soy)、摩卡(Mocha)或者覆盖奶泡。星巴克会根据所加入的调料收取不同的费用。所以订单系统必须考虑到这些调料部分。 3.2 解决方案1: 采用继承来实现方案: 这种方案的特点: 1.一旦出现新调料,我们将需要加上新的方法,并改变超类中的cost()方法... 阅读全文
posted @ 2015-05-14 15:59 maverick_fu 阅读(242) 评论(0) 推荐(0) 编辑