1.什么是装饰者模式?
装饰者模式又称包装模式,是指不改变原有对象的基础上,将功能附加到对象上,提供了比继承更有弹性的替代方案.属于结构型设计模式
2.个人理解的装饰者
装饰者模式 在不改变原有对象情况下对对象进行扩展
3.例子
举个例子,买了一台新的手机,我们会给手机套生手机壳防摔 贴上手机膜 贴上一些好看的label ,戴上扇热风扇等,手机作为被装饰者,手机壳 手机膜 标签 这些就是装饰者 我们为了让手机防摔好看,并没有去把手机后盖给换掉,改变手机这个对象。
4.代码示例
/**
* @Description 手机壳 保护膜 标签 散热风扇属于装饰者
* @Version 1.0.0
* @Date 2022/9/25 16:53
* @Author NiKaBoy
* @Email 123456789@qq.com
*/
public interface Component {
/**
* @Description: 装饰接口
* @Data:[]
* @return: void
* @Author: NiKaBoy
* @Email: 123456789@qq.com
* @Date: 22-09-268 16:56:16
*/
void decorate();
}
/**
* @Description 装饰者类
* @Version 1.0.0
* @Date 2022/9/25 16:58
* @Author NiKaBoy
* @Email 123456789@qq.com
*/
public class Decorator implements Component{
private Component component;
@Override
public void decorate() {
if(component != null){
component.decorate();
}
}
/**
* @Description: 提供一个将装饰者传参的方法
* @Data:[component]
* @return: void
* @Author: NiKaBoy
* @Email: 123456789@qq.com
* @Date: 22-09-268 17:00:35
*/
public void setComponent(Component component) {
this.component = component;
}
}
/**
* @Description 被装饰者手机类
* @Version 1.0.0
* @Date 2022/9/25 16:51
* @Author NiKaBoy
* @Email 123456789@qq.com
*/
public class Phone implements Component{
@Override
public void decorate() {
System.out.print(" 凤梨牌子手机");
}
}
/**
* @Description 手机膜
* @Version 1.0.0
* @Date 2022/9/25 17:04
* @Author NiKaBoy
* @Email 123456789@qq.com
*/
public class PhoneFilm extends Decorator{
@Override
public void decorate() {
System.out.print("防蓝光,防X光,防激光超薄手机膜 ");
super.decorate();
}
@Override
public void setComponent(Component component) {
super.setComponent(component);
}
}
/**
* @Description 手机壳
* @Version 1.0.0
* @Date 2022/9/25 17:02
* @Author NiKaBoy
* @Email 123456789@qq.com
*/
public class PhoneShell extends Decorator{
@Override
public void decorate() {
System.out.print("超级无敌钛合金防摔手机壳 ");
super.decorate();
}
@Override
public void setComponent(Component component) {
super.setComponent(component);
}
}
public class DecoratorPhone {
public static void main(String[] args) {
Phone phone = new Phone();
PhoneFilm phoneFilm = new PhoneFilm();
PhoneShell phoneShell = new PhoneShell();
phoneFilm.setComponent(phone);
phoneShell.setComponent(phoneFilm);
phoneShell.decorate();/* 超级无敌钛合金防摔手机壳 防蓝光,防X光,防激光超薄手机膜 凤梨牌子手机 */
}
}
5.相关链接
什么是装饰者模式?_我们一直在路上的博客-CSDN博客_什么是装饰者模式