23种设计模式_装饰模式
来源:互联网 发布:mysql limit实现 编辑:程序博客网 时间:2024/04/28 01:43
装饰模式(decorator):(对象的组合关系)
职责:动态的为一个对象增强新的功能
实现:类的定义
package com.lichao.Decorator;
//接口
public interface ICar {
public void move();
}
//实现类
class MoveCarimplements ICar{
@Override
public void move() {
System.out.println("车在路上移动");
}
}
//具体的引用---装饰角色
class DefiCarimplements ICar{
protected ICariCar;
public DefiCar(ICar iCar) {
super();
this.iCar = iCar;
}
@Override
public void move() {
iCar.move();
}
}
//新增功能
class FlyCarextends DefiCar{
public FlyCar(ICar iCar) {
super(iCar);
}
public void flyCar(){
System.out.println("天上飞 ");
}
@Override
public void move() {
super.move();
flyCar();
}
}
//新增功能
class PeopleCarextends DefiCar{
public PeopleCar(ICar iCar) {
super(iCar);
}
public void PeopleCar(){
System.out.println("智能人工 ");
}
@Override
public void move() {
super.move();
PeopleCar();
}
}
//新增功能
class WaterCarextends DefiCar{
public WaterCar(ICar iCar) {
super(iCar);
}
public void WaterCar(){
System.out.println("水下游 ");
}
@Override
public void move() {
super.move();
WaterCar();
}
}
DecoratorApp
package com.lichao.Decorator;
public class DecoratorApp {
public static void main(String[] args) {
MoveCar moveCar = new MoveCar();
moveCar.move();
DefiCar defiCar = new DefiCar(moveCar);
System.out.println("------------增加飞的功能---------------");
FlyCar flyCar = new FlyCar(defiCar);
flyCar.move();
System.out.println("------------增加水里泡的功能-----------");
WaterCar water =new WaterCar(moveCar);
water.move();
System.out.println("-----------都要-----------");
PeopleCar people = new PeopleCar(new WaterCar(new FlyCar(defiCar)));
people.move();
}
}
总结:
a) 装饰模式也叫包装器模式(Wrapper)
b) 装饰模式降低系统的愈合度,可以动态的增加或删除对象的职责,并使得需要装饰的具体构建类和具有装饰类可以相互独立,以便增加新的具体构建类和具体装饰类。
- 23种设计模式_装饰模式
- 设计模式_装饰模式
- 设计模式_装饰设计模式
- 30_装饰设计模式
- 23种设计模式(8)_结构型_装饰者模式(Decorator Pattern)
- 大话设计模式_装饰模式
- JavaSE_设计模式_装饰模式
- (GOF23设计模式)_装饰模式
- 设计模式06_装饰者模式
- 设计模式07_装饰模式
- java设计模式_装饰模式
- 设计模式_装饰模式(Decorator Pattern)
- 设计模式_装饰者模式
- 设计模式_装饰者模式
- java设计模式11_装饰模式
- Java 设计模式_装饰器模式
- 设计模式_装饰器模式(10)
- 设计模式_结构型模式_装饰模式
- VB6.0使用winHttp.dll访问webApi
- Java中文件读入输出的三种方法详解
- 今天双十一了,你有什么话想说
- Hillary Clinton's Concession Speech
- 记事本在读取一个文本时如何判断是该用啥字符集来读取解析文本字符
- 23种设计模式_装饰模式
- stack_link
- OpenCV.Man.Note (1)
- scala的协变逆变,上界下界
- 淘宝maven镜像库是个好东西
- 今天发现python windows运行正常,linux下异常
- HDU2001_计算两点间的距离
- 我的前端“先行”之路
- ios 结构体及坐标系统