`
dcriori
  • 浏览: 96889 次
社区版块
存档分类
最新评论

设计模式学习笔记(一) 策略模式

阅读更多




 
 策略模式,“策略”可以实现目标的方案集合。也就是说一件事情,有多种方法可以实现,但根据实际情况的不同,我们要用我们已知的不同方法去实现,即用不同策略应对不同的情况。注意,是已知的方法,也就是说,我们之前准备好的方法

如果是突发事件,策略就没有用了。这也是策略模式的一个弱点,就是随着情况的增多,我们相应的策略也要增多。

Strategy适合下列场合:

一、拿开发应用程序来讲

1.以不同的格式保存文件;

2.以不同的算法压缩文件;

3.以不同的算法截获图象;

4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等

二、拿企业业务来讲

比如我们做一个收购程序,要给不同的企业用,但不同的企业因各自的差异,他们收购的方式是不一样的。就拿给收购的产品订价这件事来讲吧,企业1订价的规则跟企业2订价规则是不一样的,可能还有企业3。。。。企业N。我们不可能用一个通用的代码来实现所有的这些企业的规则。那么可以用策略模式来做这件事,为每个企业实现不同的算法,在实际情况中调用相应的算法来给企业计算订价结果。(这个例子,想来想去都觉得不是很贴切,不过主要是理解,理解就好!)

 

写了一遍代码,加深记忆:

首先建立接口,定义功能

package dcr.study.dp.strategy;
public interface IPriceRule {
	float getPrice(String conditions);
	
}

 然后为不同的情况实现不同的算法

package dcr.study.dp.strategy;

public class PriceRuleOne implements IPriceRule {

	public float getPrice(String conditions) {
		return 1.3f;
	}

}


package dcr.study.dp.strategy;

public class PriceRuleTwo implements IPriceRule {

	public float getPrice(String conditions) {
		return 2.3f;
	}

}


package dcr.study.dp.strategy;

public class PriceRuleThree implements IPriceRule {

	public float getPrice(String conditions) {
		return 3.3f;
	}

}

 再弄个Context 来调用这些算法

package dcr.study.dp.strategy;

public class PriceRuleSolve {
	private IPriceRule strategy;
	public PriceRuleSolve(IPriceRule rule){
		this.strategy = rule;
	}
	
	public float getPriceResult(String conditions){
		return strategy.getPrice(conditions);
	}
}

 最后是实际的使用,根据不同的情况,通过Context调用不同的方法

package dcr.study.dp.strategy;

public class Application {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		PriceRuleSolve solve = new PriceRuleSolve(new PriceRuleOne());
		solve.getPriceResult("input some conditions");
            solve = new PriceRuleSolve(new PriceRuleTwo());
		 solve.getPriceResult("input some conditions");

	}

}

 

  • 大小: 49.3 KB
分享到:
评论

相关推荐

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    HeadFirst 设计模式学习笔记1--策略模式Demo

    《HeadFirst设计模式学习笔记1--策略模式Demo》 在软件工程中,设计模式是一种解决常见问题的标准方案,它提供了一种在特定情况下组织代码的模板。策略模式是设计模式中的一种行为模式,它允许在运行时选择算法或...

    23种设计模式学习笔记

    这个“23种设计模式学习笔记”文档将引导你深入理解这些模式,并帮助你在实际编程中有效地应用它们。以下是对23种设计模式的详细解读: 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。它常用于控制...

    23种设计模式学习笔记及源码

    这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...

    C#设计模式学习笔记

    以下是对“C#设计模式学习笔记”中涉及的一些关键知识点的详细解释。 1. **设计模式的基本概念**: 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了如何在软件设计中解决常见问题。设计模式...

    设计模式学习笔记

    设计模式是软件开发中的一种重要概念,它提供了一套经过实践验证的解决方案,用来解决常见的设计问题。在本文中,我们将探讨三个主要的设计模式:简单工厂模式、策略模式以及两个重要的设计原则:单一职责原则和开放...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    Head.First 设计模式学习笔记.pdf

    ### Head.First 设计模式学习笔记知识点总结 #### 一、设计模式概述 设计模式是一种用于解决软件设计中常见问题的标准化方法。通过采用设计模式,开发者可以提高代码的复用性、灵活性和可维护性。《Head First 设计...

    java设计模式学习笔记,以及各种模式的代码实现

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可读性、可维护性和可复用性。这些模式是面向对象编程中的一种最佳实践,通过标准化的方式处理常见的设计问题。下面...

    #资源大人分享计划# 设计模式学习笔记.rar

    在这个“#资源大人分享计划# 设计模式学习笔记.rar”压缩包中,我们可以期待找到一系列关于设计模式的详细学习资料,包括定义、类图、代码示例以及各种使用场景,这些都将帮助我们深入理解并掌握设计模式。...

    尚硅谷设计模式源码笔记课件.zip

    2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,...

    设计模式笔记

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决问题的...设计模式笔记中的内容应该涵盖了以上所述的各种模式,通过深入学习和实践,你可以将这些模式应用到实际项目中,提升自己的编程技能和设计能力。

    GoF 23种设计模式学习笔记

    "GoF 23种设计模式学习笔记" 是一个深入探讨这23个经典设计模式的资源,这些模式最初由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者在1994年的著作《设计模式:可复用面向对象软件的基础》中...

    23中设计模式学习笔记.docx

    ### 23种设计模式学习笔记 #### 一、软件设计模式的概念与意义 **概念:** 软件设计模式(Software Design Pattern),又称设计模式,是一套被广泛采用、经过整理和分类的代码设计经验总结。它针对软件设计过程中...

    图解java设计模式_学习笔记_java开发

    这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式的核心概念、分类以及它们在实际开发中的应用。 设计模式分为三大类:创建型、结构型和...

    图解设计模式 ,结城浩著 学习笔记

    根据给定的信息“图解设计模式,结城浩著学习笔记”,我们可以推断出这份文档主要涉及了设计模式的学习和理解。《图解设计模式》是一本由日本著名程序员结城浩撰写的书籍,该书以图形化的方式深入浅出地讲解了软件...

Global site tag (gtag.js) - Google Analytics