栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式:10-装饰器模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式:10-装饰器模式

一。适用场景:在一个现有类增加新的功能的场景,基本的思路是用类的聚合代替继承。该模式和桥接模式比较相似。
二。比如,有一个形状(Shape)接口(interface),定义如下:

package cn.edu.tju.app;

public interface Shape {
    void drawIt();
}

其有两个实现类:Rectangle和Circle,

package cn.edu.tju.app;

public class Rectangle implements Shape {
    @Override
    public void drawIt() {
        System.out.println("画长方形");
    }
}

package cn.edu.tju.app;

public class Circle implements Shape {
    @Override
    public void drawIt() {
        System.out.println("画原型");
    }
}

现在,要给形状类增加装饰:画笔颜色,定义一个抽象的装饰器类:

package cn.edu.tju.app;

public class AbstractShapeDecorator implements  Shape{
    Shape shape;

    public Shape getShape() {
        return shape;
    }

    public void setShape(Shape shape) {
        this.shape = shape;
    }


    @Override
    public void drawIt() {
        shape.drawIt();
    }
}

然后,分别定义两个类实现上述的抽象装饰器类,

package cn.edu.tju.app;

public class RedPenShapeDecorator extends AbstractShapeDecorator {
    public RedPenShapeDecorator(Shape shape){
        super.setShape(shape);
    }
    @Override
    public void drawIt(){
        super.drawIt();
        System.out.println("画笔的颜色是红色的");
    }
}


package cn.edu.tju.app;

public class BlackPenShapeDecorator extends AbstractShapeDecorator {
    public BlackPenShapeDecorator(Shape shape){
        super.setShape(shape);
    }
    @Override
    public void drawIt(){
        super.drawIt();
        System.out.println("画笔的颜色是黑色的");
    }
}


最后,在主类中分别调用RedPenShapeDecorator类对象以及BlackPenShapeDecorator类对象的drawIt()方法。

package cn.edu.tju.app;

public class DecoratorTest {
    public static void main(String[] args) {
        AbstractShapeDecorator abstractShapeDecorator1=new BlackPenShapeDecorator(new Rectangle());
        AbstractShapeDecorator abstractShapeDecorator2=new RedPenShapeDecorator(new Circle());
        abstractShapeDecorator1.drawIt();
        abstractShapeDecorator2.drawIt();
    }
}

运行结果如下:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684618.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号