Java设计模式——装饰模式
转载自:http://blog.csdn.net/xu__cg/article/details/53024490
抽象构件
public interface CarInterface {
    void move();
}
具体构建
public class Car implements CarInterface {
    public void move() {
        System.out.println("路上行驶");
    }
}
装饰角色
public class SuperCar implements CarInterface {
    protected CarInterface car;
    public SuperCar(CarInterface car) {
        this.car = car;
    }
    public void move() {
        car.move();
    }
}
具体装饰角色
/**
* 飞行汽车
*/
public class FlyCar extends SuperCar {
public FlyCar(CarInterface car) {
super(car);
} public void fly() {
System.out.println("空中行驶汽车");
} @Override
public void move() {
super.move();
fly();
}
} /**
* 水上汽车
*/
public class WaterCar extends SuperCar {
public WaterCar(CarInterface car) {
super(car);
} public void swim() {
System.out.println("水上行驶汽车");
} @Override
public void move() {
super.move();
swim();
}
}
客户端
public class Client {
    public static void main(String[] args) {
        System.out.println("------普通汽车,正常行驶-----");
        Car car = new Car();
        car.move();
        System.out.println("------增加新功能,飞行------");
        FlyCar flyCar = new FlyCar(car);
        flyCar.move();
        System.out.println("------新增加功能,水上行驶-----");
        WaterCar waterCar = new WaterCar(car);
        waterCar.move();
        System.out.println("-----新增加两个功能,飞行与水上行驶-----");
        WaterCar waterCar2 = new WaterCar(flyCar);
        waterCar2.move();
    }
}
Java设计模式——装饰模式的更多相关文章
- Java设计模式---装饰模式
		
装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户 ...
 - Java设计模式-装饰模式(Decorator)
		
顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator类是一个 ...
 - Java设计模式—装饰模式
		
装饰模式是一种比较常见的模式. 定义为:动态的给一个对象添加一些额外的职责.就增加功能来说,装饰模式比生成子类更加灵活. 装饰模式的通用类图如下: 装饰模式的构成: 1) 抽象构件(Component ...
 - Java设计模式学习记录-装饰模式
		
前言 装饰模式也是一种结构型模式,主要是目的是相对于类与类之间的继承关系来说,使用装饰模式可以降低耦合度.JDK中有不少地方都使用到了装饰模式,例如Java的各种I/O流,javax.swing包中一 ...
 - Java设计模式(7)装饰模式(Decorator模式)
		
Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这 ...
 - Java设计模式(三) 抽象工厂模式
		
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
 - Java设计模式(十二) 策略模式
		
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...
 - Java设计模式(二) 工厂方法模式
		
本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...
 - Java设计模式(一) 简单工厂模式不简单
		
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...
 
随机推荐
- BZOJ3109: [cqoi2013]新数独
			
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3109 搜索一遍.读入注意一下.. #include<cstring> #inclu ...
 - 94、存储库之MongoDB、mysql
			
本篇导航: 简介 MongoDB基础知识 安装 基本数据类型 CRUD操作 其它 存储库之mysql 一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库1.易用性 MongoDB是 ...
 - Oracle_复杂查询综合
			
Oracle_复杂查询综合 -- 1.列出所有员工的年工资,按年薪从低到高排序. select,) income from emp order by income; -- 2.列出薪金比" ...
 - 算法-java代码实现计数排序
			
计数排序 第10节 计数排序练习题 对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3], ...
 - 使用phpMyAdmin批量修改Mysql数据表前缀的方法
			
多个网站共用一个Mysql数据库时,为使数据库管理不混乱,一般采用不同的网站使用不同前缀名的方式进行区分.而如何批量修改已有数据库的前缀名呢?全部导出修改后再导入?还是一个表一个表的修改?今天我要介绍 ...
 - 邓_tp_笔记
			
<?phpnamespace app\teacher\controller;use think\Db;use app\common\model\Classcourse;use app\commo ...
 - hibernate.dialect是干嘛用的?
			
dialect[ˈdaɪəlekt]就是“方言”,因为hibernate是要把Java对象转换成关系数据库来描述的,而关系数据库虽然有一些统一的标准,如SQL-92等,但是实际上各数据库如Oracle ...
 - PostgresSQL中的限制和级联删除
			
摘录自:http://www.mamicode.com/info-detail-879792.html 删除和更新时对应的操作是一样的
 - vs Code 运行一个本地WEB服务器
			
VS Code作为前端开发工具,值得推荐,用上之后,爱不释手 当我们建立一个全静态的前端项目时,如果需要将整个项目运行起来也非常简单,两步即可: 1.安装npm install -g live-ser ...
 - form表单中enctype属性作用
			
上传文件时,提交的表单属性里需要加enctype="multipart/form-data",才能提交文件信息,不然会报错.那么enctype属性的作用是什么?就是设置表单传输的编 ...