博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 装饰者类
阅读量:4697 次
发布时间:2019-06-09

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

装饰者模式:增强一个类的功能还可以让装饰者类之间互相装饰。

装饰者模式和继承的区别:

继承实现的增强类:

  优点:代码结构清晰,而且实现简单
  缺点:对于每一个的需要增强的类都要创建具体的子类来帮助其增强,这样会导致继承体系过于庞大。

装饰模式实现的增强类:
  优点:内部可以通过多态技术对多个需要增强的类进行增强
  缺点:需要内部通过多态技术维护需要增强的类的实例。进而使得代码稍微复杂。

 

下面来个例子来实现装饰者模式的效果

1 //1.创建一个需要继承的父类(或者需要扩展功能的类) 2 class Person { 3     public void study() { 4         System.out.println("学习"); 5     } 6 } 7  8 //2.装饰者类(子类) 9 class Student1 extends Person{10     //2.1子类中维护一个父类(被装饰者类)11     Person student;12     //2.2构造方法,里面传一个被装饰者类的对象13     public Student1(Person student) {14         this.student = student;15     }16     17     //2.3复写被装饰者类的 需要扩展的方法18     @Override19     public void study() {20         student.study();21         //2.4对方法进行扩展,添加“读书”这一方法22         System.out.println("读书");    23     }24     25 }26 27 //3.类似前面的对被装饰者方法进行扩展另一个方法28 class Student2 extends Person{29     Person student;30     public Student2(Person student) {31         this.student  = student ;32     }33 34     @Override35     public void study() {36         // TODO Auto-generated method stub37         student.study();38         //另一个扩展方法,“写字”39         System.out.println("写字");40     }41 }42 43 44 class Student3 extends Person{45     Person student;46     47     public Student3(Person student) {48         this.student  = student ;49     }50 51     @Override52     public void study() {53         // TODO Auto-generated method stub54         student.study();55         //另一个扩展方法,“画画”56         System.out.println("画画");57     }58 }59 60 61 public class readerExt {62 63     public static void main(String[] args) {64         65         //5.创建被装饰者类的对象66         Person person = new Person();67         person.study();  //学习68         69         //5.1创建装饰者类(子类)的对象,传入被装饰者类的对象70         Student1 s1 = new Student1(person);71         s1.study();  //学习,读书72         73         Student2 s2 = new Student2(person);74         s2.study();  //学习,写字75         76         //5.2 装饰者 互相装饰77         Student3 s3 = new Student3(s2);78         s3.study();  //学习,读书,画画79         80     }    81 }

 

转载于:https://www.cnblogs.com/bigerf/p/6143314.html

你可能感兴趣的文章
HTML表格相关
查看>>
上传图片
查看>>
对称加密和非对称加密
查看>>
纯css的下拉导航条(改用JQuery)
查看>>
第30节:Java基础-内部类
查看>>
Apache中RewriteCond规则参数介绍
查看>>
P1983 车站分级
查看>>
selenium去掉下载弹窗
查看>>
psp软件设计需求分析
查看>>
[Spark][Python]DataFrame select 操作例子
查看>>
增强学习————K-摇臂赌博机
查看>>
Latex Tips:
查看>>
chrome 开发者工具,查看元素 hover 样式
查看>>
多校题解
查看>>
HackerRank Extra long factorials
查看>>
js和jquery的基本应用
查看>>
Vanilla Masker – 功能强大的输入过滤插件
查看>>
imagesLoaded – 检测网页中的图片是否加载
查看>>
1005 Number Sequence(HDU)
查看>>
Mono For Android离线激活
查看>>