装饰器模式 Multiple Inheritance

 装饰器模式 Multiple Inheritance多重继承

鸟 会飞

蜥蜴  会爬行

龙 能飞也能爬行

C# 不支持多继承,单可以多实现、所以我们这样做

   public  interface IBrid 
    {
        void Fly();
    }

    public class Brid: IBrid
    {

        public  void Fly() 
        {
            Console.WriteLine($"I Can Fly ");
        }
    }
    public interface ILizardz
    {
        public int Weight { get; set; }
        public void Crawl();
    }
    public class Lizardz: ILizardz
    {

        public void Crawl()
        {
            Console.WriteLine($"I Can Crawl ");
        }
    }

    class Dragon : IBrid, ILizardz
    {
        private IBrid brid;
        private ILizardz lizardz;

        public Dragon()
        {
            this.brid = new Brid();
            this.lizardz = new Lizardz();
        }
     
        public void Crawl()
        {
            lizardz.Crawl();
        }

        public void Fly()
        {
            brid.Fly();
        } 
        
    }
    class Program
    {
        static void Main(string[] args)
        {
            Dragon dragon = new Dragon();  
            dragon.Fly();
            dragon.Crawl();
        }
    }

现在需要给每种动物都增加一个重量属性:

 public  interface IBrid 
    {
        public int Weight { get; set; }
        void Fly();
    }

    public class Brid: IBrid
    {
        public int Weight { get ; set ; }

        public  void Fly() 
        {
            Console.WriteLine($"I Can Fly and Weight {Weight}");
        }
    }
    public interface ILizardz
    {
        public int Weight { get; set; }
        public void Crawl();
    }
    public class Lizardz: ILizardz
    {
        public int Weight { get; set; }

        public void Crawl()
        {
            Console.WriteLine($"I Can Crawl and Weight {Weight}");
        }
    }

    class Dragon : IBrid, ILizardz
    {
        private IBrid brid;
        private ILizardz lizardz;

        public Dragon()
        {
            this.brid = new Brid();
            this.lizardz = new Lizardz();
        }
        private int weight;
        public int Weight { 
                get { return weight; } 
            set {
                weight = value;
                brid.Weight = Weight;
                lizardz.Weight = Weight;
            } }

        public void Crawl()
        {
            lizardz.Crawl();
        }

        public void Fly()
        {
            brid.Fly();
        }
      //  public int Weight { get; set; } Error!!!!

    }
    class Program
    {
        static void Main(string[] args)
        {
            Dragon dragon = new Dragon(); 
            dragon.Weight = 123;
            dragon.Fly();
            dragon.Crawl();
        }
    }

 

posted @ 2022-05-17 16:16  后跳  阅读(22)  评论(0编辑  收藏  举报