入门设计模式之装饰

学习更多设计模式请参考:入门设计模式之汇总篇

装饰模式:以对客户端透明的方式扩展对象的功能

装饰模式类图如下:

我们分析一下类图:

  • Girl:女孩接口,定义了一个getName()方法
  • XiaoWang:女孩的实现类,她实现了getName方法,
  • Decorator:装饰类,当我们想要扩展小王的方法时,又不能改变她的代码,也不推荐使用继承,那么这个时候装饰类就上场了。此装饰类对小王进行了包装,由他来提供小王的方法
  • Decorator1,Decorator2:当我们想要对小王装饰的时候就可以使用此装饰类

让我们来看一下代码实现吧

public interface Girl {
    public void getName();
}

public class XiaoWang implements Girl {
    @Override
    public void getName() {
        System.out.println("小王");
    }
}

public class Decorator implements Girl {
    private Girl girl;
   public Decorator(){}
    public Decorator(Girl girl){
        this.girl=girl;
    }
    @Override
    public void getName() {
        this.girl.getName();
    }
}

public class Decorator1 extends Decorator  {
    Decorator1(){

    }
    Decorator1(Girl girl){
        super(girl);
    }
    @Override
    public void getName() {
        System.out.println("小王1");
         super.getName();
    }
}

public class Decorator2 extends Decorator  {
    Decorator2(){

    }
    Decorator2(Girl girl){
        super(girl);
    }
    @Override
    public void getName() {
        System.out.println("小王2");
         super.getName();
    }
}

当我们需要对小王装饰的时候只需要下面如此调用就行了

public static void main(String[] args){
  Girl girl=  new Decorator1(new Decorator2(new XiaoWang()));
  girl.getName();
}

原文地址:https://www.cnblogs.com/zhixiang-org-cn/p/9249018.html

时间: 2024-11-04 23:03:41

入门设计模式之装饰的相关文章

掌握设计模式之装饰者模式

![](http://ww4.sinaimg.cn/large/006tNc79ly1g4ztauvhzej30p00dw45p.jpg) ## 前言 当应用开发中,我们要为一个对象在原有功能上进行扩展增强时,往往采用继承的方式,而继承过多时就会使得功能类更加复杂,不利于维护,而设计模式中装饰者模式可以帮助我们更好对应这种场景,装饰者模式可以做到让对象能够动态地进行功能扩展,而不影响其他对象. 那究竟它是如何实现的呢,又如何实际应用呢,就让我们一起来学习下这个模式吧. ## 模式定义 装饰者模式

设计模式 2 —— 装饰者模式

设计模式目录: 设计模式 1 ——观察者模式 设计模式 2 —— 装饰者模式

设计模式 之 装饰者

装饰模式(Deocrator)           动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. 所谓装饰,就是一些对象给主题对象做陪衬.我们可以想象,在一个公司里面,每个人都有一个办工作,办工作都需要有电脑.电话.文件夹.盆栽.签字笔.公章等作为装饰.但是不同的人的办公桌上的装饰肯定不一样.比如说,老总的办公桌上应该什么都有,但是一般工作人员的办公桌上,就不应该有电话和公章.我们怎么动态的来装饰办公桌呢? using System; using System

Design Pattern 设计模式 Decorator 装饰者模式

1 设计一个基类 2 继承这个基类,并包含这个基类的一个对象 3 创建继承类的时候,初始化这个基类,因为是基类指针,所以可以是所有基类的衍生类对象,那么就可以叠加任意多个衍生类对象了. 关键是在衍生类中包含一个基类对象,然后有了继承和包含两重关系,可以使得一个类一个类对象叠加,达到装饰目的. 等于是创建了一个对象指针链表,一个一个对象发挥其相应的作用. 下面程序装饰一个桌子,同时包含释放内存的处理. 关键要知道基类的析构函数必须使用虚函数,为什么? 1 如果基类不是析构函数,那么如果衍生类中包含

java设计模式之 装饰器模式

适AT java设计模式之 装饰器模式 装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,动态给一个对象添提供了额外的功能. 我们通过下面的实例来演示装饰器模式的用法.模拟一个人从想吃饭.找饭店.享受美食.结束吃饭的过程 代码展示: 首先创建一个被修饰的接口 Eat package deco

设计模式之装饰者模式(Decorator)

1.定义 装饰者模式动态地将责任附加到对象上.若要扩展功能,装饰者提供了比继承更有弹性的替代方案 2.类图 Component抽象构件:Component是一个接口或者是抽象类,就是定义我们最核心的对象,也就是最原始的对象.在装饰者模式中,必然有一个最基本.最核心.最原始的接口或抽象类充当Component抽象构件. ConcreteComponent具体构件:ConcreteComponent是最核心.最原始.最基本的接口或抽象类的实现,你要装饰的就是它. Decorator装饰角色:一般是一

入门设计模式之桥梁

学习更多设计模式请参考:入门设计模式之汇总篇 桥梁模式:将抽象化与实现化脱藕,使二者可以独立的变化 大家应该对日志记录比较熟悉,不知道有没有自己写过一个日志处理的程序,你又是如何实现的呢? 今天的桥梁模式就根据一下需求来分析一下: 支持2个以上平台 支持2个以上格式 大家可以看一下这个需求哈,2个以上,那我就实现2个呗,一般人可能都会这样想.然后开始写,比如Windows存Txt格式.Windows存Xml格式.Linux存Txt格式的.Linux存Xml格式的,刷刷刷分分钟的就写好了. 但是如

入门设计模式之观察者

学习更多设计模式请参考:入门设计模式之汇总篇 观察者模式:多个观察者对象同时观察一个主题对象,当这个主题对象发生变化时,会通知所有的观察者 来看一下下方类图 Subject:主题类,所有主题的父类,负责对观察者的管理,有添加观察者,删除观察者,通知所有的方法 SubjectImpl:主题子类,拥有状态属性,当状态改变时会调用父类的notifyObserver方法通知所有观察者 Observe:观察者,定义了接受主题变化通知的方法 ObserveImpl:观察者实现类,实现了update()方法用

入门设计模式之合成

学习更多设计模式请参考:入门设计模式之汇总篇 合成模式的职责是将对象组织到树结构中 观察上方类图: interface,一个接口定义了一个获得当前对象名字的方法 leaf:树中的叶子节点,实现了interface Branch:树枝节点,不仅实现了getName方法,同样它本身具有添加节点删除节点的方法且本身可以包含多个树枝节点以及叶子节点 通过上述结论我们可以发现其实合成模式就是树的结构的实现 来看一下代码: public interface Compent { public String g