
设计模式
文章平均质量分 86
iteye_9280
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式:装饰模式
JAVA 的IO模块如果不使用装饰模式,会需要更多的IO类,如带缓冲的并能读取基本类型的类、读取字节数组的缓冲类等等。 package com.test.decrator;//抽象构件角色public interface Component { public void dosometing();} package com.tes...原创 2011-08-04 00:31:31 · 109 阅读 · 0 评论 -
适配器与外观(Facade)模式(Head First版)
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 例如在香港的水货手机充电器插头无法适应大陆的插座,需要一个第三方转换器。这个转换器也就是适配器。在介绍策略模式时,有写过一个鸭子接口 package com.headfirst.chapter7;public interface Duck { public void q...原创 2012-06-02 17:45:25 · 192 阅读 · 0 评论 -
命令模式(Head First版)
用命令模式实现这样一个需求:有个按钮,将一盏电灯的开和关动作都绑定在这个按钮上。另外还有一个undo按钮,可撤消之前的一个动作。 package com.headfirst.chapter6;public interface Command { public void execute(); public void undo();} ...原创 2012-05-31 01:01:09 · 108 阅读 · 0 评论 -
设计模式:装饰模式(Head First版)
装饰者模式:动态地将责任附加到对象上,若到扩展功能,装饰者提供了比继承更有弹性的替代方案。 UML图 有这样一个需求,咖啡店出售各式咖啡,如深焙、低卡、摩卡等,也有各种调料,如牛奶、奶泡等。咖啡店需要根据咖啡中所放入的不同调料收取不同的费用。用装饰者模式来实现 定义一个抽象组件 package com.headfirst.chapter3;/** *...原创 2012-05-28 23:50:26 · 99 阅读 · 0 评论 -
观察者模式(Head First版)
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 有这样一个需求:一个气象站,它会提供气温,气压,湿度等气象数据,要实现一个显示当前气象状态的显示装置。能显示当前气温、气压、湿度等。当气象站的数据一发生改变,就能通知显示装置。使用观察者模式实现。 先看看观察者模式类图: 主题是一个接口,定义了注册观察者、...原创 2012-05-27 00:43:41 · 134 阅读 · 0 评论 -
单例模式(Head First版)
单例模式:确保一个类只有一个实例,并提供一个全局访问点。代码实现:package com.headfirst.chapter5;public class Singleton { private static Singleton singleton; private Singleton(){} public static Singleton getInstance(){...原创 2012-05-23 20:29:56 · 111 阅读 · 0 评论 -
工厂模式:抽象工厂
接着上一篇说过的工厂方法,这节来谈一谈抽象工厂:首先来看一个设计原则依赖倒置原则:要依赖抽象,不要依赖具体类。不能让高层组件依赖低层组件,而且,不管高层或低层组件,“两者”都应该依赖于抽象。 再回到比萨店:使用工厂方法后,各地的比萨加盟店生意火爆,但也有些加盟店使用劣质原料,导致信誉下降。现在我们要创建一个工厂来生产原料,这个工厂负责创建原料家族中的每一种原料。先来为原...原创 2012-05-23 17:19:47 · 114 阅读 · 0 评论 -
工厂模式:工厂方法
还是利用比萨店的例子,我们来看看一般工厂模式:如果比萨店有许多加盟店,并且这些加盟店必须严格按照总部的要求生产比萨。比如烘烤、切片、打包的方式。但允许加盟店根据各地的特色制作比萨。这要如何实现? 我们可以定义一个抽象类PizzaStore,这个类中有两个方法orderPizza和createPizza,其中createPizza是抽象的。由子类来具体实现。在orderPiz...原创 2012-05-23 00:12:07 · 107 阅读 · 0 评论 -
工厂模式:简单工厂
为什么要使用工厂模式?先看一个例子: Duck duck = new MallardDuck();//野鸭 我们在实例化的时候,用的是具体类(new后面的是具体类)。绑定具体类会导致代码更脆弱,缺乏弹性。当有一群相关类时,通常会写出这样的代码: Duck duck;if(picnic){ duck = new MallardDuck();}else ...原创 2012-05-22 21:11:32 · 115 阅读 · 0 评论 -
设计模式:代理模式
1,抽象角色package com.langsin.proxy;//抽象角色public abstract class Subject { abstract public void request();} 2,真实角色package com.langsin.proxy;//真实角色public class RealSubj...原创 2011-09-21 11:20:48 · 91 阅读 · 0 评论 -
设计模式:工厂模式
代码示例:定义一个Person接口package com.test.simplefactory;public interface Person { public String sayHello(String name); public String sayGoodbye(String name);} 定义两个具体类,分别实现Pe...原创 2011-09-18 14:27:02 · 91 阅读 · 0 评论 -
设计模式:策略模式
策略模式在集合类的Comparator中大量应用策略模式也强调了一个设计原则:多使用组合,少用继承。策略模式就是使用变量来强调“多使用组合”下面定义一个使用策略模式来实现加减乘除 package com.test.strategy;/** * 抽象策略角色 * */public interface Strategy { publi...原创 2011-08-16 23:02:39 · 94 阅读 · 0 评论 -
模板方法模式(Head first)
有人爱喝茶,有人爱喝咖啡,因为两者都含有咖啡因。 咖啡的冲泡方法: 茶的冲泡法:1:把水煮沸 1:把水煮沸2:用沸水冲泡咖啡 2:用沸水浸泡茶叶3:把咖啡倒进杯子 3:把茶倒进杯子4:加糖和牛奶 4:加柠檬 观察上面的步骤发现第1步和第...原创 2012-06-06 22:46:30 · 106 阅读 · 0 评论