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

一.装饰器模式职责:

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

二.装饰器模式优点:

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

三.装饰器模式缺点:

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

四.装饰器模式总结:

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

五.代码实现

1.抽象组件

java 复制代码
/**
 * 抽象组件角色
 */
public interface ICar {
	/**
	 * 移动
	 */
	void move();
}

2.具体组件角色

java 复制代码
/**
 * 具体组件角色(真实角色)
 */
public class Car implements ICar{
	@Override
	public void move() {
		System.out.println("陆地跑。。。。");
	}
}

3.装饰器角色

java 复制代码
/**
 * 装饰器角色
 */
public class SuperCar implements ICar{
	public ICar car;
	public SuperCar(ICar car) {
		this.car = car;
	}
	@Override
	public void move() {
		car.move();
	}
}

4.具体装饰器角色

java 复制代码
/**
 * 天上飞。。。。
 */
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.装饰器调用

java 复制代码
/**
 * 装饰器模式
 */
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):桥接模式

设计模式持续更新中...

相关推荐
狄加山6757 分钟前
系统编程(线程互斥)
java·开发语言
星迹日8 分钟前
数据结构:二叉树—面试题(二)
java·数据结构·笔记·二叉树·面试题
组合缺一9 分钟前
solon-flow 你好世界!
java·solon·oneflow
HHhha.19 分钟前
JVM深入学习(二)
java·jvm
叩叮ING41 分钟前
正则表达式中常见的贪婪词
java·服务器·正则表达式
组合缺一1 小时前
Solon Cloud Gateway 开发:熟悉 Completable 响应式接口
java·gateway·reactor·solon
组合缺一1 小时前
Solon Cloud Gateway 开发:Route 的配置与注册方式
java·gateway·reactor·solon
晚秋贰拾伍1 小时前
设计模式的艺术-外观模式
服务器·设计模式·外观模式
栗豆包2 小时前
w179基于Java Web的流浪宠物管理系统的设计与实现
java·开发语言·spring boot·后端·spring·宠物
KuunNNn2 小时前
蓝桥杯试题:整数反转
java·开发语言