装饰模式

装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。
 抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口。
 package com.org.decorator;
    public interface Car {
    public void show();
    public void run();
}

具体组件角色:为抽象组件的实现类。

抽象装饰角色:包含一个组件的引用,并定义了与抽象组件一致的接口。
package com.org.decorator;
public abstract class CarDecorator implements Car{
    private Car car;
    
    public Car getCar() {
        return car;
    }

public void setCar(Car car) {
        this.car = car;
    }

public CarDecorator(Car car) {
        this.car = car;
    }
    
    public abstract void show();
}
具体装饰角色:为抽象装饰角色的实现类。负责具体的装饰。
package com.org.decorator;

public class SwimCarDecorator extends CarDecorator {

public SwimCarDecorator(Car car) {
        super(car);
    }

public void show() {
        this.getCar().show();
        this.swim();
    }
    
    public void swim() {
        System.out.println("?éò?ó?");
    }

public void run() {
        
    }

}

时间: 2024-08-20 02:54:17

装饰模式的相关文章

【设计模式】装饰模式

1.定义 1.1 标准定义 装饰模式(Decorator Pattern)是一种比较常见的模式,其定义如下:Attach additionalresponsibilities to an object dynamically keeping the same interface.Decorators provide a flexiblealternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责.就增加功能来说

(四)装饰模式-C++实现

动态地给对象添加一些额外的职责.就功能来说,装饰模式相比派生子类更为灵活. 当需要改进类的某个功能,而不是该类创建的全部对象时,可以使用这种设计模式. 装饰模式中有四种角色; 1.抽象组件:我们需要改进的类的父类,是一个抽象类.定义了一些虚函数. 2.具体组件:也就是它的某些对象可能需要被改进.也叫做被装饰者. 3.装饰:它也是抽象组件的子类,并且还包含一个抽象组件的声明,用来保存被装饰者的引用.它可以是抽象类,也可是是非抽象类. 4.具体装饰:它是装饰的实例. 本例实现的是一个Bird,作为一

设计模式学习-装饰模式

1.什么是装饰模式 装饰模式,在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.动态地给一个对象添加一些额外的职责.这样是能够把类中的装饰功能从类中搬移出去,这样可以简化原有的类.有效地把类的核心功能和装饰功能区分开了. 2.装饰模式的实现 在本例子中,举例最常见的人穿衣服的例子,首先我们定义这样一个Person的基类,如下: #include <cstdio> #include <string> #include

22装饰模式

 1装饰模式的核心内容是: A:通过中间这向多方发送消息 2装饰模式的作用:. 3装饰模式具体描述 装饰模式:装饰模式以对客户端透明的方式扩展对象的功能, 是继承关系的一个替代方案,提供比继承更多的灵活性. 动态给一个对象增加功能,这些功能可以再动态的撤消. 增加由一些基本功能的排列组合而产生的非常大量的功能. Mary过完轮到Sarly过生日,还是不要叫她自己挑了, 不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片, 在背面写上"最好的的礼物,就是爱你的Fita", 再到街

用装饰模式优化的一个实例2

业务场景 写一个数据层的loader,loader的数据拉取有可能走本地或者走网络,所以肯定需要通过回调来返回数据,而且两种情况在view层的表现不一样,也需要通过回调来告知 优化前 于是我一开始设计了这么两个接口来进行区分处理,而对于每个接口,都像网络请求一样写了4个回调,以适应任何意外情况 public interface ShortLoadAction<T> { void onStartShort(); void onCancelShort(); void onBrokenShort()

c++ 设计模式6 (Decorator 装饰模式)

4. "单一职责"类模式 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式代表: Decorator,Bridge 4.1 Decorator 装饰模式 代码示例:不同的流操作(文件流,网络流,内存流)及其扩展功能(加密,缓冲)等的实现 实现代码1: 类图结构示意(大量使用继承) 数据规模: 假设有n种文件,m种功能操作.该实现方法有(1 + n + n * m! / 2) 数量级的子

7 结构型模式之 - 装饰模式

装饰模式介绍:装饰模式也称为包装模式,是结构型模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一.在现实生活中你也可以看见很多装饰模式的例子,或者可以大胆地说装饰模式无处不在,就拿人来说,人需要各式各样的衣着,不管你穿着怎样,但是,对于个人的本质来说是不变的,充其量只是在外面披上一层包装而已,这就是装饰模式,装饰物也许各不相同但是装饰的对象本质是不变的. 装饰模式的定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式相比生成子类更加灵

Java设计模式----装饰模式

1.概念: (在我看来,模式就像是是一种思想,在这种思想的指引下,对代码和结构的一番加工和整合而已!都是套路!) 装饰模式又称包装(Wrapper)模式,是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案.对客户端透明意味着接口不变. 2.问题: 在OO设计和开发过程中, 经常会遇到下面的情况: 我们需要为已经设计好的类添加新的职责, 通常情况下我们会定义一个新类继承自定义好的类. 由于组合比继承更好(复杂度高,继承深度深等原因, 类图: 3.如何实现装饰: (1):继承形式:(不推

JAVA设计模式:装饰模式

前面我们学习了代理模式: 代理模式主要使用了java的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚得很,同样一个接口. 本次我们学习下装饰模式: 装饰模式又称为包装模式,装饰模式以对客户端透明的方式扩展对象功能,相对于代理而言,代理是不让客户端知道真实对象的信息,装饰模式是基层关系的一个替代方案. 装饰模式是采用对客户端透明的方式动态的给一个对象添加了更多职责,对于原来被装

JAVA设计模式之装饰模式

装饰模式:动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案. 例子:你要替一家咖啡店设计beverage类.beverage有很多种,并且可以添加许多的调料,比如蒸奶.豆浆.摩卡等. 1 public abstract class Beverage 2 { 3 String description = "Unknown Beverage"; 4 5 public String getDescription() 6 { 7 return description