`
zy19982004
  • 浏览: 663737 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:252400
社区版块
存档分类
最新评论

设计模式学习三:装修者模式

阅读更多

一.概念

     动态的给一个对象添加额外的职责。想要扩展功能的话,装饰者提供了一种有别于继承的另外一种选择。

 

二.UML

  1. Component(概念中提到的对象接口),也就是“被装饰者”。
  2. ConcreateComponent(未添加任何职责的,对象接口的子类)。
  3. Decorator(装饰者抽象类),扩张了对象接口的功能。
  4. ConcreteDrcorator(具体装饰类),具体怎么装饰对象接口的在这些类里面反映。

三.实例分析

    家里买了一套房子,需要装修,考虑到预算只有这么多,不能采用全包的方式,于是采用将装修工作细化,以节省开销。

     House

package com.zzy.decorator;

/**
 * 被装修者-房子
 * @author eason
 *
 */
public interface House {
	public void decorate();
}

 

     BlankHouse

package com.zzy.decorator;

/**
 * 未经装修的房子
 * @author eason
 *
 */
public class BlankHouse implements House{

	@Override
	public void decorate() {
		System.out.println("未经装修的房子");
	}

}

 

     Decorator

package com.zzy.decorator;

/**
 * 装修工抽象类
 * @author eason
 *
 */
public class Decorator implements House{
	
	private House house;
	
	public Decorator(House house) {
		this.house = house;
	}

	@Override
	public void decorate() {
		house.decorate();
	}

}

 

     ElectricWirer

package com.zzy.decorator;

/**
 * 电线工
 * @author eason
 *
 */
public class ElectricWirer extends Decorator {
	
	public ElectricWirer(House house) {
		super(house);
	}

	@Override
	public void decorate() {
		super.decorate();
		//自己的逻辑-具体怎么包装的写在super.decorate()的前后任何地方
		System.out.println("已经装修完电线");
	}
}
 

 

     Floorer

package com.zzy.decorator;

/**
 * 地板工
 * @author eason
 *
 */
public class Floorer extends Decorator {
	
	public Floorer(House house) {
		super(house);
	}

	@Override
	public void decorate() {
		super.decorate();
		//自己的逻辑-具体怎么包装的写在super.decorate()的前后任何地方
		System.out.println("已经装修完地板");
	}
}
 

 

     WaterPiper

package com.zzy.decorator;

/**
 * 水管工
 * @author eason
 *
 */
public class WaterPiper extends Decorator {
	
	public WaterPiper(House house) {
		super(house);
	}

	@Override
	public void decorate() {
		super.decorate();
		//自己的逻辑-具体怎么包装的写在super.decorate()的前后任何地方
		System.out.println("已经装修完水管");
	}
}
 

 

     TestDecorator

package com.zzy.decorator;

/**
 * 测试类
 * @author eason
 *
 */
public class TestDecorator {

	public static void main(String[] args) {
		//空白房子一个
		House house = new BlankHouse();
		//一层层装修
		Decorator dec = new Floorer(new ElectricWirer(new WaterPiper(house)));
		dec.decorate();
	}

}

 

四.使用场景

  1. 为已有组件动态添加更多功能。

五.使用感受

  1. 将装饰功能的代码从Component里面提了出来,简化了Component。
  2. 客户端可以在运行时根据需要,选择需要的功能来包装Component。
  3. 继承是扩展功能的方式之一,但并不见得是达到弹性设计的最佳形方式。
  4. 组合和委托可用于在运行时动态地加上新的行为。装饰者模式实际上就是组合和委托。再次提到组合和委托,第一次提到是在策略模式 里面。
  5. 在日常的设计中,应该允许行为被扩展,而不需修改现有的代码。
  6. 装修者会导致设计中出现许多小对象,如果过度使用,会让程序变的复杂。
3
0
分享到:
评论
2 楼 zy19982004 2012-02-20  
zx246212 写道
看了,有点模糊,感觉用的就是多态么。请问,这还有什么玄机么?

装饰者模式本身就有多态的存在,可能是Decorator dec = new Floorer(new ElectricWirer(new WaterPiper(house)));  造成你的有点模糊。但我觉得装饰者模式,重点还是
#  public void decorate() {
#         super.decorate();
#         //自己的逻辑-具体怎么包装的写在super.decorate()的前后任何地方
#     } 
1 楼 zx246212 2012-02-17  
看了,有点模糊,感觉用的就是多态么。请问,这还有什么玄机么?

相关推荐

    Java设计模式案例(雷惊风)

    在编程领域,设计模式是一种被广泛认可的解决特定软件设计问题...以上设计模式的案例在"DesignPattern"文件中应该有详细的实现和解释,通过学习这些案例,开发者能更好地理解和应用这些设计模式,提升自己的编程能力。

    阿里巴巴国际站运营教程:旺铺装修.pdf

    通过这些章节,可以学习到旺铺设计的思路和技巧,以及如何跟随全球旺铺装修的趋势进行升级和优化。 五、全球旺铺装修趋势 随着移动办公和社交化趋势的上升,旺铺装修要紧抓无线端的流量风口。新版的旺铺升级版2.0...

    智慧教室装修方案设计.pdf

    智慧教室装修方案设计通常关注于如何将传统教室升级为高度集成、智能化、互动性强的学习环境。智慧教室的实现依赖于先进的技术设备和设计规划,以满足教育现代化的需求。 一、智慧教室的关键构成: 1. 教学互动系统...

    java毕业设计&课设-有住网(装修小程序).zip

    2. **MVC设计模式**:大多数Java Web应用遵循Model-View-Controller(MVC)设计模式,将业务逻辑、数据模型和用户界面分离,提高代码的可维护性和可扩展性。 3. **框架应用**:项目可能采用了Spring Boot框架,这是...

    智慧教室装修方案.doc

    智慧教室的装修应考虑到教学需求、技术集成以及使用者的舒适度,确保教室既满足传统教学的需求,也能适应未来的教育发展趋势。 二、总体目标 智慧教室装修的总体目标是建立一个高效、灵活、安全的学习环境,促进...

    安卓Android装修服务app设计源码案例设计.zip

    通过深入学习和分析这个"安卓Android装修服务app设计源码",开发者不仅可以提升Android应用开发技能,还能了解装修服务行业的特性和需求,为今后的项目提供宝贵经验。同时,这也是一种实战演练,有助于理解和应用...

    业主装修白皮书.doc

    4. **前期准备**:业主应自行测量房屋尺寸,了解基本格局,也可以请教他人经验,学习装修知识,特别是建材识别。 5. **家装咨询**:与多家装修公司沟通,明确装修风格、费用和周期。设计师会进行现场测量和设计,...

    装潢专业装修设计值得信赖粉刷海报 (PS素材资源、 PSD源文件格式图片下载、细分各图层 ).zip

    设计师在使用这个文件时,可以利用Photoshop的强大功能,如图层蒙版、混合模式、滤镜和调整图层等,来完善设计并实现个性化定制。同时,由于源文件包含了完整的图层信息,设计师可以深入了解设计思路,学习如何构建...

    龙发装修合同包含什么学习总结.doc

    【装修合同核心要点】 装修合同是业主(发包方)与装修公司(承包方)之间就住宅或商业空间装修工程签订的法律文件,...这为其他装修公司提供了优秀的服务模式参考,证明了优质服务对于品牌建设和市场竞争力的重要性。

    安卓Android装修服务app设计可导入studio毕业源码案例设计.zip

    MySQL是一个广泛应用的关系型数据库管理系统,开发者可能会在这里找到数据库的设计模式、表结构以及SQL查询语句,这些都是数据管理的基础。 3. **安卓服务器**:服务器端通常负责处理客户端的请求,如验证用户身份...

    环艺优秀毕业设计作品——培训中心装修设计(包含预览图jpg和.psd文件).zip

    例如,设计师可能使用了多个图层来分别处理墙面、地面、家具和装饰物,通过调整图层透明度、混合模式和蒙版来实现不同材质的融合;可能还使用了调整图层来控制整体的色调和氛围;文字图层则可能包含了对设计概念的...

    AI家庭装修、海报设计平台.txt

    根据提供的文件信息,知识点围绕“AI家庭装修、海报设计平台”展开。很遗憾,由于缺少具体的内容描述以及标签信息,无法提供更详细的背景信息。但基于标题和内容部分提供的信息,我们可以从以下几个方面来探讨相关...

    “互联网 教育”模式下电子商务美工人才实践能力培养探索与实践.zip

    三、教育模式的实践与探索 1. 案例研究:引入成功的电商设计案例,分析其设计理念、视觉表现和营销策略,让学生从中吸取经验。 2. 反馈机制:建立学生作品在线展示和评价系统,鼓励学生互相学习、互评,促进自我...

    java毕业设计&课设-家居装修团购小程序.zip

    2. **MVC(Model-View-Controller)架构**:项目遵循MVC设计模式,将业务逻辑(Model)、用户界面(View)和控制逻辑(Controller)分开,提高了代码的可读性和可维护性。 3. **框架应用**:考虑到项目的复杂性,...

    【成都】房地产批量精装修设计、采购成本与施工管理研修班(5月10).doc

    该课程旨在帮助参与者掌握批量精装修的关键环节,包括设计、采购成本控制和施工管理,提升企业的效率和利润。 课程背景基于行业经验和品牌企业的实践,强调规范化系统的建立。通过深入分析国内外大量精品案例,课程...

    PHP家居装修门户系统多城市商业版

    这个系统旨在为用户提供一站式的家居装修服务,包括但不限于寻找装修公司、查看装修案例、获取装修报价、预约设计师等。作为一个商业版本,它应该具备稳定、高效和安全的特性,同时提供了丰富的功能模块来满足不同...

    人工智能-深度学习-楼盘住宅精装修施工进度控制系统研究与开发.pdf

    近年来,随着中国经济的飞速增长和人民生活水平的提升,住宅装修行业经历了显著的发展,精装修模式逐渐成为主流。然而,精装修施工进度控制仍面临挑战,如缺乏有效的现场跟踪机制、进度偏差分析不足以及计划调整管理...

    店铺装修用使用的源码哦

    在IT行业中,店铺装修通常指的是在线电子商务平台中商家对其虚拟店面的设计与布局。在这个场景下,"旺铺装修"指的是优化店铺的视觉效果、用户体验以及交互设计,以吸引更多的顾客并促进销售。本压缩包提供的“店铺...

    PHP装修公司源码.7z

    2. MVC(Model-View-Controller)架构:理解如何组织源码以遵循MVC设计模式,便于代码的维护和扩展。 3. 数据库管理:可能涉及到MySQL或其他数据库系统,学习如何设计和操作数据库以存储装修公司相关的信息,如项目...

Global site tag (gtag.js) - Google Analytics