首页 / 设计模式 / java设计模式-装饰器模式
java设计模式-装饰器模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java设计模式-装饰器模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2993字,纯文字阅读大概需要5分钟。
内容图文
![java设计模式-装饰器模式](/upload/InfoBanner/zyjiaocheng/603/6400d4975f8244829f05faaf1b90a6a1.jpg)
装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
需要注意的有三点:
1:不改变原类文件;
2:不使用继承;
3:动态扩展
饰器装饰的是一个接口的任何实现类,而这些实现类也包括了装饰器本身,装饰器本身也可以再被装饰。
这个类图只是装饰器模式的完整结构,但其实里面有很多可以变化的地方:
1,Component接口可以是接口也可以是抽象类,甚至是一个普通的父类(这个强烈不推荐,普通的类作为继承体系的超级父类不易于维护)。
2,装饰器的抽象父类Decorator并不是必须的。
java代码,首先是待装饰的接口Component:
package com.decorator;
public interface Component {
void method();
}
具体的接口实现类,也就是原始对象,或者说待装饰对象:
package com.decorator;
public class ConcreteComponent implements Component{
public void method() {
System.out.println("原来的方法");
}
}
下面便是抽象装饰器父类,它主要是为装饰器定义了需要装饰的目标是什么,并对Component进行了基础的装饰:
package com.decorator;
public abstract class Decorator implements Component{
protected Component component;
public Decorator(Component component) {
super();
this.component = component;
}
public void method() {
component.method();
}
}
具体的装饰器A和装饰器B:
package com.decorator;
public class ConcreteDecoratorA extends Decorator{
public ConcreteDecoratorA(Component component) {
super(component);
}
public void methodA(){
System.out.println("被装饰器A扩展的功能");
}
public void method(){
System.out.println("针对该方法加一层A包装");
super.method();
System.out.println("A包装结束");
}
}
package com.decorator;
public class ConcreteDecoratorB extends Decorator{
public ConcreteDecoratorB(Component component) {
super(component);
}
public void methodB(){
System.out.println("被装饰器B扩展的功能");
}
public void method(){
System.out.println("针对该方法加一层B包装");
super.method();
System.out.println("B包装结束");
}
}
测试类:
package com.decorator;
public class Main {
public static void main(String[] args) {
Component component =new ConcreteComponent();//原来的对象
System.out.println("------------------------------");
component.method();//原来的方法
ConcreteDecoratorA concreteDecoratorA = new ConcreteDecoratorA(component);//装饰成A
System.out.println("------------------------------");
concreteDecoratorA.method();//原来的方法
concreteDecoratorA.methodA();//装饰成A以后新增的方法
ConcreteDecoratorB concreteDecoratorB = new ConcreteDecoratorB(component);//装饰成B
System.out.println("------------------------------");
concreteDecoratorB.method();//原来的方法
concreteDecoratorB.methodB();//装饰成B以后新增的方法
concreteDecoratorB = new ConcreteDecoratorB(concreteDecoratorA);//装饰成A以后再装饰成B
System.out.println("------------------------------");
concreteDecoratorB.method();//原来的方法
concreteDecoratorB.methodB();//装饰成B以后新增的方法
}
}
测试类中首先是使用的原始的类的方法,然后分别让A和B装饰完以后再调用,最后我们将两个装饰器一起使用,再调用该接口定义的方法。
分别对待装饰类进行了原方法的装饰和新功能的增加,methodA和methodB就是新增加的功能,当然两者并不一定兼有,但一般至少会有一种,否则也就失去了装饰的意义
内容总结
以上是互联网集市为您收集整理的java设计模式-装饰器模式全部内容,希望文章能够帮你解决java设计模式-装饰器模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。