`
xieyaxiong
  • 浏览: 41073 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

design pattern——策略模式

 
阅读更多

 

针对问题:在许多继承体系结构中,经常出现的一些问题是在超类中的一些接口只需在部分子类中存在。或者是超类中的接口在子类中的实现算法大同小异,就那么几种方式,这样的话每当添加一个子类就不得不在已存在某个子类中复制粘贴,没有达到复用的目的。

 

 

 

 

策略模式的结构:

 

 

 

 

 

策略模式的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
分享到:
评论

相关推荐

    design-pattern-java.pdf

    处理对象的多种状态及其相互转换——状态模式(五) 处理对象的多种状态及其相互转换——状态模式(六) 策略模式-Strategy Pattern 算法的封装与切换——策略模式(一) 算法的封装与切换——策略模式(二) 算法的...

    Designpattern.zip

    在这个名为"Designpattern.zip"的压缩包中,我们聚焦于Java编程语言中的一个关键设计模式——工厂模式。这个模式属于创建型模式,它提供了一种创建对象的最佳方式,旨在简化对象的创建过程,并提高代码的可读性和可...

    Head First Design Pattern

    《Head First Design Patterns》是设计模式领域的一本经典著作,以其独特的教学方式——结合生动的插图和幽默易懂的实例,深入浅出地解析了23种经典的GoF设计模式。这本书旨在帮助读者理解并掌握如何在实际的面向...

    GoF的经典著作设计模式(Design Pattern)

    21. **策略模式**:定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略对象改变算法的行为。 22. **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变...

    模式举例代码——设计模式和举例代码

    - 策略模式:定义一系列算法,并将每个算法封装起来,使它们可以相互替换。 - 模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - 访问者模式:表示一个作用于某对象结构中的各元素的操作,...

    Design Pattern FrameworkTM

    为了帮助 .NET 开发者更好地理解和应用这些设计模式,《Head First 设计模式》为 .NET 2.0 特别推出了一个配套文档——《设计模式框架》(Design Pattern FrameworkTM),该文档涵盖了原书中介绍的所有设计模式,并...

    HeadFirst Design Pattern

    3. 行为型模式:这类模式主要关注对象间的交互和责任分配,如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、备忘录模式(Memento...

    GOF之23种设计模式的C#实现:DesignPattern.zip

    通过阅读GOF23种设计模式.docx文档和探索DesignPattern项目中的代码,你可以深入理解每种模式的用途、优点以及如何在C#和.NET Core环境中实现它们。对于想要提升编程技能和代码质量的开发者来说,这是一个宝贵的资源...

    design-pattern(设计模式,包括创建型、结构型、行为型三大类共23种常见的设计模式和J2EE常见设计模式等).zip

    本压缩包"design-pattern(设计模式,包括创建型、结构型、行为型三大类共23种常见的设计模式和J2EE常见设计模式等).zip"提供了全面的设计模式学习资源,适用于初学者和有经验的开发者,帮助他们提升软件设计能力。...

    Introduction to Design Pattern in C#

    策略模式(Strategy)定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。这类模式使得系统内部组件的交互更加灵活,同时也提高了代码的复用性。 在C#中,设计模式的...

    Design Pattern

    - 策略模式(Strategy):定义一组相关或相互排斥的算法,并将每个算法封装起来,使它们可以互相替换。 - 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不...

    GOF-设计模式-Design Patterns-英文原版-高清-有目录-有页码

    **设计模式**(Design Patterns)是软件工程中的一个重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。本章节将从多个角度对设计模式进行深入探讨。 #### 二、设计模式的基本定义 ...

    gof设计模式中英双语版

    3. 行为型模式:这类模式主要关注对象间如何交互和分配责任,例如责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式...

    Head First Design Patterns

    - **行为型模式**:包括策略模式、模板方法模式、观察者模式、迭代器模式、访问者模式、命令模式、备忘录模式、状态模式、解释器模式等。这些模式侧重于对象间的交互方式。 #### 五、结语 《Head First Design ...

    aula-design-pattern-strategy

    总的来说,"aula-design-pattern-strategy"项目提供了一个深入理解并实践Java策略模式的平台,对于提升开发者的设计思维和编程技巧具有重要的价值。通过深入研究这个项目,我们可以更好地理解和运用设计模式,从而写...

    DataStructure-DesignPattern:java集合原始资源,设计模式,常用算法,Mysql原理

    本资料包"DataStructure-DesignPattern:java集合原始资源,设计模式,常用算法,Mysql原理"正是这样一个宝藏,涵盖了编程中的重要领域,包括Java集合、设计模式、算法以及MySQL数据库原理。 首先,让我们深入Java...

Global site tag (gtag.js) - Google Analytics