最近有些忙,雙休都在加班,心情比較煩躁,寫篇博客靜靜心。 今天扯結構型設計模式。重要的話多說幾遍,程式員最重要的是編程思想,圈起來,要考試。哈哈。 說說面向對象的三大特性之一繼承。繼承,白話意思是最起碼是那個東西。例如A是基類,B繼承A,意思就是B最起碼是個A.所以當A有顯式構造函數時,子類必須也要 ...
最近有些忙,雙休都在加班,心情比較煩躁,寫篇博客靜靜心。
今天扯結構型設計模式。重要的話多說幾遍,程式員最重要的是編程思想,圈起來,要考試。哈哈。
說說面向對象的三大特性之一繼承。繼承,白話意思是最起碼是那個東西。例如A是基類,B繼承A,意思就是B最起碼是個A.所以當A有顯式構造函數時,子類必須也要有這個構造函數,因為構造函數就是說明對象是個啥。
構造函數是對象的,不是類型的。在繼承鏈中,基類的構造函數偏重於約束作用。
又扯遠了,今天說適配器模式。是一種對象功能的封裝轉換。又想扯了,程式員要多實踐多過腦子,看書多頂多是紙上談兵。直接上例子,我來翻譯。
abstract class Player
{
protected string name;
//抽象類的構造函數起到約束作用
public Player(string name)
{
this.name = name;//this指的是當前對象
}
public abstract void Attack();
public abstract void Defense();
}
//基類繼承抽象類
class Forwards : Player
{
//“實現”基類的構造約束
public Forwards(string name)
: base(name)
{
}
public override void Attack()
{
Console.WriteLine("前鋒 {0} 進攻", name);
}
public override void Defense()
{
Console.WriteLine("前鋒 {0} 防守", name);
}
}
//繼承基類
class Center : Player
{
public Center(string name)
: base(name)
{
}
//必須重新抽象基類的方法
public override void Attack()
{
Console.WriteLine("中鋒 {0} 進攻", name);
}
public override void Defense()
{
Console.WriteLine("中鋒 {0} 防守", name);
}
}
//擁有基類類似的功能
class ForeignCenter
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public void 進攻()
{
Console.WriteLine("外籍中鋒 {0} 進攻", name);
}
public void 防守()
{
Console.WriteLine("外籍中鋒 {0} 防守", name);
}
}
//繼承基類,轉換其他對象的類似功能(善於工具)
class Translator : Player
{
private ForeignCenter wjzf = new ForeignCenter();
public Translator(string name)
: base(name)
{
wjzf.Name = name;
}
public override void Attack()
{
wjzf.進攻();
}
public override void Defense()
{
wjzf.防守();
}
}
Player b = new Forwards("巴蒂爾");
b.Attack();
Player m = new Guards("麥克格雷迪");
m.Attack();
//Player ym = new Center("姚明");
Player ym = new Translator("姚明");
ym.Attack();
ym.Defense();
總結:結構型設計模式重在各個對象的關係。適配器模式,主要是利用現有的對象功能實現其功能,重在轉換功能。
設計模式這種東西是編程思想上的東西,與具體語言無關。