设计模式-策略模式
设计一个发电机类,发电方式多种多样,比如水力发电,火力发电,之后还会使用新技术,出现各种各样的发电方式。
/**
* 虚拟发电机类
*/
@Data
public abstract class ElectricGenerator {
/**
* 将发电机固定的参数写到类中,特有的参数写到子类中
*/
//发电功率
private int rate;
//发电方式,这里是关键,将发电方式外化,只要实现了这个接口的类,都可以成为发电方式。
private ElectricGenerateWay electricGenerateWay;
//发电功能是调用 发电方式接口类的发电方法
void generateElectric() {
electricGenerateWay.generateElectric();
}
//设置发电方式
void setElectricGenerateWay(ElectricGenerateWay electricGenerateWay) {
this.electricGenerateWay = electricGenerateWay;
}
}
/**
* 发电方式接口
*/
public interface ElectricGenerateWay {
void generateElectric();
}
之后,我们增加一种发电机,使用风力发电,此时,就不需要修改原有的代码,而只需要增加代码就可以了(开闭原则:对于扩展是开放的,但是对于修改是封闭的)
/**
* 风力发电机类
*/
@Data
public class WindElectricGenerator extends ElectricGenerator {
//假如风力发电机有扇叶数量的参数(风力发电机的特有参数写到子类中)
private int flabellum;
}
/**
* 风力发电方式
*/
public class WindElectricGenerateWay implements ElectricGenerateWay {
public void generateElectric() {
System.out.println("风力发电方式");
}
}
/**
* 使用风力发电机发电
* 如果增加其他发电类型,比如水力发电,可以直接增加一个水力发电机和一个水力发电方式类。
*/
public class Demo {
public static void main(String[] args) {
ElectricGenerator electricGenerator = new WindElectricGenerator();
//设置使用风力发电方式
electricGenerator.setElectricGenerateWay(new WindElectricGenerateWay());
electricGenerator.generateElectric();
}
}