针对问题:在许多继承体系结构中,经常出现的一些问题是在超类中的一些接口只需在部分子类中存在。或者是超类中的接口在子类中的实现算法大同小异,就那么几种方式,这样的话每当添加一个子类就不得不在已存在某个子类中复制粘贴,没有达到复用的目的。
策略模式的结构:
策略模式的java实现:
/**
* 抽象类(将那些用继承不能解决的接口换成 用组合接口的形式实现动态改变形为)
* @author bruce
*
*/
public abstract class Context {
/**
* 组合策略接口
*/
protected Strategy strategy;
/**
* 委托策略形为
*/
public void performAlgorithm(){
strategy.algorithmInterface();
}
public abstract void otherInterface();
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
}
/**
* 策略接口
* @author bruce
*
*/
public interface Strategy {
public void algorithmInterface();
}
/**
* 策略实现(算法A)
* @author bruce
*
*/
public class ConcreteStrategyA implements Strategy{
public void algorithmInterface() {
// TODO Auto-generated method stub
System.out.println("A 算法");
}
}
/**
* 策略实现(算法B)
* @author bruce
*
*/
public class ConcreteStrategyB implements Strategy{
public void algorithmInterface() {
// TODO Auto-generated method stub
System.out.println("B 算法");
}
}
/**
* 实现类(实现重构后的抽象类)
* @author bruce
*
*/
public class ConcreteContext extends Context{
public ConcreteContext(){
strategy=new ConcreteStrategyA();
}
@Override
public void otherInterface() {
// TODO Auto-generated method stub
}
}
/**
* 测试
* @author bruce
*
*/
public class Client {
public static void main(String[] args) {
Context context=new ConcreteContext();//ConcreteContext默认为A算法
context.performAlgorithm(); //output:A 算法
Strategy strategyB=new ConcreteStrategyB();
context.setStrategy(strategyB);//改变context的算法
context.performAlgorithm();//output:B 算法
}
}
- 大小: 5.2 KB
分享到:
相关推荐
处理对象的多种状态及其相互转换——状态模式(五) 处理对象的多种状态及其相互转换——状态模式(六) 策略模式-Strategy Pattern 算法的封装与切换——策略模式(一) 算法的封装与切换——策略模式(二) 算法的...
DesignPattern 设计模式,共10章。内容详细,案例设计齐全。对设计可复用的面向对象的软件很有帮助,有助你写出又质量,并且可重复使用的高品质软件
DesignPattern 新版設計模式(C#) 講述23種設計模式: ◆結構圖 ◆生活例子 ◆意圖 ◆適用性 ◆示例代碼 ◆實際應用
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) 生成...
本书已经成为面向对象技术人员的圣经和词典,书中定义的23个模式逐渐成为开发界技术交流所必备的基础知识和语汇。
DesignPattern_BasicKnowledge设计模式之类关系:设计模式 类关系 基础 依赖 关联
深入浅出设计模式 (Head First Design Pattern)_带书签 深入浅出设计模式 (Head First Design Pattern)_带书签
Design*Pattern*Framework*4.5
golang design pattern go 设计模式实现,包含 23 -go-design-pattern
Mobile Design Pattern Gallery : UI Patterns for Mobile Applications原版 全彩 120M大容量《移动应用ui设计模式》是一本移动应用ui 设计模式参考书,分10 大类介绍了70 个移动应用设计模式(包括反模式),用400 ...
Theresa Neil's new book "Mobile Design Pattern Gallery" provides solutions to common design challenges. There is inspiration on every topic from designing your application's navigation to choosing ...
DesignPattern(设计模式迷你手册)
设计模式——策略模式Strategy design pattern _ model
chain 设计模式 DesignPattern 供应链模式
golang design pattern; 设计模式golang版本-go-design-patterns
C++ 23种设计模式(全_解释+源代码).zip 23种设计模式都是基于以下原则,务必记牢 依赖倒转原则 里氏代换原则 开闭原则 接口隔离原则 合成聚合复用原则 迪米特法则 23种设计模式如下:
你不想重新发明车轮(或者更差的是,没有充气车胎的轮子),所以你从设计模式中寻求帮助—— 设计模式是过去人们面对同样的软件设计问题所得到的经验。 有了设计模式,就可以利用其他人的实践经验的精华, 因此省下...
JAVA software design pattern