国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

設計模式(17)---模板方法模式

2019-11-14 16:18:13
字體:
來源:轉載
供稿:網友

一、定義

模板方法模式:定義一個操作中算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

解釋:簡單來說,需要定義一個通用的基類,但是基類中不同的操作,于是模板方法模式將不同的操作編寫成一個抽象函數放到子類中實現,這樣即可完成通用基類的目的。

 

二、UML類圖及基本代碼

 

基本代碼:

abstract class AbstractClass    {        public abstract void PRimitiveOperation1();        public abstract void PrimitiveOperation2();        public void TemplateMethod()        {            PrimitiveOperation1();            PrimitiveOperation2();            Console.WriteLine("基類的行為");        }    }    class ConcreteClassA : AbstractClass    {        public override void PrimitiveOperation1()        {            Console.WriteLine("具體類A方法1的實現");        }        public override void PrimitiveOperation2()        {            Console.WriteLine("具體類A方法2的實現");        }    }    class ConcreteClassB : AbstractClass    {        public override void PrimitiveOperation1()        {            Console.WriteLine("具體類B方法1的實現");        }        public override void PrimitiveOperation2()        {            Console.WriteLine("具體類B方法2的實現");        }    }

客戶端調用及結果:

AbstractClass ac;            ac = new ConcreteClassA();            ac.TemplateMethod();            Console.WriteLine("");            ac = new ConcreteClassB();            ac.TemplateMethod();
View Code

 

三、實例說明

日常生活中做菜這件事,雖然做不同的菜的方式不一樣,但絕大多數步驟是一樣的,本例用炒菠菜和炒白菜作為實例進行說明模板方法模式,基本代碼如下:

public abstract class Vegetable    {        public void CookVegetable()        {            Console.WriteLine("燒蔬菜的一般方法:");            this.PoilOil();            this.HeatOil();            PourVegetable();        }        public void PoilOil()        {            Console.WriteLine("倒油");        }        public void HeatOil()        {            Console.WriteLine("把油燒熱");        }        public abstract void PourVegetable();    }    public class Spinach : Vegetable    {        public override void PourVegetable()        {            Console.WriteLine("菠菜倒進鍋中");        }    }    public class Cabbage : Vegetable    {        public override void PourVegetable()        {            Console.WriteLine("白菜倒進鍋中");        }    }
View Code

 

客戶端調用及運行結果:

Vegetable sp = new Spinach();            sp.CookVegetable();

 

四、優(yōu)缺點及適用場景

優(yōu)點:

1)實現了代碼復用

2)能夠靈活應對子類步驟的變化,符合開放-封閉原則

缺點:

引入了一個抽象類,使系統邏輯更加復雜。

 

適用場景:

模板方法模式通過把不變的行為搬移到超類,去除子類中的重復代碼來體現其優(yōu)勢。因此凡是能體現此優(yōu)點的地方都可以使用模板方法模式。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 星子县| 安新县| 隆子县| 长兴县| 赤壁市| 罗甸县| 济阳县| 南雄市| 凤山县| 湖南省| 乌拉特前旗| 深水埗区| 永嘉县| 伊吾县| 翁源县| 大同县| 永清县| 义马市| 安康市| 江永县| 富宁县| 新野县| 平舆县| 十堰市| 汉川市| 三穗县| 昭觉县| 错那县| 滨州市| 临安市| 丹寨县| 青浦区| 武乡县| 娱乐| 永寿县| 南郑县| 萍乡市| 怀集县| 洛川县| 临湘市| 枣庄市|