//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); //扩展缓冲、加密功能
}
}
}
09.装饰模式
最新推荐文章于 2024-07-16 13:53:16 发布