`
一口三个汉堡
  • 浏览: 115337 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

为什么策略模式叫做策略模式

阅读更多

  我想我疯了。。。跑到网吧来写代码。。。。。

  昨天看了《Head First 设计模式》刚看了第一章,感觉收获很大,至少我知道什么是策略模式。。。但是到昨天看完之后我还是不了解为什么叫做策略模式。。。后来在厕所里想了下。。。。。。。今天就跑到网吧把我的想法写出来了。。。放清明,电脑还在学校(悲剧的台式机)

战将类--小说《修真世界》中战将就使用策略的高手,将使用的策略的具体实现交给Strategy类去实现,就把变化的部分的分离开了。

 

package com.wjh.celue;

public class Fights {
	//策略实例变量
   	Strategy myStrategy;
	public Fights(Strategy strategy)
	{
		//初始化
		this.myStrategy = strategy;
	}
	//设置策略
	public void SetStrategy(Strategy strategy)
	{
		this.myStrategy = strategy;
	}
	//使用策略
	public void useStrategy()
	{
		myStrategy.use();
	}

}

 策略类---策略的总父类,其子类必须实现其use方法,所有的具有相互替换性

package com.wjh.celue;
/**
 * 策略的抽象类,策略的子类必须实现use方法
 * @author Administrator
 *
 */
public abstract class Strategy {
	public abstract void use();

}

 空城计--策略的子类,实现了use方法.

package com.wjh.celue;

import static com.wjh.print.MyPrint.*;
//继承策略类
public class KongChengJi extends Strategy{

	@Override
	public void use() {
		// TODO Auto-generated method stub
		println("使用空城记");	
	}

}

 

美人计--策略的子类,同样实现了use方法.

package com.wjh.celue;

import static com.wjh.print.MyPrint.*;
/**
 * 策略类的子类,实现use方法
 * @author Administrator
 *
 */
public class MeiRenJi extends Strategy{

	@Override
	public void use() {
		// TODO Auto-generated method stub
		println("使用美人计");
	}

}

 主类---创建战将类实例小娘(在<<修真世界>>中,小娘是一个战将),他会使用各种策略.

创建各种策略对象,并让小娘使用.

因为他们都继承于策略类,在多态的神奇效果下,他们都调用他们本身的use方法.

package com.wjh.main;

import com.wjh.celue.Fights;
import com.wjh.celue.KongChengJi;
import com.wjh.celue.MeiRenJi;

public class MainUi {
	public static void main(String[] args)
	{
		//创建战将类对象小娘
		Fights xiaoLiang = new Fights(new KongChengJi());
		//小娘使用策略
		xiaoLiang.useStrategy();
		//小娘换策略
		xiaoLiang.SetStrategy(new MeiRenJi());
		//小娘使用策略
		xiaoLiang.useStrategy();
	}

}

 总结...虽然小娘并不会使用空城计和美人计,但是通过这个例子,我更了解为什么策略模式叫做策略模式...

 

策略模式的定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化(来自百度百科)

 

但我自己觉得那些算法就是一个个的策略(或许他们本来就是一样的),用于解决各种问题.

而因为计划永远赶不上变化,所以我们把变化拿出来,整成一个方法集(例如:36计).在实施(打仗)的时候,

我们根据需要去使用相应的方法(策略),这就达到了一种以不变应万变的效果...

 

 

备注:以上内容都是我自己在学习过程中的想法,或许是错的,请大家告诉我......谢谢...

2
0
分享到:
评论
6 楼 一口三个汉堡 2011-04-15  
qingBYqing 写道
跑到网吧里写代码   实在佩服, 有一次 我也有这个冲动 ,但是想到要在网吧里配置环境 就烦
我上了一小时网,半个小时下东西,10分钟左右配置环境,10分钟写代码,10分钟发表文章。。。配置环境是个问题。。。
5 楼 qingBYqing 2011-04-15  
跑到网吧里写代码   实在佩服, 有一次 我也有这个冲动 ,但是想到要在网吧里配置环境 就烦
4 楼 一口三个汉堡 2011-04-05  
深夜未眠 写道
博主,我也对策略模式研究过很长一段时间,对模式的应用也有一些自己的感悟,比方说策略模式可以使创建类的数量减少,这也算是应用设计模式的一种心理暗示,所以说除理论理解透之外还需要实际应用的思考~~~

是的,我还需要实际应用的思考,希望你能把你的想法和测试结果写出来,然后告诉我,那样我就可以对策略模式更了解了。。谢谢。
3 楼 一口三个汉堡 2011-04-05  
cloverprince 写道
是不是可以根据实际情况,自动选择一种策略呢?

你说的自动。。我个人觉得还是取决于使用者的意愿。。。
2 楼 cloverprince 2011-04-04  
是不是可以根据实际情况,自动选择一种策略呢?
1 楼 深夜未眠 2011-04-04  
博主,我也对策略模式研究过很长一段时间,对模式的应用也有一些自己的感悟,比方说策略模式可以使创建类的数量减少,这也算是应用设计模式的一种心理暗示,所以说除理论理解透之外还需要实际应用的思考~~~

相关推荐

    设计模式之策略模式,商场收银,封装算法

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或场景来执行不同算法的情况。策略模式就是为了解决这类问题而提出的,它将每种算法封装到具有共同接口...

    策略模式案例源码

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中,我们创建表示各种策略的对象和一个行为根据...

    C#,设计模式,策略模式,鸭子,

    C#是一种广泛应用的面向对象的编程语言,它支持多种设计模式,其中包括策略模式。策略模式是一种行为设计模式,允许我们在运行时根据需要改变一个对象的行为。 策略模式的核心思想是定义一系列的算法,并将每一个...

    设计模式解读之--策略模式.pdf

    ### 设计模式解读之策略模式 #### 模式定义与核心思想 策略模式是一种行为设计模式,它使得算法可以独立于使用它的客户而变化。在软件工程中,策略模式允许一组算法封装成一系列的类,它们共享相同的接口,但内部...

    Android策略模式简单Demo

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Android开发中,策略模式可以帮助我们处理复杂的业务逻辑,让代码更加灵活且易于维护。在这个“Android策略模式简单Demo”中,我们将深入理解如何在...

    headfirst 策略模式代码

    《深入理解Headfirst策略模式——基于Java代码实例》 策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Headfirst的讲解中,这个模式被巧妙地通过鸭子的例子来阐述,使得复杂的概念变得生动易懂。在...

    策略模式源码

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式主要通过定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户。这种模式的核心在于策略接口...

    实验一:鸭子游戏-策略模式.rar

    通过这种方式,我们可以根据需要为鸭子实例动态地配置不同的行为,例如,我们可以在游戏中创建一只不会飞但会叫的鸭子,或者一只既不会飞也不会叫的鸭子。 此外,这个实验还可能涉及到面向对象设计原则,如单一职责...

    深入浅出设计模式(C#版)--策略模式--示例代码

    例如,在"深入浅出设计模式(C#版)--策略模式--示例代码"中,可能会有一个`IDuck`接口,它定义了飞、叫等基本行为。然后有多个具体的鸭子类型,如`MallardDuck`、`RedheadDuck`等,每个类型可能有不同的飞行和叫声...

    策略模式的小例子

    自己编写的一个策略模式的简单例子,可以用于学习参考,同时本例子中还使用了泛型。导入到Eclipse中直接可以运行。...我还写了一篇博文是和本程序相对应的,叫“设计模式之策略模式”,大家感兴趣的可以去看看!

    java_策略模式

    策略模式是一种设计模式,它的核心思想是将一系列算法封装成独立的类,使得它们可以互相替换,同时让算法的变化不会影响使用算法的客户。在Java中,策略模式可以帮助我们更好地管理代码,避免过度依赖继承,提高代码...

    设计模式---策略者模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要在不同时间或根据不同条件执行不同算法的情况。策略模式允许我们将算法封装到独立的可互换的策略类中,使得算法的变化...

    深入浅出设计模式一——Duck设计(策略模式)

    《深入浅出设计模式一——Duck设计(策略模式)》 在软件开发中,设计模式是一种被广泛接受并重复使用的解决方案,它针对特定问题提供了一种通用的、可复用的设计方案。策略模式是其中一种行为设计模式,用于定义...

    Java设计模式之策略模式

    **策略模式**是Java设计模式中的行为模式之一,它的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。这种模式让算法的变化独立于使用算法的客户。在Java编程中,策略模式常用于处理那些...

    设计模式解读之一: 策略模式——鸭子游戏.doc

    设计模式解读之一:策略模式——鸭子游戏 策略模式是指定义amily of algorithms,encapsulate each one,and make them interchangeable,这种模式让我们可以在不修改原始代码的情况下,灵活地更换算法。下面我们来...

    根据策略模式,设计并实现模拟鸭子程序

    请根据策略模式,设计并实现模拟鸭子程序。其中,部分代码已经写好,包括: 主程序 "飞行”行为接口 "叫”行为接口 鸭子的基类 请在此框架下,继续完成MallardDuck、RubberDuck、DecoyDuck和ModelDuck等子类,以及...

    策略模式-java

    ### 策略模式-java #### 模式定义与背景 策略模式是一种行为设计模式,它使得算法可以独立于使用它的客户端而变化。简而言之,这种模式允许你在运行时改变对象的行为。策略模式的核心思想是将算法或者行为封装成一...

    《Head First设计模式》读书笔记 -- (第一章)策略模式

    在《Head First设计模式》的第一章中,通过鸭子的行为为例,生动地展示了策略模式的工作原理和实际应用。通过阅读和理解这个例子,开发者可以更好地理解和运用策略模式到自己的项目中,提升软件设计的质量和可维护性...

    深入浅出设计模式之策略模式总结(一)附例子

    在这个“深入浅出设计模式之策略模式总结(一)”中,我们将深入探讨策略模式的基本概念、工作原理以及如何通过实例来应用它。 策略模式的核心是将算法封装到具有共同接口的独立类中,使得它们可以相互替换。在描述...

    策略模式(headfirst note)

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Headfirst Note中,策略模式被用来处理不同类型的鸭子(Duck)的行为。这个压缩包包含了一个名为"Duck1.jude"的文件,这可能是一个用某种特定格式...

Global site tag (gtag.js) - Google Analytics