设计模式之-策略模式

在网上摘抄了一些比较经典的案例:

下面做个总结:

  策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。 

如: 跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦。 

又如: 在玩“极品飞车”这款游戏,那么游戏对车的轮胎是可以更换的,不同的轮胎在高速转弯时有不同的痕迹样式,那么针对“汽车”的配件“轮胎”就要可以变化,而且轮胎和轮胎之间是可以相互替换的,这就是典型的要应用“策略模式”的场景!从程序结构中可以看到,完全符合了前面我们的要求:“灵活”,“顺序敏感”。


就那极品飞车举个例子:

1,新建一个轮胎接口:


package coreJava.strategy2.tyre_interface;

public interface Tyre_Interface {
	public void print_tyre_line();//显示出轮胎的痕迹
}

2,新建轮胎接口的两个不同的实现类(长痕迹轮胎和短痕迹轮胎):


package coreJava.strategy2.tyre_longimpl;

import coreJava.strategy2.tyre_interface.Tyre_Interface;

public class Tyre_LongImpl implements Tyre_Interface {

	@Override
	public void print_tyre_line() {
		System.out.println("在路上留下了\"长长\"的痕迹...");

	}

}

package coreJava.strategy2.tyre_shortimpl;

import coreJava.strategy2.tyre_interface.Tyre_Interface;

public class Tyre_ShortImpl implements Tyre_Interface{

	@Override
	public void print_tyre_line() {
		System.out.println("在路上留下了\"短短\"的痕迹...");
	}

}

3,组装一个Cart车类:

package coreJava.strategy2.cart;

import coreJava.strategy2.tyre_interface.Tyre_Interface;

public class Cart {
	private String address;
	private int death_year;
	private int speed;
	private Tyre_Interface tyre_interface;
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public int getDeath_year() {
		return death_year;
	}
	public void setDeath_year(int death_year) {
		this.death_year = death_year;
	}
	public int getSpeed() {
		return speed;
	}
	public void setSpeed(int speed) {
		this.speed = speed;
	}
	public Tyre_Interface getTyre_interface() {
		return tyre_interface;
	}
	public void setTyre_interface(Tyre_Interface tyre_interface) {
		this.tyre_interface = tyre_interface;
	}
	public void start(){
		System.out.println("车辆的基本信息为:");
		System.out.println("生产地址:"+this.address);
		System.out.println("使用年限为:"+this.death_year);
		System.out.println("车启动了...");
		System.out.println("速度为"+this.speed);
		System.out.println("车加速行驶中....\n车转了一个弯:");
		this.tyre_interface.print_tyre_line();
	}

}

4,让车跑起来,并让车有更换轮胎的功能:


package coreJava.strategy2.main_run;

import coreJava.strategy2.cart.Cart;
import coreJava.strategy2.tyre_interface.Tyre_Interface;
import coreJava.strategy2.tyre_longimpl.Tyre_LongImpl;
import coreJava.strategy2.tyre_shortimpl.Tyre_ShortImpl;

public class Main {
	public static void main(String[] args) {
		Tyre_Interface tyre_longImpl = new Tyre_LongImpl();
		Tyre_Interface tyre_shortImpl = new Tyre_ShortImpl();
		Cart cart = new Cart();
		cart.setAddress("北京海淀");
		cart.setDeath_year(20);
		cart.setSpeed(10);
		cart.setTyre_interface(tyre_shortImpl);
		cart.start();
		System.out.println("\n\n\n\n");
		System.out.println("车换轮胎了:");
		cart.setTyre_interface(tyre_longImpl);
		cart.start();

	}

}

执行程序之后,在控制台打印出:


车辆的基本信息为:
生产地址:北京海淀
使用年限为:20
车启动了...
速度为10
车加速行驶中....
车转了一个弯:
在路上留下了"短短"的痕迹...



车换轮胎了:
车辆的基本信息为:
生产地址:北京海淀
使用年限为:20
车启动了...
速度为10
车加速行驶中....
车转了一个弯:
在路上留下了"长长"的痕迹...



这样在不改变cart类的前提下改变了车的轮胎的类型,轮胎和轮胎之间可以互相替换,这就是策略模式.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值