装饰模式:类的组合调用
来源:互联网 发布:plc编程软件安装不了 编辑:程序博客网 时间:2024/06/05 11:40
1.装饰类
namespace Data
{
/* 一般情况下,当一个基类写好之后,我们也许不愿意去改动,也不能改动,原因是
* 这样的在项目中用得比较久的基类,一旦改动,也许会影响其他功能模块,但是,
* 又要在该类上面添加功能。使用继承,当在A阶段,写出继承类,用过一段时间,发
* 现又要添加新功能,于是又要从原始类或A阶段的类继承,周而复始,慢慢的,子类
* 就越来越多,层级就越来越深。然而,事实上,在C阶段需要A阶段的功能,但不需要
* B阶段的功能,在这种复杂情形下,继承就显得不灵活,于是想到了装饰模式。
* 装饰模式:
* 需要扩展一个类的功能,或给一个类增加附加责任
* 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
* 需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。
*
* 在使用装饰模式前,需要了解虚方法和抽象方法的区别:虚方法,是实例方法,可以在子类中
* 覆盖,也可以由该类对象直接调用。抽象方法需要写在抽象类中,抽象类不能实例化,所以要
* 使用抽象方法必须由子类实现后方可调用。
*
* 该模式中,要被扩展的类可以是包含抽象方法的抽象类,也可以是包含虚方法的实例类,也可
* 以是普通实例类。装饰模式就是在原有基类上做扩展,至于基类是什么性质并不重要.
* */
/// <summary>
/// 操作数据库的类,利用Decorate类动态给OperateDB添加功能
/// </summary>
public class OperateDB
{
public virtual string OperateData()
{
return null;
}
}
/// <summary>
/// 装饰类
/// </summary>
public class DecoratePatterns : OperateDB
{
private OperateDB operateDB;
public string result = null;
public void Decorate(OperateDB operateDBObj)
{
operateDB = operateDBObj;
}
public override string OperateData()
{
result = operateDB.OperateData();
return result;
}
}
/// <summary>
/// 添加
/// </summary>
public class InsertDecorate : DecoratePatterns
{
public override string OperateData()
{
base.OperateData();
NorthwindEntities db = new NorthwindEntities();
Employees e = new Employees();
e.LastName = "chuanshi_yoyo_yoyo";
e.FirstName = "zhushao";
db.AddToEmployees(e);
db.SaveChanges();
return result + "添加数据成功\n";
}
}
/// <summary>
/// 修改
/// </summary>
public class UpdateDecorate : DecoratePatterns
{
public override string OperateData()
{
base.OperateData();
NorthwindEntities db = new NorthwindEntities();
Employees e = db.Employees.Where(c => c.EmployeeID == 42).FirstOrDefault();
e.LastName = "yo_shao";
db.SaveChanges();
return result + "修改数据成功\n";
}
}
/// <summary>
/// 删除
/// </summary>
public class DelDecorate : DecoratePatterns
{
public override string OperateData()
{
base.OperateData();
NorthwindEntities db = new NorthwindEntities();
Employees e = db.Employees.Where(c => c.EmployeeID == 42).FirstOrDefault();
db.DeleteObject(e);
db.SaveChanges();
return result + "删除数据成功\n";
}
}
}
2.调用
static void Main(string[] args)
{
OperateDB db = new OperateDB();
InsertDecorate insert = new InsertDecorate();
UpdateDecorate update = new UpdateDecorate();
DelDecorate del = new DelDecorate();
//装饰顺序.本质上,只是类的组合而已
insert.Decorate(db);
update.Decorate(insert);
del.Decorate(update);
Console.WriteLine(del.OperateData());
Console.ReadKey();
}
- 装饰模式:类的组合调用
- 装饰模式--一个套餐组合的原型
- Spring容器装饰者模式应用之实现业务类与服务类自由组合的解决方案
- 装饰模式设计-装饰类和继承类的区别
- 装饰模式的应用
- 装饰模式的思考
- 装饰模式的结构
- 装饰模式的理解
- 装饰模式的应用
- 装饰模式的优点
- 装饰类设计模式
- 装饰类设计模式
- 装饰模式(结构类)
- 装饰类模式
- JAVA设计模式-装饰设计模式-继承体系的由来和装饰类的优化
- 【设计模式】装饰模式、模板方法模式、观察者模式、组合模式、桥接模式
- 设计模式(3)-装扮你的类(装饰模式)
- JAVA 装饰类(装饰设计模式)
- vim或sed删除文本文件中所有的中文字符
- 20110111
- file_operations数据结构分析
- jQuery插件开发全解析
- 开源学习总贴
- 装饰模式:类的组合调用
- Default section head title font & color and so on
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号:四 shmem中初始化subtrans
- struts.xml配置详解
- 代理模式
- 恢复Active Desktop
- android中sqlite的query中的String[]造成sql畸形
- 用autotools制作Makefile 和configure文件
- 【完全二分匹配必须边】POJ 1486