0

0

Java中关于装饰者模式实例详解

黄舟

黄舟

发布时间:2017-09-05 10:27:31

|

1644人浏览过

|

来源于php中文网

原创

这篇文章主要介绍了java装饰者模式,结合实例形式详细分析了装饰着模式的原理与java具体实现技巧,需要的朋友可以参考下

本文实例讲述了Java装饰者模式。分享给大家供大家参考,具体如下:

装饰模式

在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。装饰对象可以在转发这些请求以前或以后增加一些附加功能。

立即学习Java免费学习笔记(深入)”;

这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。

优点

1. 装饰模式(Decorator)模式与继承关系的目的都是要扩展对象的功能,但是装饰模式(Decorator)可以提供比继承更多的灵活性。

2. 通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。

角色

在装饰模式中的各个角色有:

PHP 网络编程技术与实例(曹衍龙)
PHP 网络编程技术与实例(曹衍龙)

PHP网络编程技术详解由浅入深,全面、系统地介绍了PHP开发技术,并提供了大量实例,供读者实战演练。另外,笔者专门为本书录制了相应的配套教学视频,以帮助读者更好地学习本书内容。这些视频和书中的实例源代码一起收录于配书光盘中。本书共分4篇。第1篇是PHP准备篇,介绍了PHP的优势、开发环境及安装;第2篇是PHP基础篇,介绍了PHP中的常量与变量、运算符与表达式、流程控制以及函数;第3篇是进阶篇,介绍

下载

(1)抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。
(2)具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。
(3)装饰(Decorator)角色:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。
(4)具体装饰(Concrete Decorator)角色:负责给构件对象添加上附加的责任。

示例代码

我们以一个手抓饼为例,手抓饼可以有很多口味,但他最基础的是一个原味手抓饼,在此基础上,我们可以添加鸡蛋,牛肉,里脊肉等一种或多种搭配。

抽象构件(Component)角色


package 装饰者模式;
/**
 * 抽象类接口,规范饼的属性
 * @author oooo
 *
 */
public interface Cake {
//两个属性
  public String descripestion();
//属性描述
  public Double money();
//价格描述
}

具体构件(Concrete Component)角色


package 装饰者模式;
/**
 * 原味手抓饼类
 * @author oooo
 *负责接收附加属性的类
 */
public class shreddedcake implements Cake{
//实现Cake接口
  @Override
  public String descripestion() {
    //描述属性
    return "原味手抓饼";
  }
  @Override
  public Double money() {
     //描述价格
    return 3.5;
  }
}

装饰(Decorator)角色


package 装饰者模式;
/**
 * 建立和饼的连接,得到原始饼的属性,添加属性的中介。
 * @author oooo
 *
 */
public abstract class Deractor implements Cake{
  Cake cake;
  public Deractor(Cake cake) {
    this.cake=cake;
  }
  public String descripestion(){
    return cake.descripestion();
  }
  public Double money(){
    return cake.money();
  }
}

具体装饰(Concrete Decorator)角色


package 装饰者模式;
/**
 * 鸡蛋手抓饼类
 * @author oooo
 *添加鸡蛋属性
 */
public class EggshrededCake extends Deractor{
  public EggshrededCake(Cake cake) {
    super(cake);
  }
  public String descripestion() {
    return "鸡蛋"+cake.descripestion();
  }
  @Override
  public Double money() {
    return 3.5+1.5;
  }
}

具体装饰(Concrete Decorator)角色


package 装饰者模式;
/**
 * 牛肉味手抓饼
 * @author oooo
 *添加牛肉属性
 */
public class beffshredded extends Deractor{
  public beffshredded(Cake cake) {
    super(cake);
    // TODO Auto-generated constructor stub
  }
  public String descripestion() {
    return "牛肉"+cake.descripestion();
  }
  @Override
  public Double money() {
    return cake.money()+3.0;
  }
}

测试类


package 装饰者模式;
public class Test {
  /**
   * 测试类
   * @param args
   */
  public static void main(String[] args) {
    //新建一个原味手抓饼类
    shreddedcake sh=new shreddedcake();
    System.out.println(sh.descripestion());
    System.out.print("  价格: "+sh.money());
    //新建一个鸡蛋类,附加鸡蛋属性到手抓饼上
    EggshrededCake egg=new EggshrededCake(sh);
    System.out.println(egg.descripestion());
    System.out.print("  价格:"+egg.money());
    //新建一个牛肉类,附加牛肉属性到手抓饼上
    beffshredded beff=new beffshredded(egg);
    System.out.println(beff.descripestion());
    System.out.print("  价格:"+beff.money());
  }
}

输出的结果:


原味手抓饼  价格: 3.5
鸡蛋原味手抓饼  价格:5.0
牛肉鸡蛋原味手抓饼  价格:8.0

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

622

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

C# 教程
C# 教程

共94课时 | 7.9万人学习

Java 教程
Java 教程

共578课时 | 53.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号