7.设计模式-装饰模式
装饰模式即包装模式,是一种结构设计模式。从字面上理解就是包装一个对象。比如人要穿衣服,房子要装修。对于客户端来说,它是一个显示的包装,就是我知道你包装了什么。比如房子要装修。那么我们的房子可以抽象为一个接口,里面有一个装修的功能。它的某一个实现类属于空白。什么都不做。跟这个空白类平级需要一个装修抽象类,装修抽象类下有一些装修要素,比如装修墙,装修沙发,装修桌子。而我们只需要在这些装修抽象类中维护一个房子多态形式。代码如下
/*** 房子接口,用有装修的功能*/
public interface House {public void decorator();
}
/*** 空白房子,什么都不做*/
public class BlankHouse implements House{@Overridepublic void decorator() {System.out.println("我是一个空白房子");}
}
实际上这里也可以不用抽象类,直接用实现类也可以,但是这样就要在每个实现类维护House,所以这里用一个抽象类。
/*** 装饰器抽象类*/
public abstract class AbstractDecorator implements House{private House house;public AbstractDecorator(House house){this.house=house;}@Overridepublic void decorator() {this.house.decorator();}
}
/*** 沙发装饰器*/
public class SofaDecorator extends AbstractDecorator {public SofaDecorator(House house) {super(house);}/*** 核心在于装修的时候,先保留之前的装修方案*/@Overridepublic void decorator() {super.decorator();this.sofaDecorator();}private void sofaDecorator() {System.out.println("装修了大沙发");}
}
public class WallDecorator implements House {private House house;public WallDecorator(House house) {this.house=house;}@Overridepublic void decorator() {house.decorator();this.wallDecorate();}private void wallDecorate() {System.out.println("装修上了大墙");}
}
public class MainTest {public static void main(String[] args) {House house = new BlankHouse();house.decorator();//大白房System.out.println("................");house = new SofaDecorator(house);house.decorator();//装修大沙发System.out.println("................");house = new WallDecorator(house);house.decorator();//装修大墙System.out.println("=====================");//上面的方式需要一次,一次装修,下面的方式则是一次性装修完House house1 = new WallDecorator(new SofaDecorator(new BlankHouse()));house1.decorator();}
}
我是一个空白房子
................
我是一个空白房子
装修了大沙发
................
我是一个空白房子
装修了大沙发
装修上了大墙
》》》》》》》》》》》
我是一个空白房子
装修了大沙发
装修上了大墙
装饰器的目的就是可以层层包装,包装完成之后还是属于自身的那个对象。人穿上衣服还是那个人,房子装修之后还是那个房子。只是显示的添加了更多的东西在上面,具有组合的效果。可以选择性的装饰一些效果,比纯粹的继承要更加的灵活。但是因为嵌套层数太多,可能会导致问题排查不容易。
使用场景
1.需要去扩展一个类的功能的时候。
2.动态的进行类功能的加装和减装的时候。
7.设计模式-装饰模式相关推荐
- 设计模式----装饰模式
设计模式--装饰模式 "装饰模式(Decorator)"又名"包装模式(Wrapper)",通常用来灵活地扩充对象的功能. 在此之前我们可以通过类的继承来扩充父 ...
- 大话设计模式-装饰模式(大鸟和小菜Java版)
装饰模式:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.(百度百科) 这个模式让后期的修改变得极为简单,真的就高内 ...
- 大话设计模式—装饰模式
装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原 ...
- 设计模式--装饰模式
目录 什么是装饰模式? 应用代码示例 装饰模式模板 jdk中的装饰模式 为什么装饰器类不能直接实现Component父类? 什么是装饰模式? 以生活中的场景来举例,一个蛋糕胚,给它涂上奶油就变成了奶油 ...
- C++设计模式-装饰模式
目录 基本概念 代码和实例 基本概念 装饰模式是为已有功能动态地添加更多功能的一种方式. 当系统需要新功能的时候,是向旧系统的类中添加新代码.这些新代码通常装饰了原有类的核心职责或主要行为. 装饰模式 ...
- 李建忠设计模式——装饰模式
1."单一职责"模式 在软件组件的设计中,如果责任划分不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式 Deco ...
- C++设计模式——装饰模式(高屋建瓴)
原网址:https://blog.csdn.net/CoderAldrich/article/details/83115394 重点在于 ConcreteDecoratorA(Component *d ...
- java设计模式——装饰模式
装饰模式也称为包装模式.结构型设计模式之一,其使用一种对客户端透明的方式动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一. 装饰模式可以动态的给一个对象添加一些额外的职责.就增加功能功能来说 ...
- 设计模式——装饰模式详解
0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇 ...
- 设计模式 | 装饰模式
1 | 装饰模式的概述 我们在了解装饰模式之前,先回顾下生活中的几个常见现象,举例如下: 新房的装修,房屋装修并没有改变房屋居住的本质,但可以让房屋变得更漂亮,更温馨,更实用,更满足居家需求. 相片的 ...
最新文章
- LeetCode刷题记录6——696. Count Binary Substrings(easy)
- 集锦分享 | 200篇原创笔记,帮助你快速入门Python与机器学习
- 科技部部长:基础研究是科技创新“总开关”
- 【alibaba-cloud】nacos详解
- 关于Configuration.ConfigurationManager
- Git——git push 错误[error: src refspec master does not match any]解决方案
- 千分之三用计算机怎么算,浓度换算计算器(浓度单位换算器在线使用)
- HTTP协议及其POST与GET操作差异 C#中如何使用POST、GET等
- SpringBoot四大核心之actuator——程序监控器
- UVA10733 The Colored Cubes【Polya定理】
- 【转】requests、BeautifulSoup使用总结
- 幻想影院添加html渲染,幻想影院无毒版-幻想影院清爽版预约 _5577安卓网
- mobile的一些link
- multisim的汉化
- 大白菜pe 通用pe 安装心得
- 重启计算机有什么用,强制重启电脑有什么危害
- 对接萤石平台调用播放
- 编写网易邮箱登陆界面
- 阿里云镜像恢复,镜像取证
- inspects a maven model for resolution problems
热门文章
- [日志]小沈阳搞笑经典语录
- DNS服务器设置正确,客户机在加入域时,需要正确设置首选DNS服务器地址,否则无法加入。 ( )...
- java 三目运算符解析
- Spring Boot 集成 Redis 缓存
- iOS截取字符串(NSString)
- 华为手机锁屏后显示无法连接服务器,锁屏状态可以远程连接服务器
- ITU-T G.781标准解读(二)
- word删除多余换行_批量删除Word中多余回车
- LINUX特殊符号详解
- IRQL_NOT_LESS_OR_EUQAL,间歇性蓝屏,4800h笔记本,暗影精灵6,解决办法,蓝屏问题排查