菜鸟硕枫设计模式系列之10 装饰模式
发布日期:2021-10-01 08:45:09
浏览次数:2
分类:技术文章
本文共 1876 字,大约阅读时间需要 6 分钟。
装饰模式是对对象功能的扩展的一种模式,好处在于不更改原有对象的特性,只是通过注入方式为对象添加一些额外的功能,使得对象的功能丰富,特别有利于对对象行为的多个细小行为的添加。装饰模式是一种结构型模式。 装饰模式类图: [img]http://dl.iteye.com/upload/attachment/364545/b30e222f-1f5e-3ad1-a21f-ff3cec6723b6.jpg[/img] 具体demo示例: //组件抽象类package decoratorPattern; public abstract class Component { public abstract void doSomething(); }具体实现:
package decoratorPattern; public class ConcreteComponent extends Component{ @Override public void doSomething() { System.out.println("welcome to Taobao."); } }装饰者:
package decoratorPattern; public abstract class Decorator extends Component{ private Component component; public abstract void doSomeDecoratorThing(); public void doSomething(){ doSomeDecoratorThing(); component.doSomething(); } public void setComponent(Component component) { this.component = component; } }具体装饰者1:
package decoratorPattern; public class ConcreteDecoratorA extends Decorator { @Override public void doSomeDecoratorThing() { System.out.println("Morning,"); } }具体装饰者2:
package decoratorPattern; public class ConcreteDecoratorB extends Decorator{ @Override public void doSomeDecoratorThing() { System.out.println("Afternoon,"); } }测试类:
package decoratorPattern; public class decoratorPatternTest { public static void main(String[]args){ Component component = new ConcreteComponent(); System.out.println("-----------------------------"); component.doSomething(); System.out.println("-----------------------------"); ConcreteDecoratorA concreteDecoratorA =new ConcreteDecoratorA(); concreteDecoratorA.setComponent(component); concreteDecoratorA.doSomething(); System.out.println("-----------------------------"); ConcreteDecoratorB concreteDecoratorB =new ConcreteDecoratorB(); concreteDecoratorB.setComponent(component); concreteDecoratorB.doSomething(); } }说明:和直接子类相比,利用装饰者的话,能够更灵活的丰富对象的行为。
转载地址:https://blog.csdn.net/iteye_2655/article/details/81970411 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月14日 05时25分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【Leetcode刷题篇】leetcode207 课程表
2019-04-26
【Linux篇】Linux常用命令之性能优化
2019-04-26
【面试篇】JVM体系
2019-04-26
【多线程与高并发】线程的优先级是怎么回事?
2019-04-26
【多线程与高并发】Java守护线程是什么?什么是Java的守护线程?
2019-04-26
【Leetcode刷题篇】leetcode337 打家劫舍III
2019-04-26
【Leetcode刷题篇】leetcode316 去除重复字母
2019-04-26
【Leetcode刷题篇】leetcode1081 不同字符的最小子序列
2019-04-26
【面试篇】Java网络编程与IO流体系
2019-04-26
【大话Mysql面试】-Mysql的索引为什么要使用B+树,而不是B树,红黑树等之类?
2019-04-26
【大话Mysql面试】-MYSQL的两种存储引擎MyISAM与InnoDB的区别是什么?
2019-04-26
理解String.intern()和String类常量池疑难解析例子
2021-06-29
06 Python之函数调用与定义
2021-06-29
07 Python之Numpy库
2021-06-29
08 Python之Pandas库选择查看、选择
2019-04-26
如何在junit中使用SpringFramework的Ioc容器
2019-04-26
一个案例教你理解Spring面向切面编程(Spring Aop)
2019-04-26
手把手教你整合SSM框架
2019-04-26