博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之装饰者模式
阅读量:5094 次
发布时间:2019-06-13

本文共 2178 字,大约阅读时间需要 7 分钟。

装饰(Decorator)模式又叫做包装模式。通过一种对客户短透明的方式扩展对象的功能,是继承关系的一个替换方案。

抽象组件角色:一个抽象接口,是被装饰类和装饰类的父接口。

具体组件角色:为抽象组件的实现类。

抽象装饰角色:包含一个组件的应用,并定义了与抽象组件一致的接口。

具体装饰角色:为抽象装饰角色的实现类。负责具体的装饰。

例子:

抽象组件角色Car:

1 package com.Design.Decorator1;2 3 public interface Car {4     5     public void show();6     7     public void run();8     9 }
View Code

具体组件角色RunCar(实现基本的功能):

1 package com.Design.Decorator1; 2  3 public class RunCar implements Car { 4  5     @Override 6     public void show() { 7         this.run(); 8     } 9 10     @Override11     public void run() {12         System.out.println("可以跑");13     }14 15 }
View Code

抽象装饰角色CarDecorator:

1 package com.Design.Decorator1; 2  3 public abstract class CarDecorator implements Car{ 4      5     private Car car; 6      7     public CarDecorator(Car car){ 8         this.car = car; 9     }10     11     public abstract void show();12 13     public Car getCar() {14         return car;15     }16 17     public void setCar(Car car) {18         this.car = car;19     }20     21     22     23 }
View Code

具体装饰角色FlyCarDecorator:

1 package com.Design.Decorator1; 2  3 public class FlyCarDecorator extends CarDecorator{ 4  5     public FlyCarDecorator(Car car) { 6         super(car); 7     } 8  9     @Override10     public void show() {11         this.getCar().show();12         this.fly();13     }14     15     public void fly(){16         System.out.println("可以飞");17     }18 19     @Override20     public void run() {21         22     }23     24 }
View Code

具体装饰角色SwimCarDecorator:

1 package com.Design.Decorator1; 2  3 public class SwimCarDecorator extends CarDecorator { 4  5     public SwimCarDecorator(Car car) { 6         super(car); 7     } 8  9     @Override10     public void show() {11         this.getCar().show();12         this.swim();13     }14     15     public void swim(){16         System.out.println("可以游");17     }18 19     @Override20     public void run() {21         22     }23 24 }
View Code

总结:首线抽象组件角色定义基本功能,然后用一个实现一个基本的组件角色。这个基本的组件角色拥有基本功能。当基本的组件角色的功能不能满足时,那么就在基本功能组件角色的基础上进行增加功能,也就是装饰了;于是,需要一个装饰类,这个装饰类需要持有这个基本组件角色,然后对其装饰,具体实现又可以用具体的装饰角色来实现。

java I/O流中就用到装饰者模式(研究之后,在续写)。

 

转载于:https://www.cnblogs.com/huaxueyihao/p/8646426.html

你可能感兴趣的文章
C++:指针
查看>>
C++字符串使用sizeof时注意
查看>>
【转载】WebService到底是什么?
查看>>
windows下安装nodejs
查看>>
[LeetCode] Trapping Rain Water II 题解
查看>>
对排名前3000位博主进行数据分析
查看>>
Python设计模式之单例模式
查看>>
eclipse中server location为灰色,不能修改
查看>>
shift and算法
查看>>
MongoDB数据库导出导入迁移
查看>>
观察者模式
查看>>
201521123097《Java程序设计》第五周学习总结
查看>>
云瓣影音网站&&微信端(已开源)
查看>>
C++入门篇十二
查看>>
冲刺周期二--站立会议03
查看>>
UITableViewCell高度自适应变化
查看>>
python 类变量与实例变量,可变对象与不可变对象的实践
查看>>
下载devc++和codeblocks记录
查看>>
C++ 修改 Windows Service【转】
查看>>
串口接线
查看>>