- 浏览: 203619 次
- 性别:
- 来自: 芜湖
文章分类
- 全部博客 (139)
- 软件 (0)
- Pattern (6)
- CSDN导入 (19)
- Struts (3)
- [网站分类]1.网站首页原创 (27)
- [网站分类]6.转载区 (4)
- Hibernate (10)
- Error (8)
- [网站分类]2.Java新手区 (20)
- Java (8)
- [网站分类]4.其他技术区 (10)
- Web (1)
- C++ (2)
- Algorithm (4)
- Linux (2)
- Skill (1)
- Tech (2)
- Note (2)
- [网站分类]3.非技术区 (1)
- Database (1)
- Winty (7)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
最新评论
-
haohao-xuexi02:
很不错哦。
O'Reilly cos上传组件的使用(1/3) - 上传文件 -
yoin528:
useUnicode=true&charact ...
[原]向MySQL数据库插入Blob数据的问题 -
xiaoqing20:
下载来看看!呵呵
[原]Struts2类型转换 -
xiaoqing20:
[原]Struts2类型转换
[关键字]:java,design pattern,设计模式,《Java与模式》学习,decorator,装饰模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com)
[正文]:
package pattern.decorator;
/**
* 装饰模式:Decorator Pattern
* @version 2009-6-5
* @author Winty(wintys@gmail.com)
*/
public class DecoratorTest{
public static void main(String[] args){
Component component;
component = new ConcreteComponent();
component.doSomething();
System.out.println("");
//透明的装饰模式
Component decorator;
decorator = new ConcreteDecorator(component);
decorator.doSomething();
System.out.println("");
//半透明的装饰模式
ConcreteDecorator decorator2;
decorator2 = new ConcreteDecorator(component);
decorator2.doSomething();
decorator2.doOtherThings();
}
}
/**
* 抽象构件:Component
*/
interface Component{
public abstract void doSomething();
}
/**
* 具体构件:ConcreteComponent
*/
class ConcreteComponent implements Component{
@Override
public void doSomething(){
System.out.println("do something");
}
}
/**
* 装饰:Decorator
*/
abstract class Decorator implements Component{
private Component comp;
public Decorator(Component comp){
this.comp = comp;
}
@Override
public void doSomething(){
comp.doSomething();
}
}
/**
* 具体装饰:ConcreteDecorator
*/
class ConcreteDecorator extends Decorator{
public ConcreteDecorator(Component comp){
super(comp);
}
@Override
public void doSomething(){
super.doSomething();
doMoreThings();
}
private void doMoreThings(){
System.out.println("do more things.");
}
/**
* 新增的方法不是Component接口的一部分,
* 所以不能通过Component接口透明地访问。
*/
public void doOtherThings(){
System.out.println("do other things.");
}
}
/**
* 装饰模式:Decorator Pattern
* @version 2009-6-5
* @author Winty(wintys@gmail.com)
*/
public class DecoratorTest{
public static void main(String[] args){
Component component;
component = new ConcreteComponent();
component.doSomething();
System.out.println("");
//透明的装饰模式
Component decorator;
decorator = new ConcreteDecorator(component);
decorator.doSomething();
System.out.println("");
//半透明的装饰模式
ConcreteDecorator decorator2;
decorator2 = new ConcreteDecorator(component);
decorator2.doSomething();
decorator2.doOtherThings();
}
}
/**
* 抽象构件:Component
*/
interface Component{
public abstract void doSomething();
}
/**
* 具体构件:ConcreteComponent
*/
class ConcreteComponent implements Component{
@Override
public void doSomething(){
System.out.println("do something");
}
}
/**
* 装饰:Decorator
*/
abstract class Decorator implements Component{
private Component comp;
public Decorator(Component comp){
this.comp = comp;
}
@Override
public void doSomething(){
comp.doSomething();
}
}
/**
* 具体装饰:ConcreteDecorator
*/
class ConcreteDecorator extends Decorator{
public ConcreteDecorator(Component comp){
super(comp);
}
@Override
public void doSomething(){
super.doSomething();
doMoreThings();
}
private void doMoreThings(){
System.out.println("do more things.");
}
/**
* 新增的方法不是Component接口的一部分,
* 所以不能通过Component接口透明地访问。
*/
public void doOtherThings(){
System.out.println("do other things.");
}
}
发表评论
-
[原]导出CodeHelp的数据
2009-03-16 17:05 861搬到blogjava总得发点原创的东西吧。 Code ... -
[原]使用Ant实现zip压缩解压功能
2009-03-19 13:17 1722[关键词]:ant,zip,unzip,Apache,压缩,解 ... -
[原]EL函数的使用
2009-04-03 21:29 1121[标题]:EL函数的使用 [时 ... -
[原]对Class.getMethod()的调用未经检查
2009-04-05 15:52 2365[标题]:对Class.getMethod()的调用未经检查 ... -
[原]JNI简单示例
2009-04-05 21:33 1039[标题]:JNI简单示例 [时 ... -
[原]简单工厂模式
2009-04-14 12:26 755[关键字]:java,设计模式,简单工厂,《java与模式》 ... -
[原]工厂模式
2009-04-14 12:32 734[关键字]:java,design pattern,设计模式, ... -
[原]抽象工厂模式
2009-04-14 19:25 759[关键字]:java,design pattern,设计模式, ... -
[原]方法返回值为数组的另一种表示方法
2009-04-25 22:28 979[时间]:2009-04-25 今天看到JDK的源代码 ... -
[原]SAX使用示例
2009-04-26 19:18 2053[标题]:[原]SAX使用示例 [时间]:2009-4-25 ... -
[原]责任链模式
2009-05-09 16:47 738[关键字]:java,design pattern,设计模式, ... -
[原]状态模式
2009-05-18 23:03 839[关键字]:java,design pattern,设计模式, ... -
[原]策略模式
2009-05-21 22:21 706[关键字]:java,design pattern,设计模式, ... -
[原]VC实现重启路由器
2009-05-29 23:36 2082[标题]:[原]VC实现重启路 ... -
[原]远程登录Windows Server 2003的当前会话
2009-06-01 11:19 2075[标题]:远程登录Windows Server 2003的当前 ... -
[原]Tomcat crossContext
2009-06-01 12:27 6103[标题]:Tomcat crossContext [时间]:2 ... -
[原]装饰模式3-Grep
2009-06-07 22:42 702[关键字]:java,design pattern,设计模式, ... -
[原]合成模式-透明的
2009-06-08 22:23 766[关键字]:java,design pattern,设计模式, ... -
[原]合成模式-安全的
2009-06-08 22:27 842[关键字]:java,design pattern,设计模式, ... -
[原]模板方法模式
2009-06-15 17:05 678[关键字]:java,design pattern,设计模式, ...
相关推荐
装饰模式的运作过程通常是这样的:首先创建一个Concrete Component对象,然后通过一系列具体装饰器来包装这个对象,每次添加一个新的装饰器,就会为原对象增加一层新的功能。因为装饰器和具体组件都实现了相同的接口...
首先,装饰模式的核心在于它维护了对象的原始接口,这意味着你可以将装饰对象当作原对象使用。在Java中,这通常通过实现相同的接口或继承相同的基类来实现。例如,一个基础的`Character`接口或类定义了所有角色的...
这样,我们就使用装饰模式成功地为原咖啡添加了新功能,而且代码可读性好,易于维护和扩展。在实际的IT项目中,装饰模式经常用于日志记录、权限控制、性能监控等场景,因为它允许我们在不修改核心业务逻辑的情况下,...
装饰模式是一种结构型设计模式,它是面向对象设计中用来动态添加或修改对象功能的一种方法。在软件工程中,装饰模式允许我们向一个现有的对象添加新的行为或职责,同时又不改变其原有的结构,从而实现对类的功能扩展...
装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或属性,而不必修改原有类的代码。这种模式的核心在于装饰者和组件接口的统一,使得装饰者可以替代原对象并添加额外的功能。在"设计模式之...
装饰者模式的核心在于创建一个与原对象行为相似的新对象,这个新对象可以包含原对象,并添加额外的功能。装饰者通常是一个抽象类或接口,定义与原对象相同的方法,以便保持与原对象的行为一致性。装饰者模式可以用来...
4. 具体装饰(Concrete Decorator):添加了具体组件的新行为,是装饰模式的关键,它实现了抽象组件接口,并在需要的地方调用具体组件的方法。 举个例子,假设我们有一个`Drink`接口,`Coffee`是具体饮料,`...
装饰模式的核心在于创建一个与原类具有相同接口的新类(装饰类),并将其作为原类的一个包装,从而在不改变原类的基础上扩展其功能。这种方式避免了对原类进行大量修改,保持了代码的开放性和封闭性。 在`...
这种模式的核心思想是通过将对象包装在一个装饰类中来扩展其功能,装饰类与被装饰类具有相同的接口,因此在客户端代码中可以透明地替换原对象。 在Java中,I/O流处理是一个常见的应用场景,它涉及到数据的输入和...
2. **动态性**:装饰模式允许我们在运行时动态地为对象添加新功能,而无需修改代码。 3. **组合性**:通过多个装饰者的叠加,可以实现更复杂的功能,这比使用继承来扩展功能更加灵活。 4. **职责分离**:装饰者模式...
在Java中,装饰模式通常通过继承实现,一个装饰类会持有原对象的引用,并在其基础上增加新的方法或增强已有方法。例如,在数据库连接池中,我们可以创建一个基础的数据库连接类,然后通过装饰器类来添加连接池管理的...
装饰模式是一种设计模式,主要目的是在不改变原有对象结构的情况下,动态地为对象添加新的功能。它在软件工程中扮演着一个"增强"的角色,允许我们以优雅的方式扩展对象的行为,而无需修改对象的源代码。在前端...
装饰模式是一种结构型设计模式,通过将一个对象包裹在一个装饰类中,装饰类可以增加、修改或增强原对象的功能。与继承相比,装饰模式具有更大的灵活性,因为可以通过叠加多个装饰类来实现更复杂的组合功能,而不会...
装饰者模式的工作原理是,当需要改变或扩展一个对象的行为时,我们创建一个新的装饰者对象,这个装饰者持有对原对象的引用,然后在需要的地方添加新的行为。装饰者和原对象都实现了相同的接口,因此客户端代码可以...
这种模式通过将对象包装在一个装饰类中来实现,装饰类与原类有相同的接口,因此可以透明地替换或增强原有对象的功能。 在“装饰者模式代码demo”中,我们可以期待看到以下组件: 1. **Component接口/抽象类**:这...
1. **开闭原则**:装饰模式遵循开闭原则,对扩展开放,对修改关闭。我们可以在不修改原有代码的情况下,通过添加新的装饰者来扩展功能。 2. **灵活性**:装饰者提供了比继承更多的灵活性,因为我们可以根据需要组合...
装饰模式是一种结构型设计模式,它允许在运行时动态地为对象添加新的行为或职责,同时保持对象的接口不变。这种模式在不修改原有代码的基础上,通过组合而非继承来扩展对象的功能,避免了类爆炸的问题。 装饰模式的...
装饰模式的核心思想是用一个包装类包裹原对象,这个包装类与原对象具有相同的接口,从而可以在不改变原有对象的基础上,通过包装类添加额外的功能。 博客链接提供的文章详细分析了装饰模式的源码,下面是对装饰模式...
这种模式常被用于扩展或增强对象的功能,而无需修改原对象的代码,符合“开闭原则”。在Java的SSL(Secure Socket Layer)安全通信中,X509TrustManagerWrapper.java就是一个典型的装饰者模式应用示例。 X509...
装饰者模式的核心思想是将一个对象包装在一个装饰器对象中,装饰器对象拥有与原对象相同的接口,这样就可以透明地对原对象进行增强,同时保持原有功能不变。 首先,我们需要定义一个基础装备类(BaseEquipment),...