博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程模式之装饰模式(Decorator)
阅读量:4467 次
发布时间:2019-06-08

本文共 2113 字,大约阅读时间需要 7 分钟。

装饰模式由四个角色组成:抽象组件角色,抽象装饰者角色,具体组件角色,具体装饰者角色

抽象组件角色:给出一个抽象接口,以规范“准备接受附加功能”的对象。

抽象装饰者角色:持有一个组件(Component)对象的引用,并定义一个与抽象组件接口一致的接口。

具体组件角色:定义一个准备接受附加功能的类。

抽象装饰者角色:负责给组件对象“贴上”附加的责任。

 

类图:

 

JAVA代码:

Conponent.java

package com.decorator;public interface Component{    void doSomeThing();}

ConcreteConponent.java

package com.decorator;public class ConcreteComponent implements Component{    @Override    public void doSomeThing()    {        System.out.println("功能A");    }}

Decorator.java

package com.decorator;public class Decorator implements Component{    private Component component;    //待修饰对象的一个引用        public Decorator(Component component)    {        this.component = component;    }    @Override    public void doSomeThing()    {        this.component.doSomeThing();    }}

 

ConcreteDecorator1.java

package com.decorator;public class ConcreteDecorator1 extends Decorator{    public ConcreteDecorator1(Component component)    {        super(component);    }        @Override    public void doSomeThing()    {        super.doSomeThing();        doAnotherThing();    }    private void doAnotherThing()    {        System.out.println("功能B");    }}

 

ConcreteDecorator2.java

 

package com.decorator;public class ConcreteDecorator2 extends Decorator{    public ConcreteDecorator2(Component component)    {        super(component);    }        @Override    public void doSomeThing()    {        super.doSomeThing();        doAnotherThing();    }        private void doAnotherThing()    {        System.out.println("功能C");    }}

 

Test.java

package com.decorator;public class Test{    public static void main(String[] args)    {        //ConcreteDecorator1对象装饰了ConcreteComponent对象        //ConcreteDecorator2对象又修饰了ConcreteDecorator1对象        //在不增加一个同时拥有ConcreteComponent、ConcreteDecorator1和ConcreteDecorator2三个类的功能        //于一身的一个“新的类”的情况下,通过修饰,实现了同时拥有这些功能        Component component = new ConcreteDecorator2(new ConcreteDecorator1(new ConcreteComponent()));                component.doSomeThing();    }    }

 

总结:

  装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,其可以在不创造更多子类的情况下将对象的功能加以扩展。

转载于:https://www.cnblogs.com/justmehyp/p/6217754.html

你可能感兴趣的文章
paip.提升效率--僵尸代码的迷思
查看>>
Atitit 自动化gui 与 发帖机 技术
查看>>
Atitit.研发团队与公司绩效管理的原理概论的attilax总结
查看>>
编程模式之装饰模式(Decorator)
查看>>
MVC中关于 使用后台代码 检查 用户名是否已经被清册
查看>>
匿名函数
查看>>
nginx相关
查看>>
(各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)...
查看>>
多种选择(Switch)
查看>>
[设计模式] .NET设计模式笔记 - 有多少种设计模式
查看>>
笔记52 Mybatis快速入门(三)
查看>>
Cracking The Coding Interview 1.2
查看>>
PL/SQL报错:无法解析指定的连接标识符
查看>>
LAMP安全加固
查看>>
力扣 5063 最后一块石头的重量 & II
查看>>
导航狗信息导航网站首页源代码(2017年11月03日版)
查看>>
Java中的Class.forName
查看>>
20165223 实验五 网络编程与安全
查看>>
java.math.BigDecimal cannot be cast to [Ljava.lang.Object 报错解决方法
查看>>
20145104张家明 《Java程序设计》第4周学习总结
查看>>