- 浏览: 230565 次
- 性别:
- 来自: beijing
文章分类
装饰着 体现了开闭原则 对扩展开放,
基本类pojo
package com.founder.decorative; /** * @author qincy * 基本类型 抽象类 */ public abstract class Basic { private String description = "Basic "; public String getDescription() { return description; } public Basic() { // TODO Auto-generated constructor stub } public abstract double cost(); }
实现
package com.founder.decorative; /** * @author qincy * 装饰 修饰类 不同 */ public class AchieveTest1 extends BasicDecorative { private Basic ac; /** * 重点在这里通过构造函数 对Basic 对象 进行 装饰 * @param ac */ public AchieveTest1(Basic ac) { this.ac = ac; } @Override public String getDescription() { // TODO Auto-generated method stub return ac.getDescription() + " === AchieveTest1"; } public double cost() { return 1 + ac.cost(); } }
package com.founder.decorative; public class AchieveTest2 extends BasicDecorative { private Basic ac; public AchieveTest2(Basic ac) { this.ac = ac; } @Override public String getDescription() { // TODO Auto-generated method stub return ac.getDescription() + " === AchieveTest2"; } public double cost() { return 2 + ac.cost(); } }
。。。
装饰者类
package com.founder.decorative; /** * @author qincy * 装饰者的抽象类 */ public abstract class BasicDecorative extends Basic { public abstract String getDescription(); }
实现装饰者
package com.founder.decorative; /** * @author qincy * 形成 不同的类 */ public class BasicExtends1 extends Basic { private String descrption; public BasicExtends1() { descrption="BasicExtends1"; System.out.print(descrption); } @Override public double cost() { // TODO Auto-generated method stub return 10; } }
package com.founder.decorative; public class BasicExtends2 extends Basic { private String descrption; public BasicExtends2() { descrption="BasicExtends20"; System.out.print(descrption); } @Override public double cost() { // TODO Auto-generated method stub return 20; } }
mian
package com.founder.decorative; public class main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Basic bd= new BasicExtends1(); System.out.println(bd.getDescription()+" "+bd.cost()); Basic bd2= new BasicExtends2(); bd2 = new AchieveTest1(bd2); bd2 = new AchieveTest2(bd2); bd2 = new AchieveTest3(bd2); bd2 = new AchieveTest4(bd2); System.out.println(bd2.getDescription()+" "+bd2.cost()); Basic bd3= new BasicExtends3(); bd3 = new AchieveTest1(bd3); bd3 = new AchieveTest2(bd3); bd3 = new AchieveTest3(bd3); //bd3 = new AchieveTest4(bd3); System.out.println(bd3.getDescription()+" "+bd3.cost()); } }
results
BasicExtends1Basic 10.0 BasicExtends20Basic === AchieveTest1 === AchieveTest2 === AchieveTest3 === AchieveTest4 30.0 BasicExtends 30Basic === AchieveTest1 === AchieveTest2 === AchieveTest3 36.0
- decorative.rar (3.4 KB)
- 下载次数: 0
发表评论
-
二进制 授权管理 java
2013-09-09 12:52 913package org.qincy.binary; ... -
com.richfit.bi.quartz 定时执行示例
2013-04-12 15:39 01 内含jetty 配置,下载jetty 依赖包,算了,还是提 ... -
利用工具将shp文件导入到oracle spatial中
2012-05-21 14:20 43931 下载shp2sdo 工具,将工具放在 oracle按照目录 ... -
Arcgis object for java 访问栅格数据,使用GP工具,进行栅格矢量化---栅格矢量化面。
2012-06-20 09:17 4158直接贴代码了,不多解释了。 1、栅格数据的 ... -
svn 删除注册表
2012-02-11 12:02 1569svn 删除注册表 -
arcgis server 服务
2012-01-06 17:58 1186package com.hdmap.fymas; imp ... -
Flex BlazeDS java 项目
2011-12-12 17:21 1102根据网上的例子 ,写的 flex BlazeDS 框架与 ... -
工具类
2011-02-18 14:05 979英文数字转换为 中文数字 public class Mon ... -
junit 4 spring 自动化测试
2010-12-13 16:08 16421 添加jar ,依赖jar 包围 spring-test, ... -
在tomcat 发布,去掉项目名称
2010-11-17 09:53 19701 找到 server.xml 配置= ... -
掉字段内容包含的空格
2010-09-27 10:17 982使用replace函数去掉字段内容包含的空格,例子如下: up ... -
无聊的jsti 的fn 函数(资料备份)
2010-09-25 17:16 985无聊的jsti 的fn 函数(资料备份) ... -
无聊写Code
2010-09-25 09:38 1009package edu.qdkj.main; impor ... -
Spring Quartz 学习
2010-09-20 09:27 1175Quartz 是一个 定时执行的框架,可以设定规定时执行,或者 ... -
kaptcha 例子
2010-09-13 15:09 3027kaptcha 简单例子 与 产生中文字符 kaptch ... -
myEclipse 下的项目不能编译
2010-09-09 14:21 952查看 是否有的错误的jar 1.项目----prope ... -
关于VLSM 例子
2010-08-31 16:57 1501未经测试,不知道理解是否正确。 VLSM(可变长子网掩码) ... -
jwebmail的配置
2010-08-16 16:59 2499jwebmail的配置说明 ... -
Solaris10下Nagios安装
2010-08-16 08:48 974发 -
java JDK 下载页面
2010-08-13 16:32 1022全部JDK 下载,从 1.1 到 jdk 6 下载 http ...
相关推荐
01.装饰者设计模式和动态代理设计模式.wmv
1. 装饰者设计模式-是什么 2. 装饰者设计模式-定义 3. 装饰者设计模式-模拟网关权限控制 4. 装饰者设计模式-测试
装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...
### 装饰设计模式详解 #### 一、装饰设计模式概述 装饰设计模式(Decorator Pattern)是一种结构型设计模式,允许向对象动态地添加新功能。这种模式提供了一种替代继承的方式,使得我们可以在不修改原有类的基础上...
装饰者设计模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或属性,而无需修改对象的源代码。这种模式的核心在于装饰者和组件接口是相同的,因此装饰者可以完全替代原对象,同时还能增加额外的功能,...
在“设计模式—装饰者模式”中,我们将深入探讨这个模式的概念、实现方式以及实际应用。 装饰者模式的核心概念在于“装饰”(Decorator)和“组件”(Component)。组件是被装饰的基本对象,它可以是接口或者抽象类...
装饰者模式是面向对象设计模式的一种,主要用于动态地给一个对象添加一些额外的职责,而不会改变该对象的类。这种模式允许我们独立于对象的类来扩展对象的功能,为对象提供新的行为,同时保持了代码的可读性和可维护...
总的来说,装饰者模式是一种强大的设计模式,它提供了一种在运行时动态调整对象行为的方法,使得代码更具灵活性和可扩展性。通过理解和熟练运用装饰者模式,我们可以更好地应对软件需求的变化,提高代码的可维护性和...
设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): 工厂方法模式 、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式(7): 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、...
创建型设计模式关注对象的创建过程,如单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)和建造者模式(Builder)。这些模式提供了一种灵活且可扩展的方式来创建和管理对象。 结构型...
装饰者模式是面向对象设计模式中的一个重要概念,它在C#等编程语言中广泛应用。这个例子以星巴克咖啡为例,展示了如何使用装饰者模式来灵活地扩展对象的功能,而无需修改原有代码。 装饰者模式的核心思想是动态地将...
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
这本书通过丰富的图像、故事和幽默的方式,引导读者了解23种经典的GoF(Gang of Four)设计模式,包括单例模式、工厂模式、观察者模式、装饰器模式、适配器模式、代理模式等。书中强调了如何在实际项目中选择和应用...
设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式...
总之,GOF设计模式和设计模式精解是软件工程师的宝贵参考资料,无论你是初学者还是经验丰富的开发者,都应该熟悉和掌握这些模式,以便在项目中灵活运用,提高代码质量和可维护性。通过深入学习这些设计模式,不仅...
装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象本身。这种模式的核心思想是通过将对象包装在一个装饰类中来扩展功能,而不是通过继承。以下是对装饰者模式的详细阐述: ...
**Qt设计模式之装饰者模式** 装饰者模式(Decorator Pattern)是软件设计模式中的结构型模式之一,它允许在运行时动态地给一个对象添加新的行为或职责,而无需修改对象本身。在Qt库中,装饰者模式也被广泛应用,...
Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...
装饰者模式(Decorator Pattern)是软件工程中一种用于动态地给一个对象添加额外职责的设计模式。它属于结构型模式,可以让我们在不改变对象自身的基础上,在运行时为对象添加新的功能,即“装饰”对象。这使得我们...