设计模式之——装饰者模式
时间:2019-10-07
本文章向大家介绍设计模式之——装饰者模式,主要包括设计模式之——装饰者模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
装饰者模式
一、什么是装饰者?
装饰者模式允许向现有的对象添加新的功能,同时不改变其结构。
属于结构型模式。
创建了一个装饰类,用来包装原有的类,并在保持方法签名完整性的前提下,提供了额外的功能。
二、装饰者的介绍
1. 意图:
动态地给一个对象添加一些额外的职责。
2. 主要解决:
一般情况下,我们想扩展一个类经常使用继承的方式实现,由于继承为类引入了静态特征,并且随着扩展功能的增多,子类会膨胀。
3. 何时使用:
在不想增加很多子类的情况下扩展类
4. 使用场景:
(1) 扩展一个类的功能;(2) 动态增加功能,动态撤销。
三、code display
现在画图形,可以画两种图形:1. 圆形; 2. 正方形
//接口类
public interface Shape {
void draw();
}
//圆形
public class Circle implements Shape{
@Override
public void draw() {
System.out.println("Shape: Circle");
}
}
//正方形
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Rectangle " );
}
}
现要求,画出来的图形要能够边框要能够有颜色
首先创建一个装饰者类:
//装饰者类
public abstract class ShapeDecorator implements Shape {
public Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
}
//装饰者类调用接口方法
public void draw(){
decoratedShape.draw();
}
}
//红色装饰者子类
public class RedShapeDecorator extends ShapeDecorator{
/**
* @param decoratedShape
*/
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
@Override
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
public void setRedBorder(Shape decoratedShape){
System.out.println(" Border Color: Red ");
}
}
原文地址:https://www.cnblogs.com/lfdingye/p/11630479.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法