Java装饰者模式
定义:在不改变原有对象的基础上,将功能附加到对象自上
提供了比继承更有弹性的替代方案(扩展原有对象功能)
类型:结构型
扩展一个类的功能或给一个类添加附加职责
动态的给一个对象添加功能,这些功能可以再动态的撤销
继承的有力补充,比继承灵活,不改变原有对象的情况下给一个对象扩展功能
通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果
缺点:
会出现更多的代码,更多的类,增加程序复杂性
动态装饰时,多层装饰时会更加复杂
public abstract class ABattercake {
protected abstract String getDesc();;
protected abstract int cost();
}
public class Battercake extends ABattercake {
@Override
protected String getDesc() {
return "jianbing";
}
@Override
protected int cost() {
return 8;
}
}
public class AbstractDecorator extends ABattercake {
private ABattercake aBattercake;
public AbstractDecorator (ABattercake aBattercake){
this.aBattercake=aBattercake;
}
@Override
protected String getDesc() {
return this.aBattercake.getDesc();
}
@Override
protected int cost() {
return this.aBattercake.cost();
}
}
public class EggDecorator extends AbstractDecorator {
public EggDecorator(ABattercake aBattercake){
super(aBattercake);
}
@Override
protected String getDesc() {
return super.getDesc()+" jiayigejidan";
}
@Override
protected int cost() {
return super.cost()+1;
}
}
public class SausageDecorator extends AbstractDecorator{
public SausageDecorator(ABattercake aBattercake){
super(aBattercake);
}
@Override
protected String getDesc() {
return super.getDesc()+" jiayigenxiangchang";
}
@Override
protected int cost() {
return super.cost()+2;
}
}
public class Test {
public static void main(String[] args) {
ABattercake aBattercake;
aBattercake=new Battercake();
aBattercake=new EggDecorator(aBattercake);
aBattercake=new EggDecorator(aBattercake);
aBattercake=new SausageDecorator(aBattercake);
System.out.println(aBattercake.getDesc()+""+aBattercake.cost());
}
}
类图:

Java装饰者模式的更多相关文章
- java装饰者模式理解
java 装饰者模式其实就是扩展子类的功能,和继承是一个性质. 但继承是在编译时就固定扩展了父类的一些功能,而装饰者模式是在运行过程中动态绑定对象,实现一个子类可以随时扩展功能. 将方法排列组合,也可 ...
- java 装饰者模式与继承的区别
装饰者模式目标 把许多要实现的功能,加载在子类上,类的继承,显得很臃肿,装饰着模式是在不改变原有类文件和使用继承的情况下,通过创建一个包装对象动态地扩展一个对象的功能,相比生成子类更为灵活 装饰者模式 ...
- JAVA装饰器模式
Java程序员们应该对java.io对不会陌生,因为java.io包采用了装饰器模式. 一.定义: Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样 ...
- Java 装饰器模式详解
转载请注明出处:http://blog.csdn.net/zhaoyanjun6/article/details/56488020 前言 在上面的几篇文章中,着重介绍了Java 中常见的 IO 相关知 ...
- Java装饰者模式(Decorator)
一.定义 装饰模式的设计理念主要是以对客户端透明的方式动态扩展对象的功能,是继承关系的一个替代(继承会产生大量的子类,而且代码有冗余).装饰模式可以在不创造更多子类的情况下,将对象的功能加以扩展.装饰 ...
- JAVA装饰者模式(从现实生活角度理解代码原理)
装饰者模式可以动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 该模式的适用环境为: (1)在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职 ...
- java 装饰者模式
一.概念 我们在使用以前既定的类或者使用别人使用的类的时候,如果该类的方法,不满足你的需求的时候,需要你进行额外附加功能的时候,往往我们想到的方法是继承实现, 但是继承会导致类的越来越庞大,有什么好的 ...
- Java装饰者模式(思维导图)
图1 装饰者模式[点击查看图片] 1,一个简单的以人为主体的装饰者模式 被装饰者 public interface Human {//被装饰者 public void wearClothes(); p ...
- java 装饰器模式实现代码
目录 1.实现装饰器模式 1.1.公共接口 1.2.接口实现 1.3.装饰器 1.4.装饰构件 1.5.测试装饰器 上图展示的是io流中的一个装饰者模式的代码结构 1.实现装饰器模式 汽车厂生产汽车实 ...
随机推荐
- 将replicated数据与元数据关联
本章介绍元数据的用法以及如何将replicated数据与元数据相关联. 12.1概述 将数据从一个表复制到另一个表时,重要的考虑因素是源表和目标表的列结构(元数据)是否相同. Oracle Golde ...
- 关于Oracle数据库后台进程
为了最大限度地提高性能并适应许多用户,多进程Oracle数据库系统使用后台进程.后台进程将合并功能,否则这些功能将由运行于每个用户进程的多个数据库程序处理.后台进程异步执行I / O并监视其他Orac ...
- QR 编码原理(三)
一.日本汉字(KANJI)是两个字节表示的字符码,编码的方式是将其转换为13字节的二进制码制. 转换步骤为: 1.对于JIS值为8140(hex) 到9FFC(hex)之间字符: a)将待转换的JIS ...
- Latex自定义文档纸张大小
\usepackage{geometry} \special{papersize=8.5in,11in}%纸张大小为8.5inch×11inch
- Trickbot增加的远程应用程序凭证抓取功能
来源 https://blog.trendmicro.com/trendlabs-security-intelligence/trickbot-adds-remote-application-cred ...
- PHP随机红包算法
2017年1月14日 14:19:14 星期六 一, 整体设计 算法有很多种, 可以自行选择, 主要的"架构" 是这样的, 用redis decr()命令去限流, 用mysql去记 ...
- UML建模图
UML 2.0规范 迅速成为建立软件系统可视化.规范.文档的标准.统一建模语言(UML) 也被用于非软件系统的建模,并在很多领域,诸如金融,军事,工程方面应用广泛. UML 2 定义了13种基本的图, ...
- Python-WEB -VUE初识
走进Vue_渐进式 JavaScript 框架 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式完成整个web前端项目 what -- 什么是Vue 可以独立完成前后 ...
- Confluence 6 索引支持的语言并进行修改
Confluence 中索引的语言配置. 可以单击编辑后进行修改. https://www.cwiki.us/display/CONF6ZH/Configuring+Indexing+Language
- Confluence 6 配置一个数据源连接
这个指南指导你如何配置使用 JNDI 数据源来连接到你的数据库.使用这个类型的连接,Confluence 将会询问应用服务器(Tomcat)中你配置的连接信息. 如果你希望使用 JDBC 的数据库连接 ...