在基類定義演算法的結構,具體實現延遲到子類。 using System; namespace ConsoleApp2 { class Program { static void Main(string[] args) { TestPaper testPaperA = new TestPaperA(); ...
在基類定義演算法的結構,具體實現延遲到子類。
using System; namespace ConsoleApp2 { class Program { static void Main(string[] args) { TestPaper testPaperA = new TestPaperA(); testPaperA.TestQuestion1(); testPaperA.TestQuestion2(); testPaperA.TestQuestion3(); TestPaper testPaperB = new TestPaperB(); testPaperB.TestQuestion1(); testPaperB.TestQuestion2(); testPaperB.TestQuestion3(); } } class TestPaper { // 把骨架定義下來,只有答案不同,讓子類實現具體答案。 public void TestQuestion1() { Console.WriteLine("題目1:XXXXXXYYYYXXXMMM"); Console.WriteLine($"題目1答案:{Answer1()}"); } protected virtual string Answer1() { return ""; } public void TestQuestion2() { Console.WriteLine("題目2:IIIPPPKKKKK"); Console.WriteLine($"題目2答案:{Answer2()}"); } protected virtual string Answer2() { return ""; } public void TestQuestion3() { Console.WriteLine("題目3:UUUUKKKKOOO"); Console.WriteLine($"題目3答案:{Answer3()}"); } protected virtual string Answer3() { return ""; } } class TestPaperA : TestPaper { protected override string Answer1() { return "a"; } protected override string Answer2() { return "b"; } protected override string Answer3() { return "c"; } } class TestPaperB : TestPaper { protected override string Answer1() { return "b"; } protected override string Answer2() { return "c"; } protected override string Answer3() { return "a"; } } }View Code
using System; namespace ConsoleApp2 { class Program { static void Main(string[] args) { ConcreteClass concreteClass = new ConcreteClass(); concreteClass.TemplateMethod(); } } abstract class AbstractClass { public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); Console.WriteLine(""); } } class ConcreteClass : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("具體操作1"); } public override void PrimitiveOperation2() { Console.WriteLine("具體操作2"); } } }