楼主: yining

[精华] [专题讨论]设计模式及应用

[复制链接]
论坛徽章:
0
51#
发表于 2003-12-23 22:56 | 只看该作者
装饰模式(Decorator)
装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。
装饰模式以对客户透明的方式给一个对象加上更多的责任。它可以在不使用创造更多子类的情况下,将对象的功能加以扩展。
装饰模式使用原来被装饰类的一个子类的实例,把客户端的调用委派到被装饰类。装饰模式的关键在于这种扩展是完全透明的。

在装饰模式中参与的角色有:
抽象构件角色:给出一个抽象接口,以规范准备接受附加责任的对象。
具体构件角色:定义一个将要接受附加责任的类。
装饰角色:持有一个构件对象的实例,并定一个一个与抽象构件接口一致的接口。
具体装饰角色,负责给构件对象“贴上”附加的责任。

假设有三个具体装饰类,则一个典型的创建过程如下:
new Decorator1(
    new Decorator2(
        new Decorator3(
            new ConcreteComponent()
            )
        )
    )
);
这样装饰模式看上去就像一个链表。

装饰模式在什么情况下应该使用
1)需要扩展一个类的功能,或给以各类增加附加责任。
2)需要动态给一个对象增加功能,而这些功能可以再动态撤销。
3)需要增加一些基本功能的排列组合而产生非常大量的功能,从而使得继承关系变得不现实。

使用装饰模式主要有以下优点:
1)和继承关系的目的都是扩展对象的功能,但装饰模式更为灵活
2)通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合
缺点:更容易出错。难于调试。

模式的简化:
在实际实现的时候,模式可能做出一些简化,在这种情况下,应该注意:
1)一个装饰类的接口应该与被装饰类的接口相容。
2)尽量保持抽象构件类是一个“轻“类。构件类主要是提供接口,而不是存储数据。不能将过多的逻辑和状态放置到抽象构件类
3)如果没有抽象构件类,那么装饰类常常是具体构件类的一个子类
4)略去抽象装饰类也是可以的。这样具体装饰类就要扮演双重的角色

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
52#
发表于 2004-1-1 08:38 | 只看该作者
没有看到邮件,来晚了!

使用道具 举报

回复
论坛徽章:
0
53#
发表于 2004-1-1 17:58 | 只看该作者
在MS SQL版里。不在这边。

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
54#
发表于 2004-1-18 14:58 | 只看该作者
最初由 yining 发布
[B]简单工厂的问题其实在于:内部的创建过程一定会有:if else的语句。按照Refactoring一书的说法,是一定要改掉的。 [/B]


现在偶用的就是这个简单工厂
无他,减少类的数目,而且产品相对固定,不会频繁变化

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
55#
发表于 2004-4-12 16:22 | 只看该作者
study

使用道具 举报

回复
论坛徽章:
1
会员2006贡献徽章
日期:2006-04-17 13:46:34
56#
发表于 2004-4-14 11:02 | 只看该作者
我的理解是工厂方法是生产好多同类产品中的某种产品,抽象工厂就相当于生成好多同性质的
工厂中的某种工厂。我不知道我这样理解是对不对。

使用道具 举报

回复
论坛徽章:
0
57#
发表于 2004-4-14 17:38 | 只看该作者

一直没搞明白

那个class和object的分类
是怎么分得
为什么有的模式属于class
有的属于object

使用道具 举报

回复
论坛徽章:
55
生肖徽章:虎
日期:2006-09-06 21:14:232011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18
58#
 楼主| 发表于 2004-4-15 23:53 | 只看该作者

Re: 一直没搞明白

最初由 lenovo 发布
[B]那个class和object的分类
是怎么分得
为什么有的模式属于class
有的属于object [/B]


没看明白,举个例子?

使用道具 举报

回复
论坛徽章:
5
开发板块每日发贴之星
日期:2005-09-20 01:02:25开发板块每日发贴之星
日期:2005-09-25 01:02:23会员2006贡献徽章
日期:2006-04-17 13:46:34奥运会纪念徽章:拳击
日期:2008-08-15 14:59:34马上有车
日期:2014-03-06 20:08:58
59#
发表于 2004-5-28 17:13 | 只看该作者
我以前没有学习过设计模式,不知道那位能够给我推荐一本关于设计模式的入门书呢!!

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
60#
发表于 2004-7-16 18:25 | 只看该作者
java与模式
j2ee核心模式
ejb设计模式

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表