设计模式-策略模式

来源:互联网 发布:ubuntu修改ip地址 编辑:程序博客网 时间:2024/06/17 05:01

策略模式:又叫算法簇模式,定义了不同的算法,并且可以相互替换,算法变化独立于客户端,针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式可以动态改变对象的行为,属于对象行为型模式。通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。

设计原则:把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口或者抽象类,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。

策略模式组成:

1、抽象策略角色:策略类,通常由一个接口或者抽象类实现。

 2、具体策略角色:包括了相关的算法和行为,可能不止一个具体策略角色。

 3、环境角色:持有一个策略类的引用,最终给客户端调用的。

策略类(接口):

package Test201307;public interface BaseStrategy {void takeWay();}
实现类:

package Test201307;public class FootStrategy implements BaseStrategy{@Overridepublic void takeWay() {// TODO Auto-generated method stubSystem.out.println("go on foot!");}}

package Test201307;public class ShipBaseStrategy implements BaseStrategy{@Overridepublic void takeWay() {// TODO Auto-generated method stubSystem.out.println("take a ship!");}}

package Test201307;public class TrainBaseStrategy implements BaseStrategy{@Overridepublic void takeWay() {// TODO Auto-generated method stubSystem.out.println("take a train!");}}
环境类:
package Test201307;public class Context {private BaseStrategy base;public Context(BaseStrategy base){this.base = base;}public BaseStrategy getBase() {return base;}/** * 调用接口算法、操作 */public void takeWay(){this.base.takeWay();}}
测试类:

package Test201307;public class Client {  public static void  main(String[] args){  Context context =null;    //方式1: 步行  context = new Context(new FootStrategy());  context.takeWay();    // 方式2:火车  context = new Context(new TrainBaseStrategy());  context.takeWay();    // 方式3:船  context = new Context(new ShipBaseStrategy());  context.takeWay();  }}



原创粉丝点击