- 浏览: 25637 次
- 性别:
- 来自: 上海
文章分类
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。
所谓透明地给一个对象增加功能,就是要给一个对象增加功能,但是不能让这个对象知道,也就是不能去改动这个对象。
public abstract class Component {
public abstract void operation();
}
public class ConcreteComponent extends Component {
public void operation() {
}
}
public abstract class Decorator extends Component {
protected Component component;
public Decorator(Component component) {
this.component = component;
}
public void operation() {
component.operation;
}
}
public class ConcreteDecoratorA extends Decorator {
private String addedState;
public ConcreteDecoratorA(Component component) {
super(component);
}
public String getAddedState() {
return addedState;
}
public void setAddedState(String addedState) {
this.addedState = addedState;
}
public void operation() {
super.operation();
}
}
public class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
private void addedBehavior() {
}
public void operation() {
super.operation();
addedBehavior();
}
}
在面向对象的设计中,有一条基本的规则就是“尽量使用对象组合,而不是对象继承”来扩展和复用功能。
装饰模式和AOP在思想上有共同之处。
所谓透明地给一个对象增加功能,就是要给一个对象增加功能,但是不能让这个对象知道,也就是不能去改动这个对象。
public abstract class Component {
public abstract void operation();
}
public class ConcreteComponent extends Component {
public void operation() {
}
}
public abstract class Decorator extends Component {
protected Component component;
public Decorator(Component component) {
this.component = component;
}
public void operation() {
component.operation;
}
}
public class ConcreteDecoratorA extends Decorator {
private String addedState;
public ConcreteDecoratorA(Component component) {
super(component);
}
public String getAddedState() {
return addedState;
}
public void setAddedState(String addedState) {
this.addedState = addedState;
}
public void operation() {
super.operation();
}
}
public class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
private void addedBehavior() {
}
public void operation() {
super.operation();
addedBehavior();
}
}
在面向对象的设计中,有一条基本的规则就是“尽量使用对象组合,而不是对象继承”来扩展和复用功能。
装饰模式和AOP在思想上有共同之处。
发表评论
-
访问者模式Visitor预留通路,回调实现
2014-03-13 16:55 379表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各 ... -
桥接模式Bridge分离抽象和实现
2014-03-13 16:55 491将抽象部分与它的实现部分分离,使它们都可以独立地变化。 桥接 ... -
职责链模式Chain of Responsibility分离职责,动态组合
2014-03-12 17:25 341使多个对象都有机会处 ... -
解释器模式Interpreters分离实现,解释执行
2014-03-12 16:27 295给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解 ... -
享元模式Flyweight分离与共享
2014-03-12 13:20 301运用共享技术有效地支持大量细粒度的对象。 安全实体:就是被系 ... -
备忘录模式Memento保存和回复内部状态
2014-03-11 17:47 433在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外 ... -
状态模式State根据状态来分离和选择行为
2014-03-11 17:20 399允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改 ... -
策略模式Strategy分离算法,选择实现
2014-03-11 15:26 417迪米特法则:LoD,最少知识原则。 如果两个类不必彼此直接通信 ... -
模板方法模式Templete Method 固定算法骨架
2014-03-11 11:15 537定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法 ... -
组合模式Composite统一叶子对象和组合对象
2014-03-07 18:18 307将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使 ... -
迭代器模式Iterator 控制访问聚合对象中的元素
2014-03-07 17:57 410提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该 ... -
命令模式Command 封装请求
2014-03-07 16:26 380将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数 ... -
观察者模式Observer订阅模式-触发联动
2014-03-07 11:19 383定义对象间的一种一对 ... -
代理模式Proxy 为别人做嫁衣(控制对象访问)
2014-03-06 00:39 331为其他对象提供一种代理以控罪对这个对象的访问。 代理大致被分为 ... -
中介者模式Mediator 封装交互
2014-03-06 00:19 370用一个中介对象来封装 ... -
原型模式Prototype 克隆生成对象
2014-03-06 00:19 566用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 ... -
生成器模式Builder 分离整体构建算法和部件构造
2014-03-06 00:19 307将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ... -
抽象工厂模式 Abstract Factory 选择产品簇的实现
2014-03-06 00:20 417工厂方法模式或简单工 ... -
工厂方法模式Factory Method延迟到子类来选择实现
2014-03-05 18:12 950定义一个用于创建对象 ... -
单例模式Singleton某个类只需要一个类实例
2014-03-05 16:46 426保证一个类只有一个实例,并提供一个访问它的全局访问点。 懒汉 ...
相关推荐
装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...
装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...
在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在运行时可以被改变,而不会破坏封装性。 装饰模式的核心思想是通过将一个类包装在一个与它具有相同接口的装饰类中来实现。装饰类通常包含一个...
装饰者模式(Decorator)是一种设计模式,用于在运行时动态地给对象添加额外的责任或功能。它是结构型设计模式的一种,能将行为的增加与对象的创建分离,使得我们可以独立地扩展对象的功能。 在Java或其他面向对象...
在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。下面将详细探讨装饰模式的核心概念、结构、优点以及如何通过示例代码`decoratorDemo`来理解这一模式。 **装饰模式的核心概念** 1...
【Decorator模式】是一种设计模式,它允许在运行时动态地给对象...在实际的软件开发中,Decorator模式同样适用于那些需要动态增减功能的对象,例如在UI设计中添加装饰元素,或者在数据库连接池中添加不同的连接策略等。
装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许动态地给一个对象添加新的功能,而无需修改其原有代码。这个模式的核心思想是通过将对象封装在一个包装器(Decorator)中来扩展其行为,而包装器和原始...
Decorator模式,也称为装饰模式,是设计模式中的一个重要组成部分,它在不改变原有对象接口的前提下,动态地给对象添加新的功能,从而扩展了对象的能力。这篇博客()将深入探讨这个模式的细节。 装饰模式的核心...
通过组合多个装饰器,我们可以动态地改变对象的行为,而不需要修改原有对象的代码。此外,由于装饰器和组件具有相同的接口,因此装饰后的对象可以像原始对象一样使用,降低了系统的耦合度。然而,装饰模式可能会导致...
在装饰者模式中,我们通常有两个主要的角色:Component(组件)和Decorator(装饰器)。Component是被装饰的对象接口,定义了所有装饰器和原始对象共同拥有的行为。Concrete Component是Component的具体实现,是实际...
总结起来,装饰者模式在C++中的实现提供了动态组合新功能的能力,使得系统更加灵活,避免了使用继承带来的类爆炸问题。通过定义接口和一系列装饰者,我们可以根据需要自由组合和扩展对象的行为,这在软件设计中是...
装饰模式(Decorator Pattern)是一种结构型设计模式,用于动态地给一个对象添加一些额外的职责。该模式允许在不修改原有对象的情况下,动态地改变对象的行为。 定义与结构 装饰模式由四个角色组成: 1. 抽象构件...
总结来说,“设计模式 t07Decorator”着重介绍的是如何使用装饰者模式来动态地扩展对象的功能,它强调了面向对象设计中的灵活性和可扩展性,是软件开发中一个重要的设计原则和工具。通过理解和应用装饰者模式,我们...
在C++中,装饰模式通常涉及到继承和组合。它通过创建一个包装器对象,该对象包含对原始对象(也称为组件)的引用,并扩展其行为。装饰类通常具有与被装饰类相同的接口,这样客户端代码可以透明地处理装饰对象和原始...
装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...
总之,装饰者模式是一种强大的设计工具,它通过组合而非继承来扩展对象的功能,避免了因为类的爆炸性增长而带来的复杂性。在C++中,通过合理使用装饰者模式,我们可以构建出更加灵活、可维护的软件系统。
装饰器模式是一种设计模式,它允许我们在不修改原有对象的基础上,为对象添加新的行为或属性。在WPF中,Decorator类通常用于改变控件的外观,如添加边框、背景等。以标题中提到的"自定义边框"为例,我们可以创建一个...
装饰模式的核心在于装饰者(Decorator)类,它实现了与被装饰者(Component)相同的接口,使得装饰者可以与被装饰的对象无缝对接。 在Java或其他面向对象的语言中,装饰模式通常通过继承和组合来实现。装饰者持有对...