java 设计模式 之 装饰器模式
- 装饰器模式的作用
 
在不修改原先对象核心的功能的情况下,对功能进行增强。
- 增强对象的功能的途径
 
- 通过类继承的方式,对父对象进行增强操作,例如造车是父类,改装跑车,跑车加大灯,改装房车,房车加私人电影院。如图: 通过这种方式做的装饰类会因为业务的复杂性激增
 
    
2.通过装饰模式,将方法增强。如图

- 装饰模式架构
 
car :被装饰的抽象类
package javadesign.decorate; /**
* 抽象小汽车
*/
public interface Car { public void buildCar(); }
benCar:被装饰的实现
package javadesign.decorate;
public class BenCar implements Car {
    @Override
    public void buildCar() {
        System.out.println("建造一辆车");
    }
}
Decorator:装饰的类
package javadesign.decorate;
public class Decorator implements Car {
    public Car car;
    public Decorator(Car car){
        this.car=car;
    }
    @Override
    public void buildCar() {
        this.car.buildCar();
    }
}
StrongDecorator:装饰的实现
package javadesign.decorate;
public class Decorator implements Car {
    public Car car;
    public Decorator(Car car){
        this.car=car;
    }
    @Override
    public void buildCar() {
        this.car.buildCar();
    }
}
Client:测试类
package javadesign.decorate;
public class Client {
    public static void main(String[] args) {
        Car car=new BenCar();
        Decorator decorator=new StrongDecorator(car);
        ((StrongDecorator) decorator).buildSportsCar();
        ((StrongDecorator) decorator).buildHouseCar();
    }
}
测试结果:
总结:装饰模式在不改变原先核心功能的情况下,可以实现增强,并且不会产生很多继承类,按照业务模块划分,通过不同的方法进行装饰。
java 设计模式 之 装饰器模式的更多相关文章
- Java设计模式系列-装饰器模式
		
原创文章,转载请标注出处:<Java设计模式系列-装饰器模式> 一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是 ...
 - java设计模式之七装饰器模式(Decorator)
		
顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: Source类是被装饰类,Decorator类是一个 ...
 - java设计模式之   装饰器模式
		
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构. 这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装 ...
 - Java设计模式之装饰器模式
		
1.装饰器模式的定义(保持接口,扩展功能) Decorate装饰器,顾名思义,就是动态的给一个对象添加一些额外的职责,就好比对房子进行装修一样. 2.装饰器模式的特征 具有一个装饰对象. 必须拥有与被 ...
 - java设计模式之装饰器模式以及在java中作用
		
在JAVA I/O类库里有很多不同的功能组合情况,这些不同的功能组合都是使用装饰器模式实现的,下面以FilterInputStream为例介绍装饰器模式的使用 FilterInputStream和F ...
 - Java 设计模式泛谈&装饰者模式和单例模式
		
设计模式(Design Pattern) 1.是一套被反复使用.多人知晓的,经过分类编目 的 代码设计经验总结.使用设计模式是为了可重用代码,让代码更容易维护以及扩展. 2.简单的讲:所谓模式就是得到 ...
 - Java设计模式 - - 单例模式 装饰者模式
		
Java设计模式 单例模式 装饰者模式 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 静态代理模式:https://www.cnblogs.com/StanleyBlogs/p/1 ...
 - python  设计模式之装饰器模式 Decorator Pattern
		
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
 - PHP设计模式之装饰器模式(Decorator)
		
PHP设计模式之装饰器模式(Decorator) 装饰器模式 装饰器模式允许我们给一个类添加新的功能,而不改变其原有的结构.这种类型的类属于结构类,它是作为现有的类的一个包装 装饰器模式的应用场景 当 ...
 
随机推荐
- 微信小程序 上传图片并等比列压缩到指定大小
			
微信小程序官方API中 wx.chooseImage() 是可以进行图片压缩的,可惜的是不能压缩到指定大小. 实际开发中需求可能是压缩到指定大小: 原生js可以使用canvas来压缩,但由于微信小程 ...
 - JS与JQuery的一些对比
			
主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
 - 谁还不知道Java String的那点事
			
String是我们平时接触最多的一种数据类型之一,不同语言有自己内部的实现,今日一起看下Java中String的内部实现. 常问问题 面试中常被提及的String问题 String为什么是Final的 ...
 - apidoc 工具的使用
			
使用rest framerok时,需要写API接口文档,此时就需要用到 apidoc(个人觉得这个用的比较顺手) 需要安装nodejs,,, windows 下 1 然后验证是否安装成功 node ...
 - 更优雅地关闭资源 - try-with-resource及其异常抑制--转载
			
原文地址:https://www.cnblogs.com/itZhy/p/7636615.html 一.背景 我们知道,在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必 ...
 - 14_sqoop数据导入
			
3.Sqoop的数据导入 “导入工具”导入单个表从RDBMS到HDFS.表中的每一行被视为HDFS的记录.所有记录都存储为文本文件的文 本数据(或者Avro.sequence文件等二进制数据) 3.1 ...
 - vs2010 glfw  glew glad glm 配置
			
OpenGL: Configuring GLFW and GLEW in Visual C++ Express Posted by Dimitri | Aug 14th, 2013 | Filed u ...
 - js中对new Date() 中转换字符串方法toLocaleString的使用
			
提供特定于区域设置的日期和时间格式. dateTimeFormatObj = new Intl.DateTimeFormat([locales][, options]) dateTimeFormatO ...
 - 各位大佬Python的第一部分道基础题已经整理好了,希望大家面试的时候能用的上。
			
Python的第一部分道基础题,希望大家面试的时候能用的上. 1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之一. 2.通过什么途 ...
 - 使用Tampermonkey,实现Gitlab禁用自我Merge的功能
			
Tampermonkey 简单入门资料:https://blog.csdn.net/gg_18826075157/article/details/78011162 Tampermonkey下载地址:T ...