策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式的好处在于你可以动态的改变对象的行为。
设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。
策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。
(策略模式静态图)
策略模式中有三个对象:
(1) 环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
(2) 抽象策略对象:它可由接口或抽象类来实现。
(3) 具体策略对象:它封装了实现同不功能的不同算法。
利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性与条理性。
/*
这是一个表现僧人和道士的程序,僧人光头,使用棍子做武器,道士长小胡子,使用拂尘作武器
*/
public interface DisplayInte {
public void display();
}
public interface WeaponInte {
public void wuqi();
}
public class daoshiDisplayImpl implements DisplayInte {
public void display() {
// TODO Auto-generated method stub
System.out.println("道士是有头发的!!!");
}
}
public class heshangDisplayImpl implements DisplayInte {
public void display() {
// TODO Auto-generated method stub
System.out.println("和尚没有头发的");
}
}
public class daoshiWeaponImpl implements WeaponInte {
public void wuqi() {
// TODO Auto-generated method stub
System.out.println("道士使用的武器是拂尘!!!");
}
}
public class heshangWeaponImpl implements WeaponInte {
public void wuqi() {
// TODO Auto-generated method stub
System.out.println("和尚拿的武器是法仗!!!");
}
}
public class Daoshi extends Role {
public Daoshi() {
this.display=new daoshiDisplayImpl();
this.weapon=new daoshiWeaponImpl();
// TODO Auto-generated constructor stub
}
}
public class Heshang extends Role {
public Heshang() {
this.display=new heshangDisplayImpl();
this.weapon=new heshangWeaponImpl();
// TODO Auto-generated constructor stub
}
}
public class Role {
public String name;
public int age;
public DisplayInte display;
public WeaponInte weapon;
public void display()
{
display.display();
}
public void weapon()
{
weapon.wuqi();
}
public void changeWeapon()
{
if(this instanceof Daoshi)
{
weapon=new heshangWeaponImpl();
}
else
{
weapon=new daoshiWeaponImpl();
}
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Role oDaoshi=new Daoshi();
Role oHeshang=new Heshang();
oDaoshi.display();
oDaoshi.weapon();
oHeshang.display();
oHeshang.weapon();
oDaoshi.changeWeapon();
oDaoshi.display();
oHeshang.changeWeapon();
oHeshang.display();
}
}
- 大小: 12.8 KB
分享到:
相关推荐
JAVA-设计模式-行为型模式-策略模式
在这个“java设计模式-策略模式”的示例中,我们将深入探讨如何使用策略模式来实现一个简单的超市促销系统。 策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。这使得算法的...
在这个“JAVA设计模式例程-策略模式”的压缩包中,我们可以深入探讨策略模式的原理及其应用。 策略模式的核心思想是定义一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略对象的使用让算法的变化独立...
- **java滤镜项目-策略模式.zip**:这个文件是一个Java项目,实现了滤镜效果的策略模式。解压后,我们可以看到项目的目录结构,包括源代码、测试用例以及可能的README文件,说明如何运行和理解代码。 - **策略模式...
在Java中,策略模式通常用于替换硬编码的条件语句,使代码更加灵活、可扩展和易于维护。下面我们将详细探讨策略模式的核心概念、实现方式以及在实际开发中的应用。 ### 一、策略模式的概念 策略模式定义了一系列...
策略模式是Java设计模式中的一种行为模式,它允许在运行时选择算法或策略,从而提供了更大的灵活性。在HeadFirst的《设计模式》一书中,第一章深入浅出地讲解了这一模式,通过实例帮助读者理解其核心概念和应用场景...
- 策略模式:定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换,策略对象改变算法的使用方式。 - 模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法...
- 策略模式:定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。 - 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 以上这些设计模式在实际开发中有着广泛的应用,...
Java 策略模式详解 策略模式是一种行为型设计模式,它允许您定义一系列算法,将每个算法封装起来,并使它们可以互换使用。这种模式使得算法可以独立于使用它们的客户端而变化。在 Java 中,策略模式通常由一个接口...
策略模式是Java设计模式中的一种行为模式,它允许在运行时改变对象的行为。在Java开发过程中,策略模式常被用来封装一系列算法,并使它们可以互相替换,从而使算法的变化独立于使用算法的客户。这种模式的核心在于...
总结来说,Java设计模式中的策略模式是一种非常实用的设计模式,它允许我们在运行时选择和改变算法,提高了代码的可维护性和灵活性。通过观看厉风行老师的教程,你可以深入理解策略模式的原理,并将其运用到实际项目...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或场景来执行不同算法的情况。策略模式提供了一种将算法族封装到各自独立的类中,并在运行时选择具体...
"实验一:鸭子游戏-策略模式.rar"这个压缩包文件显然是围绕Java编程语言中的策略模式来展开的一个教学实验。在这个实验中,我们将深入理解策略模式的核心概念、应用场景以及如何在实际编码中应用。 策略模式是一种...
Java 设计模式之策略模式与状态模式 策略模式是 Java 中的一种设计模式,它主要用于解决系统与第三方接口进行数据交互的问题。当系统需要与多种格式的数据进行交互时,使用策略模式可以很好地解决这个问题。例如,...
计算机后端-Java-图解java设计模式143 策略模式(4)-Arr.avi
在Java中,策略模式是通过定义一系列算法,并将每个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户而变化。这种模式在Android开发中非常常见,尤其是在处理不同场景下需要动态改变行为的情况。 首先...
计算机后端-Java-图解java设计模式142 策略模式(3).avi
计算机后端-Java-图解java设计模式141 策略模式(2).avi
计算机后端-Java-图解java设计模式140 策略模式(1).avi