今天調休了,閑來無事,再扯一個設計模式。我不是單純的說設計模式,更多的是說編程思想上的東西。人心隔肚皮,人眼看到的不一定是真相,所以說女孩結婚後流的淚是當初眼拙腦殘的結果。不過愛情中沒有對錯,愛情本來就是折磨死人不犯法。 說說繼承與組合,繼承偏重於對象本身具有;組合偏重於包括其他對象的東西(靜的,動 ...
今天調休了,閑來無事,再扯一個設計模式。我不是單純的說設計模式,更多的是說編程思想上的東西。人心隔肚皮,人眼看到的不一定是真相,所以說女孩結婚後流的淚是當初眼拙腦殘的結果。不過愛情中沒有對錯,愛情本來就是折磨死人不犯法。
說說繼承與組合,繼承偏重於對象本身具有;組合偏重於包括其他對象的東西(靜的,動的)。設計層面的東西都是抽象的,所以要用抽象或介面來隔離實際功能。
不扯了,今天說橋接模式,這種結構型模式都是對象之間關係的模式。在資料庫模型中,1對1的關係,只用把某個表的主鍵存在另一個表中,1對多的關係轉成面向對象的時候就是多屬於1,所以只用把1的主鍵放在多中。多對多的關係,可以轉成兩個1對多,就是需要建中間表。
直接上例子,我來解釋例子吧。
//這個是抽象類,表示思想上的東西,只描述抽象的東西。
//比如我有個功能,我還知道某種東西可以實現這個功能。
abstract class HandsetBrand
{
//存了一個抽象引用
protected HandsetSoft soft;
//給引用賦值對象
//this就是一個占位實例
public void SetHandsetSoft(HandsetSoft soft)
{
this.soft = soft;
}
//定義一個約束(抽象方法我也稱為約束)
public abstract void Run();
}
//這個對象擁有此功能
//這是一種繼承與組合的混合使用
class HandsetBrandN : HandsetBrand
{
public override void Run()
{
soft.Run();
}
}
//同樣這個對象擁有這個功能。
class HandsetBrandM : HandsetBrand
{
public override void Run()
{
soft.Run();//其實我內部是通過其他對象實現我這個功能的。
}
}
//這種抽象的對象可以實現這個功能
abstract class HandsetSoft
{
public abstract void Run();
}
//具體的實現者
class HandsetGame : HandsetSoft
{
public override void Run()
{
Console.WriteLine("運行手機游戲");
}
}
//具體的實現者
class HandsetAddressList : HandsetSoft
{
public override void Run()
{
Console.WriteLine("運行手機通訊錄");
}
}
HandsetBrand ab;
ab = new HandsetBrandN();
//橋接就是連接了對象HandsetBrand與HandsetSoft
ab.SetHandsetSoft(new HandsetGame());
ab.Run();
ab.SetHandsetSoft(new HandsetAddressList());
ab.Run();
總結:這種結構型模式就是描述對象與對象之間關係的。人又稱為社會人,假如人與人或人與其他對象沒關係,那這個人活不長,沒有研究價值。所以在記憶體中,我們運行的對象是有關係的對象。面向對象正是描述對象之間關係的,最常用的關係繼承,組合,介面實現等