`
zhsp1029
  • 浏览: 22355 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

设计模式之一——策略模式及实现

    博客分类:
  • java
阅读更多
策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

策略模式的好处在于你可以动态的改变对象的行为。
设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。


/*
这是一个表现僧人和道士的程序,僧人光头,使用棍子做武器,道士长小胡子,使用拂尘作武器
*/
package strategy;


//处理长相接口
interface LooksBehavier
{
public void display();
}

//处理所使用的武器接口
interface WeaponBehavier
{
public void useWeapon();
}
//角色基类
class Role {
public int heght;     //身高
public int sex;        //性别
public WeaponBehavier weapon;   //处理武器接口的实例
public LooksBehavier looks;     //处理长相的接口的实例
public void display()          //显示长相
{
looks.display();
}
public void weapon()          //设置所使用的武器
{
weapon.useWeapon();
}
}

//道士长相类,实现了长相接口
class TaoistBehavier implements LooksBehavier
{
public void display()    //实现接口函数
{
System.out.println("I'm a taolist with long white goatee");
}

}

//和尚长相类,实现了长相接口
class BonzeBehavier implements LooksBehavier
{
public void display()    //实现接口函数
{
System.out.println("I'm a Bonze with no hair");
}

}

//道士武器类,实现了处理武器接口
class TaoistWeapon implements WeaponBehavier
{
public void useWeapon()    //实现了处理武器接口函数
{
System.out.println("My weapon is horsetail whisk");;
}
}

//和尚武器类,实现了处理武器接口
class BonzeWeapon implements WeaponBehavier
{
public void useWeapon()    //实现了处理武器接口函数
{
System.out.println("My weapon is truncheon");;
}
}

//道士
class Taoist extends Role
{
public Taoist()
{
looks = new TaoistBehavier();
weapon = new TaoistWeapon();
}
}

//和尚
class Bonze extends Role
{
public Bonze()
{
looks = new BonzeBehavier();
weapon = new BonzeWeapon();
}
public void changeWeapon()
{
weapon = new TaoistWeapon();
                  System.out.println("change weapon");
}
}
public class RoleBase{
public static void main(String [] arg)
{
Taoist taoistObj = new Taoist();
Bonze  bonzeObj = new Bonze();
taoistObj.display();
taoistObj.weapon();
bonzeObj.display();
bonzeObj.weapon();
bonzeObj.changeWeapon();  //改变和尚使用的武器
bonzeObj.weapon();
}
}

成功执行后的输出为:
I'm a taolist with long white goatee
My weapon is horsetail whisk
I'm a Bonze with no hair
My weapon is truncheon
change weapon
My weapon is horsetail whisk
分享到:
评论
3 楼 xw11235 2008-03-12  
实现接口的类
2 楼 cljspn 2008-01-22  
设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。
楼主的上句话中的“在类中包含这个对象的实例”的类是哪个类呢。说的是不是不清楚呀。
1 楼 sway 2008-01-21  
一句话,找到变化并封装之。

相关推荐

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

    设计模式——策略模式

    策略模式是一种常用的设计模式,它定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。策略模式的主要优点是它可以使得算法的变化独立于使用算法的客户,从而提高系统的...

    java设计模式之——策略模式

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

    设计模式实现——观察者模式

    在《设计模式实现——观察者模式》这篇博客中,作者可能详细解释了观察者模式的概念、结构以及其在实际编程中的应用。以下是对观察者模式的详细阐述: 1. **模式定义**:观察者模式是一种对象行为型模式,它允许...

    设计模式——策略模式 & 单例模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式将算法族封装在独立的类中,使得它们可以互相替换。策略类之间可以相互替换,用户可以根据需求选择合适的策略,而无需修改代码。策略模式通常...

    设计模式——基于C#的工程化实现及扩展

    ### 设计模式——基于C#的工程化实现及扩展 #### 概述 本书旨在向读者展示如何利用C# 2.0语法有效地实现和应用设计模式,使其不仅仅局限于简单的例子,而是能够在实际工程项目中发挥重要作用。全书分为七个部分,...

    设计模式浅谈1——策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件工程中,我们经常遇到需要根据不同条件或场景动态地改变算法的情况。策略模式就是为了解决这类问题而诞生的,它允许我们用不同的策略(即算法)...

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

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

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

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

    设计模式——原版的设计模式

    设计模式是一种在软件设计中被广泛认可的解决特定问题、经过良好记录并可重用的解决方案。它们代表了在各种编程环境中反复出现的问题的最佳实践。原版的设计模式通常指的是最初由“Gang of Four”(GoF)在他们的...

    设计模式——GFour

    《设计模式——GFour》是一本深受IT从业者喜爱的经典书籍,尤其在C++开发者中具有广泛影响力。设计模式是软件工程领域中的一种最佳实践,它总结了在特定情境下解决问题的常见方法,使得代码可读性更强,复用性更高,...

    设计模式——单例模式

    **设计模式——单例模式** 在软件工程中,设计模式是一种在特定场景下解决常见问题的标准方案,可以被复用并提升代码质量。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)_《0528》.rar

    《设计模式--基于C#的工程化实现及扩展》是一本深入探讨软件设计模式的书籍,作者王翔通过C#语言来阐述各种设计模式的工程化应用和拓展。设计模式是软件开发中的一种最佳实践,它总结了在特定场景下解决常见问题的...

    Java设计模式源代码——自己看pdf写的

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可读性、可维护性和可复用性。在这个压缩包文件“DesignPatterns”中,很可能包含了各种Java设计模式的源代码实现。...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...

    基于物联网技术的系统设计模式研究与实践——以商城系统营销策略实现为例.pdf

    为了解决这一问题,本文提出了一种新的营销推广视角——“共享纸巾”,并以此为基础探讨软件设计模式在系统开发中的具体应用,旨在构建一套基于共享经济模式,有别于其他互联网思维延伸的商城管理系统。 文章的研究...

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

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板,可以被重复使用,以提高代码的可读性、可维护性和可扩展性。在面向对象编程中,设计模式尤其重要,它们代表了在软件设计中经过时间验证...

Global site tag (gtag.js) - Google Analytics