C#マルチステートの実装

11312 ワード

マルチステート:異なるオブジェクトが同じメッセージを受信すると、異なる動作が発生し、同じクラスが異なる場合に異なる動作特徴マルチステートの役割を果たすことを指す:異なるサブクラスオブジェクトを親として見ると、異なるサブクラスオブジェクト間の違いを遮断し、共通のコードを書き、共通のプログラミングを行い、需要の絶えず変化に適応することができる.マルチステートの実装には、次の3つの形式があります.
  • ダミーメソッド
  • 抽象クラス
  • インタフェース
  • 以下,ダミーメソッドを用いて,単純にマルチステート効果を実現する.
    //   
        class Program
        {
            static void Main(string[] args)
            {
                Employee employee = new Employee();
                employee.DaKa();
                Employee mannger = new Mannger();
                mannger.DaKa();
                Employee programer = new Programer();
                programer.DaKa();
                //         
                Employee[] employees = { employee, mannger, programer };            
                for (int i = 0; i < employees.Length; i++)
                {
                    employees[i].DaKa();
                }
                Console.ReadKey();
            }
        }
        //  :   
        class Employee
        {
            public virtual void DaKa()
            {
                Console.WriteLine("    ");
            }
        }
        //  ①:   
        class Mannger : Employee
        {
            public override void DaKa()
            {
                Console.WriteLine("    ");
            }
        }
        //  ②:    
        class Programer : Employee
        {
            public override void DaKa()
            {
                Console.WriteLine("     ");
            }
    
        }
    

    抽象クラスを使用したマルチステート注意:抽象メソッドにはエンティティがなく、継承中、override、すなわちoverrideを複写する必要があります.
    //   
        class Program
        {
            static void Main(string[] args)
            {
                Animal animal = new Dog();
                animal.Bark();
                Animal Cat = new Cat();
                Cat.Bark();
                Console.ReadKey();
            }
        }
        //  
        abstract class Animal
        {
            public abstract void Bark();
        }
        //  ①: 
        class Dog : Animal
        {
            public override void Bark()
            {
                Console.WriteLine("  ");  
            }
        }
        //  ②: 
        class Cat : Animal
        {
            public override void Bark()
            {
                Console.WriteLine("  ");
            }
        }