合成複用原則是指通過將另外一個對象注入到當前對象中,作爲當前對象的成員變量,當前對象可以調用另外一個對象的功能,從而實現複用的效果。
合成複用原則要求我們儘量使用對象組合的方式而不是繼承的方法達到軟件複用的目的。這樣可以使系統更加靈活,降低類與類之間的耦合度,一個類的變化對其他類的影響相對較少。
代碼示例如下:
創建抽象類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類即可,符合開閉原則