- 浏览: 1316398 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
考虑您要设计一个更换各种符号的工具类TextCharChange,您是否会采用这样的方式:
public void replace() {
switch(getChangeType()) {
case RN_TYPE: replaceRN();
break;
case N_TYPE: replaceN();
break;
case OTHER_TYPE: replaceOTHER():
break;
...
}
}
switch(getChangeType()) {
case RN_TYPE: replaceRN();
break;
case N_TYPE: replaceN();
break;
case OTHER_TYPE: replaceOTHER():
break;
...
}
}
这么作的缺点是,日后您要增加更换符号的策略时,会有几个地方需要修改:增加TYPE常数、增加TextCharChange中的 replaceXXX()方法、增加 replace()方法中的switch case判断。
像这种策略采用的情况,可以将策略加以封装为一个物件,而不是将策略写死在某个类中,如此一来,策略可以独立于客户端,随时增加变化、增加或减少策略,即使是修改每个策略的内容,也不会对客户端程式造成影响。
来举个最简单的例子,首先要知道Windows与Linux的文字档案换行符号是不同的,Windows是 /r/n ,而Linux是 /n,今天您要设计一个文字编辑器,在适当的时候,您必须要能随时转换这两种符号,如果不采用上面的策略采用流程的话,要如何设计:
- TextStrategy.java
public abstract class TextStrategy { protected String text; public TextStrategy(String text) { this.text = text; } public abstract String replace(); }
- LinuxStrategy.java
public class LinuxStrategy extends TextStrategy { public LinuxStrategy(String text) { super(text); } public String replace() { preOperation(); System.out.println( text = text.replaceAll("@r@n", "@n")); postOperation(); return text; } private void preOperation() { System.out.println("LinuxStrategy preOperation"); } private void postOperation() { System.out.println("LinuxStrategy postOperation"); } }
- WindowsStrategy.java
public class WindowsStrategy extends TextStrategy { public WindowsStrategy(String text) { super(text); } public String replace() { startOperation(); System.out.println( text = text.replaceAll("@n", "@r@n")); endOperation(); return text; } private void startOperation() { System.out.println("WindowsStrategy startOperation"); } private void endOperation() { System.out.println("WindowsStrategy endOperation"); } }
- TextCharChange.java
public class TextCharChange { public static void replace(TextStrategy strategy) { strategy.replace(); } }
- Main.java
public class Main { public static void main(String[] args) { String linuxText = "This is a test text!!@n Oh! Line Return!!@n"; String windowsText = "This is a test text!!@r@n Oh! Line Return@r@n"; // load file, suppose it's Linux's text file // take the WindowsStrategy // I want to change it to Windows' text file TextCharChange.replace( new WindowsStrategy(linuxText)); // such-and-such operation..... System.out.println(); // load file, suppose it's Windows' text file // take the LinuxStrategy // I want to change it to Linux's text file TextCharChange.replace( new LinuxStrategy(windowsText)); } }
为了明显的秀出结果,我们使用@n来表示 '/n' , @r 表示 '/r' 符号,Main中的流程是个假设的情况,何时采用何种策略是随机的。
在Strategy模式中,使用一个公开的介面replace(),让客户端请求,而在实作replace()时,可以任意的组合演算策略,程式中的 preOperation()、postOperation()就是用以示意演算的组合概念,Strategy模式封装了这些演算过程,使它们易于组合、修改、替换
发表评论
-
Java 事件传送技术
2010-12-20 14:16 1442developerWorks 中国 ... -
Design Pattern: Mediator 模式
2010-11-13 23:31 1183Mediator的意思是中介者、调节者、传递物,顾名思义,这个 ... -
Design Pattern: Command 模式
2010-11-13 23:30 1064如果您写过Java的Swing视窗程式,您可能使用过Comma ... -
Design Pattern: State 模式
2010-11-13 23:22 993如果您不了解TCP的连线方式,在看 Gof 的书介绍State ... -
Design Pattern: Read-Write-Lock 模式
2010-11-10 23:58 1144如果有一个资料档有可能同时间会有许多客户端对它进行读取与写入的 ... -
Design Pattern: Producer Consumer 模式
2010-11-10 23:52 1271Producer Consumer模式与 Guar ... -
Design Pattern: Guarded Suspension 模式
2010-11-10 23:48 1091考虑这么一个伺服器,它可以处理来自多个客户端的服务请求(Req ... -
Design Pattern: Observer 模式
2010-11-10 23:33 1004Java深入到一定程度,就不可避免的碰到设计模式(design ... -
Design Pattern: Iterator 模式
2010-11-10 23:22 1055这个模式已经被整合入Java的Collection.在大多数场 ... -
Design Pattern: Interpreter 模式
2010-11-10 23:17 1222对于一个具有层次节点关系的问题来说,如果您要剖析每一个节点,您 ... -
Design Pattern: Command 模式
2010-11-10 23:08 1298Command定义n 将来自客户端的请求传入一个对象,无需了解 ... -
Design Pattern: Chain of Responsibility 模式
2010-11-10 23:00 1210其实Chain of Responsibility ... -
Design Pattern: Proxy 模式
2010-11-10 22:51 1558来看看实现代理的两种方式:Static Proxy与Dynam ... -
Design Pattern: Flyweight 模式
2010-11-10 22:48 1367Flyweight(享元)模式定义:避免大量拥有相同内容的小类 ... -
Design Pattern: Facade 模式
2010-11-10 22:42 1255Facade模式的定义: 为子系统中的一组接口提供一个一致的界 ... -
Design Pattern: Decorator 模式
2010-11-10 22:35 1308装饰模式:Decorator常被翻译成"装饰&quo ... -
Design Pattern: Bridge 模式
2010-11-10 22:24 1122Bridge模式定义 :将抽象 ... -
Design Pattern: Default Adapter 模式(二)
2010-11-10 22:16 1484适配器模式定义:将两个 ... -
Design Pattern: Default Adapter 模式
2010-11-10 22:07 1070在Java中如果要定义事件 ... -
Design Pattern: Singleton 模式
2010-11-10 22:06 1011Singleton的英文意义是独身,也就是只有一个人,应用在物 ...
相关推荐
Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 Design Pattern: Singleton...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm”供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) 生成...
DesignPattern Android源码设计模式解析与实战读书笔记源代码 说明: 包名factorypattern.normal表示的是工厂方法模式的普通用法 包名factorypattern.practices表示的是工厂方法模式的常用 包名observerpattern表示...
hello-design-pattern 设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不...
介绍 Design Pattern的用处,定义,分类,并对几个典型性Design Pattern进行举例说明,如strategy Design Pattern
DesignPattern 在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern ...
design pattern 设计模式 创建型设计模式 创建型模式设计到将对象实例化,这类模式都提供了一个方法,将客户从所需要的实例化对象中解耦。 原型模式 Prototype 结构型设计模式 结构型模式可以让你把类或者对象组合到...
设计模式——策略模式Strategy design pattern _ model
5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为...
headfirst design pattern C++ code(first chapter strategy's code for linux)
处理对象的多种状态及其相互转换——状态模式(五) 处理对象的多种状态及其相互转换——状态模式(六) 策略模式-Strategy Pattern 算法的封装与切换——策略模式(一) 算法的封装与切换——策略模式(二) 算法的...
• Chapter 9: The Strategy Pattern • Chapter 10: The Bridge Pattern • Chapter 11: The Abstract Factory Pattern • Chapter 12: How Do Experts Design? • Chapter 13: Solving The CAD/CAM Problem ...
Learn how to implement design patterns in Java: each pattern in Java Design Patterns is a complete implementation and the output is generated using Eclipse, making the code accessible to all....
策略模式 意图 定义一系列算法,封装每个算法,并使它们可互换。策略使算法可以独立于使用该算法的客户端而变化。 适用性 在以下情况下使用策略模式 许多相关的类仅在行为上有所不同。策略提供了一种使用多种行为之...
模式不会像在现实生活中那样混合在一起工作,例如 Strategy 通常与 Factory 等一起使用。 目的是了解幕后的关键思想。 这就是为什么尽量避免Generics 、 Collections 、 Reflection API或其他强大的 Java 工具和...
It starts with a general introduction to all types of programming patterns and goes on to describe 10 of the most popular design patterns in detail: Singleton, Iterator, Adapter, Decorator, State, ...
第19章 明修栈道,暗度陈仓:策略模式 (Strategy) 第20章 循序渐进:职责链模式 (ChainofResponsibility) 第21章 独具匠心:命令模式 (Command) 第22章 步调一致:访问者模式 (Visitor) 第23章 左右逢源:调停者模式...
设计模式(22)-Strategy Pattern 设计模式(21)-Template Method Pattern 设计模式(20)-Visitor Pattern 设计模式(19)-Observer Pattern 设计模式(18)-Command Pattern 设计模式(17)-Chain of ...
designpattern##描述此工程是用Java写的设计模式代码示例,所有模式代码都放在designpattern.pattern.*包下##设计模式简介*策略模式(strategy):策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们...