设计模式 in Java
文章平均质量分 92
学习和总结《head first设计模式》一书提到的面向对象设计原则和模式
rex_nie
这个作者很懒,什么都没留下…
展开
-
GRASP软件设计的模式和原则
GRASP模式:每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。”这是关于模式最经典的定义,作者是建筑大师Christopher Alexander。如果是第一次看到这句话,多数人会觉得有些抽象难懂。其实“模式”两个字只是一个代号,就像我的英文名字叫Justin,如果我改叫Tom也没什么问题,只是我更喜欢Justin这个名字,所以从Christopher开始,有...转载 2019-01-05 13:04:14 · 308 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第9章v3-组合迭代器
定义组合迭代器不是一个设计模式,是指如何在组合中使用迭代器。所以本章的代码是基于《HeadFirst设计模式》读书笔记-第9章v2-组合模式 修改过来的,需要先熟悉组合模式。代码实现首先在MenuComponent接口中增加一个方法 public abstract Iterator createIterator();MenuComponent.javaimpo...原创 2018-04-15 19:01:45 · 172 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第9章v2-组合模式
定义组合模式(composite pattern)允许你将对象组合成树形结构来表现“整体/部分“层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。代码实现本章使用组合模式来实现下图的树状菜单。首先为菜单和菜单项创建一个共同的接口作为组件接口,让我们能够用统一的做法来处理菜单和菜单项。换句话说,客户(Waitress)可以针对菜单或菜单项调用相同的方法。组件...原创 2018-04-15 10:45:01 · 224 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第9章v1-迭代器模式
定义迭代器模式(iterator pattern)提供了一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示。代码实现下面以JDK现有的Iterator的例子来说明适配器模式使用。给出创建Iterator接口的定义:import java.util.Iterator;public interface Menu { public Iterator ...原创 2017-04-24 08:26:45 · 520 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第8章-模板方法模式
定义模板方法模式(template method pattern)在一个方法中定义一个算法的骨架,而将一些步骤延时到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。下面给出了该类图的代码实现和说明:public abstract class AbstractClass { /** * 这个是个模板方法 * 声明为final...原创 2017-04-19 23:28:35 · 432 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第7章v2-外观模式
定义外观模式(facade pattern)提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更加容易使用。从上面的图可以看出,Facade类对子系统进行了一下封装,客户只需要和Facade类打交道,不需要接触子系统中的各个类,也不需要了解子系统中各个类间的关系。从这个角度来说,客户也就与子系统解耦了,不需要依赖于子系统中具体的类了。外观模式的一个重...原创 2017-04-20 23:44:23 · 348 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第7章v1-适配器模式
定义适配器模式(adapter pattern)将一个类的接口,转换成客户期望的另外一个接口。适配器让原本不兼容的类可以合作无间。上图清晰地表述了适配器模式的威力,通过创建适配器接口,现有的系统可以不用修改代码就可以通过适配器接口调用厂商类,现有的系统和厂商类之间可以很好地协作。适配器模式让不兼容的接口变成兼容,还可以让客户从厂商类的实现中解耦,当厂商类改变时,适配可以封装变化,客...原创 2017-04-23 00:04:56 · 362 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第6章-命令模式
定义命令模式(command pattern)将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。从上面的类图可以看出,一个命令对象通过在特定接收者上绑定一组动作来封装一个请求。要达到这一点,命令对象将动作和接收者包装进对象中,这个对象只暴露出execute()/undo()方法,当execute()/undo()方法被调用的时候,接收者就会...原创 2017-03-21 23:06:57 · 351 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第5章-单例模式
定义单例模式(singleton pattern)确保一个类只有一个实例,并提供一个全局访问点。代码实现以下代码是线程安全的,并且是延时实例化的。public class Singleton { // volatile:不优化和缓冲sInstance变量,每次某线程修改该值时,对其它的线程都是马上可见的 // static: 静态变量,该类的所有实例共享该变...原创 2017-03-18 23:42:33 · 287 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第4章-工厂模式
定义工厂方法模式(factory method pattern)定义了一个创建对象的接口,由子类决定要实例化的类是哪一个,让类的实例化推迟到子类。从类图可以看出,工厂方法模式封装了具体类型的实例化,抽象的Creator类提供了一个抽象方法用来创建产品,同时也实现了一些操作产品的方法(如anOperation),这些方法不需要涉及ConcreteProduct,而是通过Product接口...原创 2017-03-18 20:43:29 · 548 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第3章-装饰者模式
定义装饰者模式(decorator pattern)动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。从上面的类图可以看出,装饰者(ConcreteDecoratorA)和被装饰者(ConcreteComponent)具有相同的超类型(Component)。在这里,我们利用继承达到“类型匹配”,而不是利用继承获得行为。由于装饰者和被装饰者有相同的类型,所以装...原创 2017-03-28 23:05:21 · 271 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第2章-观察者模式
定义观察者模式(observer pattern)定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会接收到通知并自动更新。类图代码实现下面以气象站为例子,说明观察者模式的实现。先给出类图如下。 定义主题接口,所有具体的主题都要实现这个接口。public interface Subject { // 注册/注销观察者 ...原创 2017-03-07 02:18:25 · 426 阅读 · 0 评论 -
《HeadFirst设计模式》读书笔记-第1章-策略模式
定义策略模式(strategy pattern)定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。类图代码实现定义飞行/呱呱叫行为的接口,因为飞行行为和呱呱叫行为的实现方式类似,所以本例只贴出飞行行为代码,呱呱叫行为类似。public interface FlyBehavior { public void fly();...原创 2017-03-05 10:54:01 · 443 阅读 · 0 评论 -
面向对象的设计原则
本文罗列了面向对象(OO)程序设计的九个原则(principle)。我们在讲设计模式的时候,要先讲OO原则,千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况下,我们必须回归到OO原则,以方便取舍,可以这么说,OO原则是我们的目标,而设计模式则是我们的做法。原则1: 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码...原创 2017-03-07 02:23:27 · 1235 阅读 · 0 评论