首页 > 其他分享 >9 设计模式-装饰者模式(decorator)

9 设计模式-装饰者模式(decorator)

时间:2022-10-31 20:36:22浏览次数:46  
标签:car void move ICar public 设计模式 装饰 decorator

装饰者模式(decorator)

装饰者模式又称为包装模式(Wrapper),作用是用来动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术,无须通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀

1.实现细节

角色 说明
Component 抽象组件角色: 真实对象和装饰对象有相同的接口,这样客户端对象就能够以与真实对象相同的方式同装饰对象交互
ConcreteComponent 具体组件角色(真实对象): IO流中的FileInputStream,FileOutputStream
Decorator 装饰角色: 持有一个抽象组件的引用,装饰对象接受所有客户端的请求,并把这些请求转发给真实的对象,这样就能在真实对象调用前后增加新的功能
ConcreteDecorator 具体装饰角色: 负责给组件对象增加新的责任

2.演示

以汽车为案例

/**
 * 抽象构建
 * @author Tino
 *
 */
public interface ICar {
	void move();
}

//ConcreteComponent 具体构件角色(真实对象)
class Car implements ICar {
	@Override
	public void move() {
		System.out.println("陆地上跑!");
	}
}

//Decorator装饰角色
class SuperCar implements ICar {
	protected ICar car;
	public SuperCar(ICar car) {
		super();
		this.car = car;
	}

	@Override
	public void move() {
		car.move();
	}
}

//ConcreteDecorator具体装饰角色
class FlyCar extends SuperCar {

	public FlyCar(ICar car) {
		super(car);
	}
	
	public void fly(){
		System.out.println("天上飞!");
	}

	@Override
	public void move() {
		super.move();
		fly();
	}
	
}

//ConcreteDecorator具体装饰角色
class WaterCar extends SuperCar {
	
	public WaterCar(ICar car) {
		super(car);
	}
	
	public void swim(){
		System.out.println("水上游!");
	}
	
	@Override
	public void move() {
		super.move();
		swim();
	}
	
}

//ConcreteDecorator具体装饰角色
class AICar extends SuperCar {
	
	public AICar(ICar car) {
		super(car);
	}
	
	public void autoMove(){
		System.out.println("自动跑!");
	}
	
	@Override
	public void move() {
		super.move();
		autoMove();
	}
}

标签:car,void,move,ICar,public,设计模式,装饰,decorator
From: https://www.cnblogs.com/ytmm/p/16831248.html

相关文章

  • 设计模式-策略模式在Java中的使用示例
    场景策略模式(StrategyPattern)是指定义了算法家族并分别封装起来,让它们之间可以互相替换,此模式使得算法的变化不会影响使用算法的用户。策略模式的应用场景1、系统......
  • 设计模式十(备忘录模式,观察者模式,状态模式)
    备忘录模式(MementoPattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。介绍意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该......
  • 使用上下文装饰器调试Pytorch的内存泄漏问题
    装饰器是python上下文管理器的特定实现。本片文章将通过一个pytorchGPU调试的示例来说明如何使用它们。虽然它可能不适用于所有情况,但我它们却是非常有用。调试内存......
  • 设计模式之外观模式
    概述根据单一职责原则,在软件中将一个系统划分为若干个子系统(Subsystem)有利于降低整个系统的复杂性,一个常见的设计目标是使客户类与子系统之间的通信和相互依赖关系达到......
  • 适配器设计模式学习
    转自:https://www.runoob.com/design-pattern/adapter-pattern.html1.介绍将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工......
  • 工厂设计模式学习
    转自:https://www.zhihu.com/question/24843188/answer/26905773091.介绍工厂模式的核心思想就是把创建对象和使用对象解藕,由工厂负责对象的创建,而用户只能通过接口来使用......
  • 1.常见的23种设计模式
    常用的23中设计模式分为3类:一、创建型模型(5种)用于解决对象创建的过程1.单例模式2.工厂方法模式3.抽象工厂模式4.建造者模式5.原型模式二、结构性模式(7种)把类或对象通过某......
  • java spring项目中使用设计模式和函数式编程的思想去除业务逻辑中的if else判断
    如果你开发项目时对项目之后的发展很清晰但仍陷入了为什么要用设计模式替换ifelse的疑问时就说明你项目的体量不需要用设计模式答案只在问题提出之后有意义策略和状......
  • 【设计模式】-python-创建型
    单例模式只允许一个类只有一个实例。先了解一下下python的init()方法和new()方法init不是实例化一个类第一个调用的方法,第一个调用的方法是new方法,new方法返回一个......
  • 设计模式之禅01单一职责原则
    单一职责原则1.1我是“牛”类,我可以担任多职吗单一职责原则,英文名称是SingleResponsibilityPrinciple,简称是SRP,定义是应该有且仅有一个原因引起类的变更。什么是类的......