將抽象化與實現化脫耦,使得二者可以獨立的變化,也就是說將他們之間的強關聯變成弱關聯,也就是指在一個軟體系統的抽象化和實現化之間使用組合/彙總關係而不是繼承關係,從而使兩者可以獨立的變化。
例子:比如你要做山寨產品,更新一定要快,什麼流行生產什麼,但工廠還是那個工廠。
1 abstract class Product{
2 public abstract void beforeProducted();
3 public abstract void beforeSelled();
4 }
5
6 class House extends Product{
7 @Override
8 public void beforeProducted() {
9 System.out.println("生產出來房子是這樣的");
10 }
11 @Override
12 public void beforeSelled() {
13 System.out.println("生產出來的房子賣出去了");
14 }
15 }
16
17 class Clothes extends Product{
18 @Override
19 public void beforeProducted() {
20 System.out.println("生產出來衣服是這樣的");
21 }
22 @Override
23 public void beforeSelled() {
24 System.out.println("生產出來的衣服賣出去了");
25 }
26 }
27
28 abstract class Crop{
29 private Product product;
30 public Crop(Product product){
31 this.product=product;
32 }
33 public void makeMoney(){
34 this.product.beforeProducted();
35 this.product.beforeSelled();
36 }
37 }
38
39 class shanzaiCrop extends Crop{
40 public shanzaiCrop(Product product){
41 super(product);
42 }
43 @Override
44 public void makeMoney() {
45 super.makeMoney();
46 System.out.println("狂賺錢");
47 }
48 }
49
50 public class Test {
51 public static void main(String[] args) {
52 Crop housecrop=new shanzaiCrop(new House());
53 housecrop.makeMoney();
54 Crop clothcrop=new shanzaiCrop(new Clothes());
55 clothcrop.makeMoney();
56 }
57 }