首页 > Java > java教程 > 正文

Java结构型设计模式之装饰模式怎么实现

WBOY
发布: 2023-04-17 21:25:01
转载
1303人浏览过

介绍

意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更灵活。

主要解决:我们扩展一个类常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会越来越膨胀。

如何使用:在不想增加很多子类的情况下扩展。

如何解决:将具体功能职责划分,同时继承装饰者模式。

关键代码:

立即学习Java免费学习笔记(深入)”;

1. Component 类充当抽象角色,不应该具体实现。

2. 修饰类引用合继承 Component 类,具体扩展类重写父类方法。

使用场景:

1. 扩展一个类的功能。

2. 动态增加功能,动态撤销。

Linfo.ai
Linfo.ai

Linfo AI 是一款AI驱动的 Chrome 扩展程序,可以将网页文章、行业报告、YouTube 视频和 PDF 文档转换为结构化摘要。

Linfo.ai 104
查看详情 Linfo.ai

实现

创建一个 Shape 接口合实现了 Shape 接口的实体类。然后再创建一个实现了 Shape 接口的抽象装饰类 ShapeDecorator,并把 Shape 对象作为它的实例变量。RedShapeDecorator 是实现了 ShapeDecorator 的实体类。DecoratorPatternDemo 类使用 RedShapeDecorator 来装饰 Shape 对象。

Java结构型设计模式之装饰模式怎么实现

步骤1:

public interface Shape{
    void draw();
}
登录后复制

步骤2:

public class Rectangle implements Shape{
    @Override
    public ovid draw(){
        System.out.println("draw Rectangle");
    }
}
登录后复制
public class Cricle implements Shape{
    @Override
    public ovid draw(){
        System.out.println("draw Circle");
    }
}
登录后复制

步骤3:

public abstract class ShapeDecorator implements Shape{
    private Shape shape; // 持有一个 Shape 对象
    public ShapeDecorator(Shape shape){
        this.shape = shape;
    }
    public void draw(){
        shape.draw();// TODO 根据传进来的具体 Shape 对象,调用对应的 draw 方法
    }
}
登录后复制

步骤4:

public class RedShapeDecorator extends ShapeDecorator{
    public RedShapeDecorator(Shape shape){
        super(shape);
    }
    @Override
    public void draw(){
        shape.draw();
        setRedBorder(shape);
    }
    public void setRedBorder(Shape shape){
        System.out.println("Border Color: Red");
    }
}
登录后复制

步骤5

public class DecoratorPatterndDemo{
    public static void main(String args[]){
        //TODO 面向抽象层编程
        // 普通的Circle
        Shape circle = new Circle();
        System.out.println("Circle with normal Border");        
        circle.darw();
        // 红色边界的 Circle
        ShapeDecorator redCircle = new RedShapeDecorator(new Circle); 
        System.out.println("Circle of red Border");
        redCircle.draw();
        // 红色边界的 Rectangle
        ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangel):
        System.out.println("Rectangle of red Border");
        redRectangle.draw();
    }
}
登录后复制

优缺点

优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。

缺点:多层装饰比较复杂。

以上就是Java结构型设计模式之装饰模式怎么实现的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:亿速云网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号