一、常規實現:不安全
/// /// 產品類
///
public abstract class product
public string name
/// /// 每個產品都可以工作
///
public abstract void work();
/// /// 每個產品都可以往裡面再新增子產品
/// 至於有些產品不能再新增子產品,這裡我們一會會詳細說,大家先記住這一點
///
public abstract void add(product product);
/// /// 每個產品都可以移除子產品,同上
///
public abstract void remove(product product);
}/// /// cpu產品
///
public class cpu : product
public override void work()
/// /// 由於cpu已經是很小的零件了,不能再有子零件,所有不會有新增和刪除的方法,所以先模擬丟擲異常
/// 這裡大家先這麼看,後續我們會詳細講解這裡
///
///
public override void add(product product)
public override void remove(product product)
}/// /// 記憶體條產品
///
public class memorybar : product
public override void work()
public override void add(product product)
public override void remove(product product)
}/// /// 電腦產品
///
public class computer : product
private listchildproduct = new list();
public override void work()
public override void add(product product)
public override void remove(product product)
}
private static void test1()
上述執行完,大家應該也看到了有點不足:
有的產品不能有子零件,但是還是會有新增零件和移除零件的方法,因為是從產品類繼承過來的嘛
這樣就導致了不安全,因為客戶端覺得有這個方法那肯定就是可以使用的,結果不能使用
所以,一種更安全的方式就是:
將新增零件和移除零件的方法只有複雜產品我們才會加上,其他的都沒有
有兩種方式加:
1.在複雜產品類中多定義兩個方法(新增和刪除)
2.定義乙個新增產品,刪除產品介面,複雜產品需要實現這些介面(規範)
二、將複雜和簡單區分開:安全
public abstract class productnew
public string name
public abstract void work();
}public class cpunew : productnew
public override void work()
}public class memorybarnew : productnew
public override void work()
}public class computernew : productnew, icomplexproduct
public override void work()
public void add(productnew product)
public void remove(productnew product)
}public inte***ce icomplexproduct
class program
private static void test1()
private static void test2()
}
設計模式(10) 組合模式
什麼是組合模式?組合模式是一種結構型模式,把多個物件組合為乙個整體,類似於在公司中,每個人都是員工,但是員工有上下級的關係,整個級別組合一起為公司整體,組合模式是一種簡單的設計模式 如何實現?public class employee public void add employee e publi...
10組合模式
組合模式 設計模式其實很簡單 筆記 定義 將物件組成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。理解 樹和子樹,即整體與部分。在樹形結構中,部分和整體有著類似或相同的結構,所以可以將部分和 整體一致對待 樹中分支節點與葉子節點的抽象父類 publi...
(10)組合模式
組合模式依據樹形結構來組合物件,用來表示部分以及整體層次。組合模式說白了就是乙個樹形結構。如某 的商品分類,如省市區等結構,這些都是樹形結構,都屬於組合模式。import j a.util.arraylist import j a.util.list 組合 public class demo pub...