首页 > 其他分享 >10) Decorator Pattern

10) Decorator Pattern

时间:2023-06-06 13:33:52浏览次数:52  
标签:10 draw Pattern void shap System Shape public Decorator

类别:

 Structural Pattern

问题:

 在不改变接口的前提下增加额外的服务

方案:

 

 

 

示例:

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.draw();
        System.out.println("\n红框圆");
        redCircle.draw();
        System.out.println("\n红框矩形");
        redRectangle.draw();
    }
}

interface Shape {
    void draw();
}

class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Shape: Rectangle");
    }
}

class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Shape: Circle");
    }
}

abstract class ShapeDecorator implements Shape {
    protected Shape shap;

    public ShapeDecorator(Shape shap) {
        this.shap = shap;
    }

    public abstract void draw();
}

class RedShapeDecorator extends ShapeDecorator {
    public RedShapeDecorator(Shape shap) {
        super(shap);
    }

    @Override
    public void draw() {
        shap.draw();
        setRedBorder(shap);
    }

    private void setRedBorder(Shape decoratedShape) {
        System.out.println("Border Color: Red");
    }
}

 

 

 

普通圆
Shape: Circle

红框圆
Shape: Circle
Border Color: Red

红框矩形
Shape: Rectangle
Border Color: Red

 

应用:

 

不足:(

 

优化:)

 

标签:10,draw,Pattern,void,shap,System,Shape,public,Decorator
From: https://www.cnblogs.com/zno2/p/6694833.html

相关文章

  • IKCM10H60GA-ASEMI代理英飞凌功率模块IKCM10H60GA
    编辑:llIKCM10H60GA-ASEMI代理英飞凌功率模块IKCM10H60GA型号:IKCM10H60GA品牌:ASEMI封装:DIP-24正向电流:0.8A反向电压:600V引脚数量:3芯片个数:1芯片尺寸:漏电流:>10ua恢复时间: 浪涌电流:30A包装方式:盘装封装尺寸:如图特性:单向可控硅工作结温:-40℃~125℃......
  • Django修改数据库时出错 django.db.utils.OperationalError: (1091, "Can't DROP 'con
    记录下简单的处理方法:报错信息:django.db.utils.OperationalError:(1091,"Can'tDROP'content';checkthatcolumn/keyexists")可能数据库中的字段结构已经完成了此字段的修改但是在  pythonmanage.pymakemigrations新生成的migrations/0002_auto_20191011_2104.py......
  • LED数显驱动芯片VK1S68C 10*2矩阵按键,支持多键同时按下
    产品品牌:永嘉微电/VINKA产品型号:VK1S68C封装形式:SSOP24产品年份:新年份概述:VK1S68C是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3线串行接口、数据锁存器、LED驱动、键盘扫描等电路。SEG脚接LED阳极,GRID脚接LED阴极,可支持13SEGx4GRID、12SEGx5GRID、11S......
  • FX110网:5月下半月外汇黑平台有哪些?共109家避免踩雷(上)
    在外汇交易中,投资者要学的东西很多,但对于一个新手投资者来说,最先要学的不是如何交易,而是如何防止被骗,第一步就是要学会鉴别平台。我们不知道下一家黑平台是哪一家,但对于FX110网曝光过的虚假平台,一定要远离!5月上半月,FX110网已曝光黑平台85家,而在下半月,新曝光的黑平台数目更大,竟高达......
  • P2973 [USACO10HOL] Driving Out the Piggies G 臭气弹
    题目链接题目:奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡。猪猡的文明包含1到N(2<=N<=300)一共N个猪城。这些城市由M(1<=M<=44,850)条由两个不同端点A_j和B_j(1<=A_j<=N;1<=B_j<=N)表示的双向道路连接。保证城市1至少连接一个其它的城市。一开始臭气弹会被......
  • HONEYWELL工业模块SPS5713 51199930-100
    W;① ⑧ 0 ③ 0 ① 7  7  ⑦ 5 ⑨HONEYWELL工业模块SPS571351199930-100,05074-A-012205704-A-012105704-A-0131,05701-A-0361,05704-A-0146,05704-A-0145,05701-A-0361,05704-A-0144。SC-PCMX0151307195-175,05701-A-0550,一般信息产品编号:SYN5201-2277......
  • SonarQube10安装及使用教程
    一、介绍Sonar是一个用于代码质量管理的开源平台,用于管理代码的质量,通过插件形式可以支持二十几种语言的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误。 SonarQube与Sonar区别:SonarQube是sonar的服务端,相当于一个web服务器中的tomcat,用来发布应用......
  • cpp test write content speed to ssd and usual disk respectively 1M,10M,100M row
    #include<chrono>#include<ctime>#include<fstream>#include<iomanip>#include<iostream>#include<sstream>#include<thread>#include<uuid/uuid.h>std::stringget_time_now(){autonow=std::chro......
  • GYM100212B - I Just Called...
    大模拟。首先的难度在于理解题意:打电话的地点分为镇、地区、超级地区三级。其中,一些地区是被网络连接的。电话号码的前缀由地区号+镇号组成。它们可以是不等长的,但是整个电话号码的长度是\(d\)。一个镇可能有多个镇号,不同地区的镇可以拥有相同的镇号,但地区号是唯一的。同时......
  • 算法学习day43动态规划part05-1049、474、494
    packageLeetCode.DPpart05;/***1049.最后一块石头的重量II*有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。*每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x<=y。那么粉碎的可能结果如下:*如果x=......