09.装饰模式

//namespace _08_Decorator
//{
//    public abstract class Tank
//    {
//        public abstract void Shot();
//        public abstract void Run();
//    }

//    public class T50 : Tank
//    {
//        public override void Run()
//        {
//            Console.WriteLine("this is T50 run");
//        }

//        public override void Shot()
//        {
//            Console.WriteLine("this is T50 shot");
//        }
//    }

//    public class T75 : Tank
//    {
//        public override void Run()
//        {
//            Console.WriteLine("this is T75 run");
//        }

//        public override void Shot()
//        {
//            Console.WriteLine("this is T50 shot");
//        }
//    }

//    public class T90 : Tank
//    {
//        public override void Run()
//        {
//            Console.WriteLine("this is T90 run");
//        }

//        public override void Shot()
//        {
//            Console.WriteLine("this is T90 shot");
//        }
//    }

//    public interface IA
//    {
//        void ShotA();
//        void RunA();
//    }

//    public class T50A : Tank, IA
//    {
//        public override void Run()
//        {
//            this.RunA();  //功能扩展
//            //do run...
//            base.Run();
//        }

//        public override void Shot()
//        {
//            this.ShotA();  //功能扩展
//            //do shot...
//            base.Shot();
//        }

//        public void ShotA()
//        {

//        }

//        public void RunA()
//        {

//        }

//        //void IA.ShotA()
//        //{

//        //}
//        //void IA.RunA()
//        //{

//        //}
//    }

//    internal class Program
//    {
//        static void Main(string[] args)
//        {

//        }
//    }
//}

namespace _08_Decorator
{
    public abstract class Tank
    {
        public abstract void Shot();
        public abstract void Run();
    }

    public class T50 : Tank
    {
        public override void Run()
        {
            Console.WriteLine("this is T50 run");
        }

        public override void Shot()
        {
            Console.WriteLine("this is T50 shot");
        }
    }

    public class T75 : Tank
    {
        public override void Run()
        {
            Console.WriteLine("this is T75 run");
        }

        public override void Shot()
        {
            Console.WriteLine("this is T50 shot");
        }
    }

    public class T90 : Tank
    {
        public override void Run()
        {
            Console.WriteLine("this is T90 run");
        }

        public override void Shot()
        {
            Console.WriteLine("this is T90 shot");
        }
    }

    public interface IA
    {
        void ShotA();
        void RunA();
    }

    public class T50A : Tank, IA
    {
        public override void Run()
        {
            this.RunA();  //功能扩展
            //do run...
        }

        public override void Shot()
        {
            this.ShotA();  //功能扩展
            //do shot...
        }

        public void ShotA()
        {

        }

        public void RunA()
        {

        }

        //void IA.ShotA()
        //{

        //}
        //void IA.RunA()
        //{

        //}
    }
}

namespace _08_Decorator_2
{
    public abstract class Tank
    {
        public abstract void Shot();
        public abstract void Run();
    }

    public class T50 : Tank
    {
        public override void Run()
        {
            Console.WriteLine("this is T50 run");
        }

        public override void Shot()
        {
            Console.WriteLine("this is T50 shot");
        }
    }

    public class T75 : Tank
    {
        public override void Run()
        {
            Console.WriteLine("this is T75 run");
        }

        public override void Shot()
        {
            Console.WriteLine("this is T50 shot");
        }
    }

    public class T90 : Tank
    {
        public override void Run()
        {
            Console.WriteLine("this is T90 run");
        }

        public override void Shot()
        {
            Console.WriteLine("this is T90 shot");
        }
    }

    public abstract class Decorator : Tank  //接口继承
    {
        private Tank tank;  //has - A 对象组合
        public Decorator(Tank tank)
        {
            this.tank = tank;
        }

        public override void Shot()
        {
            tank.Shot();
        }
        public override void Run()
        {
            tank.Run();
        }
    }

    public class DecoratorA : Decorator
    {
        public DecoratorA(Tank tank) : base(tank)
        {
        }

        public override void Run()
        {
            base.Run();  //功能扩展
            //do run...
        }

        public override void Shot()
        {
            //Do some extension 红外功能扩展
            base.Shot();  //功能扩展
            //do shot...
        }
    }

    public class DecoratorB : Decorator
    {
        public DecoratorB(Tank tank) : base(tank)
        {
        }

        public override void Run()
        {
            base.Run();  //功能扩展
            //do run...
        }

        public override void Shot()
        {
            //Do some extension 水陆两栖功能扩展
            base.Shot();  //功能扩展
            //do shot...
        }
    }

    public class DecoratorC : Decorator
    {
        public DecoratorC(Tank tank) : base(tank)
        {
        }

        public override void Run()
        {
            base.Run();  //功能扩展
            //do run...
        }

        public override void Shot()
        {
            //Do some extension 卫星定位功能扩展
            base.Shot();  //功能扩展
            //do shot...
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            //Tank tank = new T50();
            //Decorator da = new DecoratorA(tank);  //红外
            //Decorator db = new DecoratorB(da);  //红外、两栖
            //Decorator dc = new DecoratorC(db);  //红外、两栖、卫星定位
            //dc.Run(); 
            //dc.Shot();

            MemoryStream ms = new MemoryStream(new byte[] { 100, 203, 156, 77, 21, 45 });
            BufferedStream buff = new BufferedStream(ms);  //扩展缓冲功能
            //CryptoStream crypto = new CryptoStream(buff);  //扩展缓冲、加密功能

        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值