设计模式之装饰模式
来源:互联网 发布:剑三好友招募积分算法 编辑:程序博客网 时间:2024/04/30 23:42
装饰模式:动态的给一个对象添加一些额外的职责,在增加功能方面,比生成子类更为灵活。它的好处是是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。
装饰模式具有鲜明的特点: 1、装饰对象和真实对象有相同的接口。
2、通过创建一个包装对象,也就是装饰来包裹真实的对象。
3、装饰对象接受所有来自客户端的请求。
4、装饰对象可以在转发这些请求以前或以后增加一些附加功能。
结构图如下:
装饰模式的适用情况:对象动态功能的添加或撤销。
用于对象动态或添加附加职责。
当不能采用生成子类的方法进行扩充时。
具体应用:
<span style="font-family:SimSun;font-size:18px;">using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 装饰模式6._5{ class Program { class Person { public Person() { } private string name; public Person(string name) { this.name = name; } public virtual void Show() { Console.WriteLine("装扮的{0}", name); } } class Finery : Person { protected Person component; public void Decorate(Person component) { this.component = component; } public override void Show() { if (component != null) ; { component.Show; } } } class TShirts : Finery { public override void Show() { Console.Write("大T恤"); base.Show(); } } class BigTrouser : Finery { public override void Show() { Console.Write("垮裤"); base.Show(); } } class Sneakers : Finery { public override void Show() { Console.Write("破球鞋"); base.Show(); } } class Suit : Finery { public override void Show() { Console.Write("西装"); base.Show(); } } class Tie : Finery { public override void Show() { Console.Write("领带"); base.Show(); } } class LeatherShoes : Finery { public override void Show() { Console.Write("皮鞋"); base.Show(); } } static void Main(string[] args) { Person xc = new Person("小菜"); Console.WriteLine("\n第一种装扮:"); Sneakers pqx = new Sneakers(); BigTrouser kk = new BigTrouser(); TShirts dtx = new TShirts(); pqx.Decorate(xc); kk.Decorate(pqx); dtx.Decorate(kk); dtx.Show(); Console.WriteLine("\n第二种装扮:"); LeatherShoes px = new LeatherShoes(); Tie ld = new Tie(); Suit xz = new Suit(); px.Decorate(xc); ld.Decorate(px); xz.Decorate(ld); xz.Show(); Console.Read(); } } }</span>
总结:装饰模式有效地把类的核心职责和装饰功能区分,去除重复装饰逻辑,实现类的简化;因为装饰模式成功的 将类的核心职责和装饰功能分开,所以在扩展对象功能方面具有较强的灵活性。但是装饰模式把每个要装饰的功都放在单独的类中让类来包装其所装饰的对象有时难免造成类的过多的和过度使用的情况,在具体运用时还需斟酌。
<span style="font-family:SimSun;font-size:18px;"> </span>
0 0
- 设计模式之装饰
- 设计模式之装饰
- 设计模式之装饰
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之 装饰模式
- 设计模式之-装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- 设计模式之装饰模式
- ServiceManager学习 (manager与Service之间关系)
- 湘潭邀请赛——Welcome to XTCPC
- 新家入住气味难忍 除去甲醛有妙招
- dedecms织梦:feedback评论内容
- 免费无线网络成为商家营销新模式
- 设计模式之装饰模式
- 第七周作业——背包问题
- UI 指派初始化方法 视图控制器 button响应方法
- JD 1526 朋友圈(并查集 合并)
- C#使用HttpClient进行GET&POST
- 深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(二,发送彩信<1>)
- 关于 Swift 的一点初步看法
- 亡羊补牢,尤为迟也
- 个人理财不可忽视的几件小事