设计模式(7):装饰器模式

一.装饰器模式职责:

  • 动态的为一个对象增加新的功能;
  • 装饰器是一种用于代替继承的技术,无须通过继承增加子类就能扩展对象的新功能,使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。

二.装饰器模式优点:

  • 扩展对象功能比较灵活,不会导致类个数急剧增加;
  • 可以对一个对象进行多次装饰,创作出不同行为的组合,得到功能更加强大的对象;
  • 具体构建类和具体装饰类可以独立变化,用户可以根据需要自己增加新的具体构建子类和具体装饰子类。

三.装饰器模式缺点:

  • 产生很多小对象,大量小对象占据内存,一定程度上影响性能;
  • 装饰模式易于出错,调试排查比较麻烦。

四.装饰器模式总结:

  • 装饰器模式也叫包装器模式
  • 装饰器模式降低系统的耦合度,可以动态的增加或删除对象的职责,并使得需要装饰的具体构建类和具体装饰类可以独立变化,以便增加新的具体构建类和具体装饰类。

五.代码实现

  • 1.抽象组件

/**
 * 抽象组件角色
 */
public interface ICar {
	/**
	 * 移动
	 */
	void move();
}
  • 2.具体组件角色

/**
 * 具体组件角色(真实角色)
 */
public class Car implements ICar{
	@Override
	public void move() {
		System.out.println("陆地跑。。。。");
	}
}
  • 3.装饰器角色

/**
 * 装饰器角色
 */
public class SuperCar implements ICar{
	public ICar car;
	public SuperCar(ICar car) {
		this.car = car;
	}
	@Override
	public void move() {
		car.move();
	}
}
  • 4.具体装饰器角色

/**
 * 天上飞。。。。
 */
public class flyCar extends SuperCar{
	public flyCar(ICar car) {
		super(car);
	}
	public void fly(){
		System.out.println("天上飞。。。。");
	}
	@Override
	public void move() {
		super.move();
		fly();
	}
}
/**
 * 水中游。。。。
 */
public class WaterCar extends SuperCar{
	public WaterCar(ICar car){
		super(car);
	}
	public void swim(){
		System.out.println("水中游。。。。");
	}
	@Override
	public void move() {
		super.move();
		swim();
	}
}
/**
 * 自动跑。。。。
 */
public class IDCar extends SuperCar{
	public IDCar(ICar car) {
		super(car);
	}
	public void autoMove(){
		System.out.println("自动跑。。。。");
	}
	@Override
	public void move() {
		super.move();
		autoMove();
	}
}
  • 5.装饰器调用

/**
 * 装饰器模式
 */
public class App {
	public static void main(String[] args) {
		Car car=new Car();
		car.move();
		System.out.println("=======添加新功能:飞。。。。");
		flyCar fly=new flyCar(car);
		fly.move();
		
		System.out.println("=======添加新功能:飞、。。。。游、、、、");
		WaterCar water=new WaterCar(fly);
		water.move();
	}
}



更多设计模式学习:

          设计模式(1):介绍
          设计模式(2):单例模式
          设计模式(3):工厂模式
          设计模式(4):建造者模式
          设计模式(5):原型模式
          设计模式(6):桥接模式
          设计模式持续更新中…

相关推荐

  1. 设计模式(7):装饰模式

    2024-04-02 01:18:01       15 阅读
  2. 装饰设计模式

    2024-04-02 01:18:01       30 阅读
  3. 设计模式装饰模式

    2024-04-02 01:18:01       44 阅读
  4. 设计模式装饰模式

    2024-04-02 01:18:01       15 阅读
  5. 设计模式 —— 装饰模式

    2024-04-02 01:18:01       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 01:18:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 01:18:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 01:18:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 01:18:01       20 阅读

热门阅读

  1. C+八股补充Record

    2024-04-02 01:18:01       15 阅读
  2. JPA不识别MySQL的枚举类型

    2024-04-02 01:18:01       15 阅读
  3. 汇编——SSE对齐(一. 未对齐情况)

    2024-04-02 01:18:01       13 阅读
  4. 【qt】打开图像、保存图像

    2024-04-02 01:18:01       13 阅读
  5. table Diffusion 的Web 用户界面简介

    2024-04-02 01:18:01       15 阅读