合成复用原则
它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
汽车分类管理程序。
汽车按“动力源”划分可分为汽油汽车、电动汽车等;按“颜色”划分可分为黄色汽车和红色汽车等,UML图如下

汽车相关类
public abstract class Car {
Color color;
public Car(Color color) {
this.color = color;
}
void move() {
}
}
/**
* 电动车
*/
public class ElectricCar extends Car {
public ElectricCar(Color color) {
super(color);
}
@Override
public void move() {
System.out.println(this.color.getColor() + "的电动车在移动---");
}
}
/**
* 燃油车
* @author zwzh_zj
*/
public class GasolineCar extends Car{
public GasolineCar(Color color) {
super(color);
}
@Override
public void move() {
System.out.println(this.color.getColor() + "的燃油车在移动---");
}
}
颜色相关类
public interface Color {
String getColor();
}
public class Red implements Color {
@Override
public String getColor() {
return "红色";
}
}
public class Yellow implements Color {
@Override
public String getColor() {
return "黄色";
}
}
分别创建汽车
public class Main {
public static void main(String[] args) {
// 红色电动车
ElectricCar electricCar = new ElectricCar(new Red());
electricCar.move();
// 黄色燃油车
GasolineCar gasolineCar = new GasolineCar(new Yellow());
gasolineCar.move();
}
}
结果

参考资料:
1.http://c.biancheng.net/view/1333.html
代码地址:https://gitee.com/zhoujie1/design-mode-and-principle.git
该博客介绍了如何运用合成复用原则来设计汽车分类管理程序。通过抽象类Car和接口Color,实现了电动车和燃油车的分类,并分别用红色和黄色表示。程序中,ElectricCar和GasolineCar通过继承Car并调用父类构造器来实现颜色属性,展示了在复用时优先使用组合而非继承的关系。
189





