网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.用Java创建带图像的菜单.
.Java实现用DOM文档和XML文件互换.
.EJB 技术的数据库应用(2).
.RMS 从入门到精通系列连载之一.
.用JAVA编制电子白板软件.
.使用UML编写Java应用程序 (2)设计.
.Eclipse 3.1中用注释单元测试框架.
.Spring WebFlow :2(WebFlow的关键.
.Java中的强大武器--对象的序列化.
.在Web Services中管理Sessions.
.探索J2ME:使用记录管理系统.
.Spring MultiAction的简单示.
.11本入门到精通J2EE书籍推荐.
.谈模式(Singleton Pattern)的变形.
.EJB轻松进阶之四.
.j2me getProperty.
.用Struts实现模板.
.采用HTTPClient通过代理连接服务.
.java设计模式之Prototype(原型).
.基于JDBC的数据库连接池技术研究.

Decorator模式中遭遇继承与聚合的冲突

发表日期:2008-1-5


一:背景:Decorator

*Decorator 常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator 模式中是必须的。

*Decorator 定义:

动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator 模式相比用生成子类方式达到功能的扩充显得更为灵活。

*为什么使用Decorator?

我们通常可以使用继续来实现功能的拓展,假如这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继续实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。

使用Decorator 的理由是:这些功能需要由用户动态决定加入的方式和时机.Decorator 提供了"即插即用"的方法,在运行期间决定何时增加何种功能。

*对于该模式,初步归纳为

1.基本功能为接口

2.Decorator参数为接口本身也为接口以便为下一个Decorator的参数

3.基本功能类实现接口 并作为Decorator构造函数的参数,以便在此基础上添加新功能

4.额外功能由Decorator中的数据结构处理

二:问题

这是一段Decorator设计模式的实现例子如下:

基本功能:Counter类

需要添加的功能

1:上限控制

2:下限控制

import java.io.*;

class Counter{

private int value;

public Counter(int v){

System.out.println("init me here in The Counter with value!");

value=v;

}

public Counter(Counter cc){

System.out.println("init me here in The Counter with class!");

value=cc.value;

}

public int read_value(){

System.out.println("read me here The value is:"+value);

System.out.println("read me here in The Counter!");

return value;

}

public void increment(){

System.out.println("increment me here in The Counter !");

value++;

}

public void decrement(){

System.out.println("decrement me here in The Counter !");

value--;

}

}

class Decorator extends Counter

{

Counter counter;

public Decorator(Counter c)

{

super(c);

System.out.println("init me here with class Decorator!");


上一篇:熟练掌握JDK1.5枚举类型 人气:797
下一篇:深入探索CORBA对象生命周期之慨述 人气:499
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐