Study Decorator(学习装饰模式)
来源:互联网 发布:js对dom中的元素截图 编辑:程序博客网 时间:2024/05/16 00:46
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
/// <summary>
///DecoratorStudy 的摘要说明
/// </summary>
public class DecoratorStudy
{
public DecoratorStudy()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
public abstract class Tank //定义一个坦克地抽象类
{
//定义坦克类地两个抽象方法Shot()和Run();
public abstract void Shot(); //设计方法
public abstract void Run(); //运行方法
}
//定义一个Decorator抽象类继承Tank(抽象类某种程度上就可以看成是一个接口)
public abstract class Decorator : Tank //实际上来讲应该是一个接口继承
{
//定义以tank的私有变量
private Tank tank;
//设置一个构造器接受tank
public Decorator(Tank tank)
{
this.tank = tank;
}
//重写Shot()方法
public override void Shot()
{
//用私有变量来调用Shot()方法
tank.Shot();
throw new NotImplementedException();
}
//重写Run()方法
public override void Run()
{
//用私有变量来调用Run()方法
tank.Run();
throw new NotImplementedException();
}
}
//扩展Tank的属性1
public class DecrotatorA : Decorator
{
//构造器是不能继承的所以此处我们要重写构造器
public DecrotatorA(Tank tank)
: base(tank) //将父类的Tank传给它
{
}
public override void Shot()
{
//功能扩展
//扩展地功能写在此处(如红外功能扩展等)
base.Shot();
}
public override void Run()
{
//功能扩展
//扩展地功能写在此处(如红外功能扩展等)
base.Run();
}
}
//扩展Tank的属性2
public class DecrotatorB : Decorator
{
//构造器是不能继承的所以此处我们要重写构造器
public DecrotatorB(Tank tank)
: base(tank)//将父类的Tank传给它
{
}
public override void Shot()
{
//功能扩展
//扩展地功能写在此处(如水路两用功能扩展等)
base.Shot();
}
public override void Run()
{
//功能扩展
//扩展地功能写在此处(如水路两用功能扩展等)
base.Run();
}
}
//扩展Tank的属性3
public class DecrotatorC : Decorator
{
//构造器是不能继承的所以此处我们要重写构造器
public DecrotatorC(Tank tank)
: base(tank) //将父类的Tank传给它
{
}
public override void Shot()
{
//功能扩展
//扩展地功能写在此处(如卫星定位功能扩展等)
base.Shot();
}
public override void Run()
{
//功能扩展
//扩展地功能写在此处(如卫星定位功能扩展等)
base.Run();
}
}
//怎么用了下面即将介绍
//比如说现在有一种T50类型地坦克
public class T50 : Tank
{
//重写Shot()和Run()方法
public override void Shot()
{
throw new NotImplementedException();
}
public override void Run()
{
throw new NotImplementedException();
}
}
//具体地应用
class App
{
public static void Main()
{
//实例化一个T50类型地坦克
Tank tank = new T50();
//增加红外功能的T50类型地坦克
DecrotatorA Da = new DecrotatorA(tank);
//增加了红外功能和水路两用功能地坦克
DecrotatorB Db = new DecrotatorB(Da);
//增加了红外功能、水路两用功能和卫星定位功能地坦克
DecrotatorC Dc = new DecrotatorC(Db);
//这样一个装饰模式就得到了很好地应用
//如果再想加入一种功能只要在为此功能写一个类就可以了
//不必在改动大段地代码了
//是不是很方便
}
}
}
类关系图
- Study Decorator(学习装饰模式)
- 装饰(Decorator)模式
- 装饰模式(Decorator)
- 装饰模式(Decorator)
- DECORATOR (装饰)模式
- Decorator(装饰)模式
- 装饰模式(Decorator)
- Decorator(装饰模式)
- 装饰模式(Decorator)
- 装饰模式(Decorator)
- 装饰模式(Decorator)
- Decorator(装饰)模式
- 装饰模式(Decorator)
- 装饰模式(Decorator)
- Decorator(装饰模式)
- Decorator(装饰)模式
- Decorator(装饰模式)
- 装饰模式(Decorator)
- 能上QQ不能上网问题解析
- 在线画流程图的软件
- MySQL查询及删除重复记录的方法
- 如何隐藏Sip输入法
- DataTable中的一行添加到另一个DataTabel中
- Study Decorator(学习装饰模式)
- VS2008正版序列号
- 学习Asp.Net、C#好网站
- struts流程
- MySQL——外键
- 将dataset中的数据写入xml中
- 关于向页面注册javascript的技术
- 全国每万人有6个千万富豪 京穗沪占48%
- 兼职