转载自:http://blog.csdn.net/xu__cg/article/details/53024490

抽象构件

  1. public interface CarInterface {
  2. void move();
  3. }

具体构建

  1. public class Car implements CarInterface {
  2. public void move() {
  3. System.out.println("路上行驶");
  4. }
  5. }

装饰角色

  1. public class SuperCar implements CarInterface {
  2. protected CarInterface car;
  3.  
  4. public SuperCar(CarInterface car) {
  5. this.car = car;
  6. }
  7.  
  8. public void move() {
  9. car.move();
  10. }
  11. }

具体装饰角色

  1. /**
  2. * 飞行汽车
  3. */
  4. public class FlyCar extends SuperCar {
  5. public FlyCar(CarInterface car) {
  6. super(car);
  7. }
  8.  
  9. public void fly() {
  10. System.out.println("空中行驶汽车");
  11. }
  12.  
  13. @Override
  14. public void move() {
  15. super.move();
  16. fly();
  17. }
  18. }
  19.  
  20. /**
  21. * 水上汽车
  22. */
  23. public class WaterCar extends SuperCar {
  24. public WaterCar(CarInterface car) {
  25. super(car);
  26. }
  27.  
  28. public void swim() {
  29. System.out.println("水上行驶汽车");
  30. }
  31.  
  32. @Override
  33. public void move() {
  34. super.move();
  35. swim();
  36. }
  37. }

客户端

  1. public class Client {
  2. public static void main(String[] args) {
  3. System.out.println("------普通汽车,正常行驶-----");
  4. Car car = new Car();
  5. car.move();
  6.  
  7. System.out.println("------增加新功能,飞行------");
  8. FlyCar flyCar = new FlyCar(car);
  9. flyCar.move();
  10.  
  11. System.out.println("------新增加功能,水上行驶-----");
  12. WaterCar waterCar = new WaterCar(car);
  13. waterCar.move();
  14.  
  15. System.out.println("-----新增加两个功能,飞行与水上行驶-----");
  16. WaterCar waterCar2 = new WaterCar(flyCar);
  17. waterCar2.move();
  18. }
  19. }

Java设计模式——装饰模式的更多相关文章

  1. Java设计模式---装饰模式

    装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户 ...

  2. Java设计模式-装饰模式(Decorator)

    顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator类是一个 ...

  3. Java设计模式—装饰模式

    装饰模式是一种比较常见的模式. 定义为:动态的给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更加灵活. 装饰模式的通用类图如下: 装饰模式的构成: 1) 抽象构件(Component ...

  4. Java设计模式学习记录-装饰模式

    前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度.JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一 ...

  5. Java设计模式(7)装饰模式(Decorator模式)

    Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这 ...

  6. Java设计模式(三) 抽象工厂模式

    原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...

  7. Java设计模式(十二) 策略模式

    原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...

  8. Java设计模式(二) 工厂方法模式

    本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...

  9. Java设计模式(一) 简单工厂模式不简单

    摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...

随机推荐

  1. bzoj usaco 金组水题题解(1)

    UPD:我真不是想骗访问量TAT..一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)....损失了2h(幸好长一点的都单独开了一篇)....吓得赶紧分成两坨....TAT. ...

  2. 教你上传本地代码到github转载

    原创 2015年07月03日 10:47:13 标签: 上传代码github   转载请标明出处: http://blog.csdn.net/hanhailong726188/article/deta ...

  3. VMware workstation 虚拟机中安装乌班图及其兼容性问题

    之前我在虚拟机中安装乌班图,是先安装好虚拟机,然后将预先下载好的乌班图镜像文件导入安装,这样安装起来还是有些繁琐的,中间要设置好多东西.今天领导给我拷了个虚拟机,还有乌班图的安装文件,是这样的. 对于 ...

  4. 番外篇--Moddule Zero安装

    Moddule Zero 安装 1.2.1 从模板创建 使用ABP和module-zero开始一个新项目最简单的方式是使用启动模板.详细了解请参考启动模板文档. 1.2.2 手动安装 如果你有一个预先 ...

  5. 虚拟主机导入MySQL出现Unknown character set: ‘utf8mb4’

    http://www.lmlblog.com/14.html 前几天进行网站搬家,MySQL导入数据的时候,出现以下错误(没有定义的编码集utf8mb4): SQL 查询: ; MySQL 返回:文档 ...

  6. Dos下的小技巧

    1.dos 窗口下怎样复制粘贴 第一种方式:右键标记-->选中-->标题栏右键编辑-->复制 第二种方式:右键-->标记-->选中-->enter 这样就可以复制了 ...

  7. IOS学习:隐藏键盘方法

    1.点击界面的其它空白地方隐藏      由于UIViewController是继承自UIResponder的,所以可以覆写- (void)touchesBegan:(NSSet *)touches ...

  8. 【开发技术】Get请求和Post请求区别

    a.Get请求是通过URL请求来提交表单数据的:Post是通过HTTP中的POST机制将表单中的数据提交到Action所定制的程序,如果有附件需要用Post方式. b.Get适用于传输数据量小于1K数 ...

  9. eclipse中如何同期化

    打开MyEclipse8.0help->Software Updates->find and install(如果没有这个就用help->Software Updates->A ...

  10. pjtool用到的数据库----oracle范畴

    PL/SQL Developer 专门面向Oracle数据库存储程序单元的开发 PL/SQL:过程化SQL语言