合成复用原则是指通过将另外一个对象注入到当前对象中,作为当前对象的成员变量,当前对象可以调用另外一个对象的功能,从而实现复用的效果。
合成复用原则要求我们尽量使用对象组合的方式而不是继承的方法达到软件复用的目的。这样可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类的影响相对较少。
代码示例如下:
创建抽象类Dishes:
public abstract class Dishes {
public abstract String getName();
}
创建子类:
public class Hamburger extends Dishes {
@Override
public String getName() {
return "汉堡";
}
}
创建顾客类:
public class Person {
private Dishes dishes;
public Person(Dishes dishes) {
this.dishes = dishes;
}
public void eat() {
System.out.println("吃" + dishes.getName());
}
}
创建业务类:
public class Test {
public static void main(String[] args) {
Person person = new Person(new Hamburger());
person.eat();
}
}
这是一个非常典型的业务场景,一旦增加新的食物,我们可以不修改Person类的代码,直接新建食物类继承Dishes类即可,符合开闭原则