何为Decorator模式(装饰者模式)?
Decorator 模式是一种运用接口、抽象类等技术来给一个对象动态宽展一些额外的使命的方法。
Decorator模式与一般的实现接口、继承是否一样?不一样又有那些区别?
Decorator模式是利用接口、继承的方式来实现的,但是与一般的实现接口、继承还是有区别的:
- Decorator 模式比一般的实现接口、继承等方法坑具有灵活性;
- Decorator 模式是一中动态的扩大父类的方法;
- Decoraor 模式与一般的实现接口、继承方式相比,没有了一般的方式的编码复杂混乱,而且更不容易引起遗漏一些属性方法之类的;
- Decortor 模式在运行时才装饰,在利用资源上更好。
学个java的人对Decorator模式并不陌生,我们所使用的IO库就是使用了Decorator模式,各种类与方法都是在基类的基础上进行壮装饰,从而是装饰后的类不仅具有基类的方法属性,还可以扩展一下专有的属性方法。
比如说:我们要做一个点餐单系统应用,如果客户能在我们给定的几个套餐中选择,这样的代码还比较容易写。但是现实中何来都的这么规矩的客户与店家?一些客户专门要给你们挑们事,难道点菜不是在预设的集中套餐当中,我们就不让他们点餐成功?都不是店家想要的结果。那么我们就预设客户的各种点餐可能:餐馆有N 道菜。用一般的继承、实现接口编码,估计码工非得把设计者给干掉不可。就算一道菜只一份就得2的N次的可能,就得2的N次方的个类,更何况有的菜顾客可能点不知一份的情况。码农连说梦话都会把设计的那帮家伙的祖宗妻小都问过遍了。而用Decorator模式就大量地减少编码的负担了,N个扩展类就可以轻松完成了。
简单实例
/** * 饼类老大(原型) * @author gaosi * */ public interface Cake { public String decripation(); public double price(); }
public class CrashpingCake implements Cake { @Override public String decripation() { return "原型"; } @Override public double price() { return 4.0; } }
/** * 装饰的抽象类 * @author gaosi * */ public abstract class Decrator implements Cake { private Cake cake; public Decrator(Cake cake) { this.cake = cake; } @Override public String decripation() { return cake.decripation(); } @Override public double price() { return cake.price(); } }
public class BeefDecrator extends Decrator { public BeefDecrator(Cake cake) { super(cake); } @Override public String decripation() { return super.decripation()+"+牛肉"; } @Override public double price() { return super.price()+3; } public void requirements() { System.out.println("牛肉三分熟"); } }
public class EggDecrator extends Decrator { public EggDecrator(Cake cake) { super(cake); } @Override public String decripation() { return super.decripation()+"+鸡蛋"; } @Override public double price() { return super.price()+1.5; } }
public class Test { /** * 初探开发者模式---Decorator 模式(装饰者模式) * @param args */ public static void main(String[] args) { CrashpingCake cc = new CrashpingCake();//被装饰的原型 BeefDecrator bd = new BeefDecrator(cc); EggDecrator ed = new EggDecrator(cc); EggDecrator ed1 = new EggDecrator(bd); EggDecrator ed2 = new EggDecrator(ed); System.out.println("点餐:"+bd.decripation()); System.out.println("共需钱"+bd.price()); System.out.println("点餐:"+ed.decripation()); System.out.println("共需钱"+ed.price()); System.out.println("点餐:"+ed1.decripation()); System.out.println("共需钱"+ed1.price()); System.out.println("点餐:"+ed2.decripation()); System.out.println("共需钱"+ed2.price()); } }
点餐:原型+牛肉 共需钱7.0 点餐:原型+鸡蛋 共需钱5.5 点餐:原型+牛肉+鸡蛋 共需钱8.5 点餐:原型+鸡蛋+鸡蛋 共需钱7.0
相关推荐
而本文研究的核心,正是围绕如何构建和应用大数据分析模型来预测奥运会田径项目的金牌归属。 首先,文章提到了大数据技术在提升预测准确性和可靠性方面的潜力。在2012年,荷兰Infostrada公司(后被Gracenote公司...
普通高中人工智能教学策略初探——基于人脸识别的“人工智能初步”模块教学设计 人工智能是当前最热门的技术之一,对于普通高中学生来说,学习人工智能可以帮助他们更好地适应未来技术的发展。普通高中人工智能教学...
MixNo就像arduino一样具有具有低门槛入门,可玩性多样,可加拓展盾板可,加SD卡(加载人工智能模型)等优点。其中特别要说的是:其具有图形化编程的能力,且可以转换成micro python程序语句,且能够实现人脸识别、...
多因子模型体系初探 多因子模型是风险-收益关系的定量表达,因子是不同类型风险的解释变量。多因子模型是由 APT 理论发展而来,其一般表达式为:̃ = ∑ ∗ ̃ + ̃=1。多因子模型本质是将对只股票的收益-风险预测...
在这一系列报告的首篇中,华泰证券通过对多因子模型的初探,为后续的深入分析奠定了基础。 首先,报告指出主动定量管理的本质是统计套利,其中的“因子”是研究的核心,代表了不同类型的共性风险。与定性管理相比,...
非完美算法初探——任一恒.ppt
多因子模型是一种广泛应用于金融投资领域,特别是股票量化策略中的风险收益分析工具。华泰证券在2016年的报告中探讨了其多因子模型体系的初步构建,旨在通过科学的统计方法寻找并利用有效因子来预测股票收益,降低...
《Photoshop初探——基本操作》教学设计.doc
源初探——以太平溪至双溪河段为例汇编.pdf
CRM云服务知识产权初探——以Salesforce公司为例.介绍CRM的知识产权问题归属
基于时空信息模型的智慧城市数字底座设计初探 智慧城市数字底座是智慧城市建设的基础设施之一,其目的是将城市管理的系统和服务整合、集成,以提升资源运用的效率,优化城市管理和服务,改善市民生活质量。数字底座...
学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...
网络空间言论自由的法律界限初探——美国相关经验之述评.doc
城市管理模式创新初探——北京市信息化城市管理系统建设.pdf
中职跨境电商人才培养模式的初探——以宁波市为例
在这样的背景下,方正证券研究所推出了“星火”多因子系列报告的第一部分——《Barra模型初探,A股市场风格解析》,旨在通过构建多因子风险-收益归因模型来深入分析A股市场的风格变化,并为投资者提供有效的风险管理...
title: java8 初探——interface defaultdate: 2015-12-08 00:00:02 #发表日期,一般不改动categorie
新医疗建筑绿色设计方法初探——香港大学深圳医院设计再思考.pdf
线上线下混合式教学路径初探——以Linux操作系统课程为例.pdf
基于微信小程序的高中生物教学应用初探——以免疫调节为例