这篇文章主要介绍“Java结构型设计模式之装饰模式怎么实现”,在日常操作中,相信很多人在Java结构型设计模式之装饰模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java结构型设计模式之装饰模式怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更灵活。
主要解决:我们扩展一个类常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会越来越膨胀。
如何使用:在不想增加很多子类的情况下扩展。
如何解决:将具体功能职责划分,同时继承装饰者模式。
关键代码:
1. Component 类充当抽象角色,不应该具体实现。
2. 修饰类引用合继承 Component 类,具体扩展类重写父类方法。
使用场景:
1. 扩展一个类的功能。
2. 动态增加功能,动态撤销。
创建一个 Shape 接口合实现了 Shape 接口的实体类。然后再创建一个实现了 Shape 接口的抽象装饰类 ShapeDecorator,并把 Shape 对象作为它的实例变量。RedShapeDecorator 是实现了 ShapeDecorator 的实体类。DecoratorPatternDemo 类使用 RedShapeDecorator 来装饰 Shape 对象。
步骤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结构型设计模式之装饰模式怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://blog.csdn.net/qq_44950283/article/details/129829659