1.什么是策略设计模式:
定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。
在java中什么情况下一些类才能互换,答案就是实现了统一的接口,或者继承了同一个父类,然后我们在定义方法的时候接受的是接口类型或者是父类。
2.什么时候使用策略模式:
一个系统有许多类,而区分它们的只是他们直接的行为时,比如旅游时乘坐的交通工具、玩具汽车安装不同牌子的电池、
3.策略模式的优缺点:
优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。
4.策略模式的实现:
我们以玩具汽车为例,小时候我们都玩过四驱车,这个汽车可以换的东西很多,比如说车轱辘,电机,电池,外壳,这些都是可以单独购买然后安装上去的。我们以电池为例,五毛钱的电池和奥迪双钻电池那跑的长度肯定是不一样的。但是他们都是五号电池。
代码如下
//定义个电池接口
public interface Battery {
//电池可以跑多长距离
void run();
}
实现不同品牌的电池,比如南孚电池、东孚电池、西孚电池。
public class SourceBattery implements Battery {
@Override
public void run() {
System.out.println("我是南孚电池,我能跑5000km");
}
}
public class EastBattery implements Battery {
@Override
public void run() {
System.out.println("我是东孚电池,我能跑1000km");
}
}
public class WestBattery implements Battery {
@Override
public void run() {
System.out.println("我是西浮电池,我能跑2000km");
}
}
//然后实现我们的小汽车类
public class Car {
//通过组合的方式把电池的接口类添加进来
private Battery mbattery;
public void setMbattery(Battery mbattery) {
this.mbattery = mbattery;
}
public void run(){
if(mbattery!=null){
mbattery.run();
}
}
}
//测试代码
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.setMbattery(new SourceBattery());
car.run();
car.setMbattery(new EastBattery());
car.run();
car.setMbattery(new WestBattery());
car.run();
}
输出
我是南孚电池,我能跑5000km
我是东孚电池,我能跑1000km
我是西浮电池,我能跑2000km
根据我们安装不同的电池。我们的小汽车就能跑出不一样的距离。这就是我们的策略设计模式
网友评论