随笔分类 - 设计模式
摘要:终于……看到了……代理模式…… 我觉得…… 这个模式…… 真的…… 好难啊…… 首先是远程代理 Java RMI 概观 ↑都是这个东西好难 代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问。 使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问,被代理
阅读全文
摘要:情景:有一个自动投币的糖果机。它有以下几种状态(每个圆圈代表一个状态): 如果用常量值来定义几个变量 这样状态变化就可以写成: 每一个动作都要先判断状态,改后再决定反馈以及下一个状态是什么。 虽然可以实现要求,但是当出现新的状态的时候,很不利于扩展。 我们把状态变成一个类,把不同的状态封装在各自的类
阅读全文
摘要:适配器模式 适配器模式就是将一个接口转化成另一个接口。 一个常见的例子是插头转换器 我们知道英式插头长这样: 而国内的插头一般是这样的 这时候,你就需要一个转换插头了 而适配器的工作就像是一个转换插头。你不需要从新买一个电器,也不用换一个插孔,只需要一个转换器即可。 假设已有一个软件系统,你希望它能
阅读全文
摘要:情景: 屋里有很多家用电器,你需要设计一个遥控器,来控制所有电器的使用。 如果在遥控器中添加电器类,那就使得遥控器和具体电器类过度耦合了,遥控器不应该知道电器的实现细节。 遥控器应该简单一些,我们都知道遥控器只要一些按钮,所能做的动作仅仅是按下按钮,所以不应该包含太多的控制逻辑。 所以,这里需要用命
阅读全文
摘要:情景: 你是一个咖啡店老板,你会做很多种咖啡。 首先有一个超类,饮料类。 咖啡可以加很多种调料,就假设是A,B,C…… 那么你会有AB型的,AC型,BC型,A型的,B型,C型,ABC型的咖啡,那么你需要有六种具体子类。 如果有n种调料,你就要有(2^n-1)种具体子类有木有啊!!! 同时,如果,你添
阅读全文
摘要:单件模式是最简单的设计模式啦!(窝感觉~~) 有一些对象我们只需要一个,例如:线程池(threadpool),缓存(cache),充当打印机,显卡等设备的驱动程序的对象。 这些类对象只能有一个实例,多了会出现一些问题。 全局变量缺点:必须在一开始就创建对象,浪费资源。 只创建一个对象的方法:首先将构
阅读全文
摘要:当我们只用new去创建一个类时,我们就在针对这个具体类编程。如果能够不使用具体类,而是针对接口编程,将会对以后扩展有很大方便。 情景: 你是一个披萨店的老板,披萨有很多种类。 我们可能需要这么做 但是以后我们可能会有D,E,F....之列的更多的披萨。我们必须重新修改这份代码。 根据“封装变化”的设
阅读全文
摘要:情景: 气象站会实时发布气象数据,要求创建布告板,并把气象站发布的数据显示出来。 布告板会有很多,随时回添加一个或删除一个,而每个布告板显示的格式也不尽相同。 观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 被观察对象称作主题(Sub
阅读全文
摘要:情景: 要设计很多鸭子,每个鸭子都有quack(呱呱叫)和swim功能。 可以设计一个Duck类,含有quack()和swim()方法就可以了。具体鸭子类继承Duck类。 新需求:要求添加fly功能。 如果直接给Duck添加fly()方法,会出现问题,因为有一部分鸭子是不会飞的。 选择创建Flyab
阅读全文