decorator java_java_详解java装饰模式(Decorator Pattern),一、装饰器模式(Decorator Patter - phpStudy...
详解java装饰模式(Decorator Pattern)
一、装饰器模式(Decorator Pattern)
允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
我们通过下面的实例来演示装饰器模式的使用。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。
二、实现我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。然后我们创建一个实现了 Shape 接口的抽象装饰类ShapeDecorator,并把 Shape 对象作为它的实例变量。
RedShapeDecorator 是实现了ShapeDecorator 的实体类。
DecoratorPatternDemo,我们的演示类使用 RedShapeDecorator 来装饰 Shape 对象。
步骤 1
创建一个接口。
Shape.java
public interface Shape {
void draw();
}
步骤 2
创建实现接口的实体类。
Rectangle.java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Rectangle");
}
}
Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Circle");
}
}
步骤 3
创建实现了 Shape 接口的抽象装饰类。
ShapeDecorator.java
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
}
public void draw(){
decoratedShape.draw();
}
}
步骤 4创建扩展自 ShapeDecorator 类的实体装饰类。
RedShapeDecorator.java
public class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
private void setRedBorder(Shape decoratedShape){
System.out.println("Border Color: Red");
}
}
步骤 5使用 RedShapeDecorator 来装饰 Shape 对象。
DecoratorPatternDemo.java
public class DecoratorPatternDemo {
public static void main(String[] args) {
Shape circle = new Circle();
Shape redCircle = new RedShapeDecorator(new Circle());
Shape redRectangle = new RedShapeDecorator(new Rectangle());
System.out.println("Circle with normal border");
circle.draw();
System.out.println("\nCircle of red border");
redCircle.draw();
System.out.println("\nRectangle of red border");
redRectangle.draw();
}
}
步骤 6验证输出。
Circle with normal border
Shape: Circle
Circle of red border
Shape: Circle
Border Color: Red
Rectangle of red border
Shape: Rectangle
Border Color: Red
希望本文所述对大家学习java程序设计有所帮助。相关阅读:
jQuery:delegate中select()不起作用的解决方法(实例讲解)
php使用异或实现的加密解密实例
Java判断字符串为空、字符串是否为数字
Android实现使用流媒体播放远程mp3文件的方法
11个实用的Linux终端命令总结
JavaScript实现鼠标点击后层展开效果的方法
深入理解jQuery中live与bind方法的区别
深入解析php之sphinx
MySQL笔记之子查询使用介绍
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
HTML5中的强制下载属性download使用实例解析
html5+javascript制作简易画板附图
Android使用criteria选择合适的地理位置服务实现方法
Win7系统怎么查看电脑有没有无线网卡?Win7系统一体机/台式机无线网卡的两种查看方法
decorator java_java_详解java装饰模式(Decorator Pattern),一、装饰器模式(Decorator Patter - phpStudy...相关推荐
- decorator java_装饰器模式-Decorator(Java实现)
装饰器模式-Decorator(Java实现) 装饰器模式允许向一个现有的对象添加新的功能, 同时又不改变其结构. 其中 "现有对象"在本文中是StringDisplay类. 添加 ...
- c语言装饰,C/C++知识点之装饰器模式(Decorator) C++
本文主要向大家介绍了 C/C++知识点之装饰器模式(Decorator) C++,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助.装饰器模式是比较常用的一种设计模式,Python中就 ...
- 【Java设计模式系列】装饰器模式(Decorator Pattern)
简介 一般有两种方式可以给一个类或对象新增行为: 继承 子类在拥有自身方法同时还拥有父类方法.但这种是静态的,用户无法控制增加行为的方式和时机. 关联 将一个类的对象嵌入另一个对象,由另一个对象决定是 ...
- python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
- python 设计模式之装饰器模式 Decorator Pattern
#写在前面 已经有一个礼拜多没写博客了,因为沉醉在了<妙味>这部小说里,里面讲的是一个厨师苏秒的故事.现实中大部分人不会有她的天分.我喜欢她的性格:总是想着去解决问题,好像从来没有怨天尤人 ...
- 装饰器模式--Decorator
装饰器模式 定义: 装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将一些新的功能动态的添加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模 ...
- MobX详解(二):ES7 装饰器 decorator
在学习ES7装饰器语法之前,需要先温习一下ES5的一些基础知识. 假设有对象如下:(便于理解) var person = {name: 'TOM' } 在ES5中,对象中的每个属性都有一个特性值来描述 ...
- 装饰器模式(Decorator)
一.装饰者模式的定义: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 结构: 装饰器UML.png (1)抽象构件( ...
- 装饰器模式 decorator
所有的说明和解释都在代码中有注释来标明 package mode.decorator;/*** * 这里定义一个接口,在接口中定义我们要执行的操作.* * 以后所有的装饰器以及我们要装饰的对象都要实现 ...
最新文章
- c++创建包含opencv的dll供C,C#调用
- EXCEL中SUMIF函数介绍
- 史上最全29个自我管理工具!
- 【CSS】背景遮罩层各种情况下,CSS样式
- 李大维:互联网人做硬件创业容易产生的七大误解【转载】
- 数控镗铣床行业调研报告 - 市场现状分析与发展前景预测
- Java中的泛型全解析(二)
- 《Joel On Software》读后
- BZOJ2330:[SCOI2011]糖果(差分约束)
- 日记侠:我为什么学习网络营销
- Altium Designer 14安装教程(详细版)
- 金蝶系统无法建立数据可连接服务器,金蝶K3打开,提示无法建立数据链接
- xz1刷Android10,索尼xz1国行版安卓9.0固件
- 热敏电阻、RTD、热电偶的原理和特性
- 军火库(第一期):无线电硬件安全大牛都用哪些利器?
- 信号基础知识--FFT DFT
- mysql 按中文字段排序
- SpringBoot+Vue搭建前后端分离的轻博客
- java文档注释生产api没有注释_如何使用javadoc命令生成api文档,文档注释
- 信息化管理技术-制造执行系统(MES) – MES项目的规划和应用
热门文章
- 姚希燕:男士脱发等级划分
- 20220402java学习笔记 ------枚举与泛化
- matlab三维可视化,三维可视化
- MATLAB Simulink
- MathWorks 中国
- XXL-JOB执行器注册成功但是在管理界面里不显示
- 奇安信2022秋招面经-技术支持岗
- 网站建设SEO运营规划:2021年的第一个网站!
- 跳棋的C语言,跳棋游戏C语言程序设计(数据结构课程设计).doc
- matlab roots 多项式实现 c语言,Matlab教学课apos;件教学教案.doc
- 2020金属非金属矿山(小型露天采石场)安全管理人员考试题库及金属非金属矿山(小型露天采石场)安全管理人员模拟考试题
- 学习周报之第十三周(数据分析)