java中的装饰者模式_装饰者模式(java)

一.装饰者模式的实现方式

1.写一个接口

2.写一个类实现该接口,并重写接口里的方法,这个类就是装饰类

3.再写一个类实现该接口,并创建装饰类的引用,写一个构造方法,将装饰类作为参数传入,并在实现接口的方法里通过装饰类调用装饰类方法,同时可以在该方法里写些其他操作,也就是对装饰类方法进行增强,该类由于调用了装饰类,被称为被装饰类。

interface Studyer{

//一个学习功能public void study();

}

class Person implements Studyer{

//被装饰类 其实装饰类和被装饰类就是父类和子类的关系 只不过用装饰者模式可以降低子类与父类之间的一个耦合度 子类不会受到父类变化的影响//而装饰着可以选择多个不同被装饰类作为参数进行加强功能//被装饰类@Override

public void study() {

System.out.println("需要学会基础的学习能力");

}

}

class Student implements Studyer{

private Person person;

public Student(Person person) {

this.person = person;

}

@Override

public void study() {

person.study();

System.out.println("需要学习能力强");

System.out.println("需要遵守纪律");

}

}

二.为什么要使用装饰者模式

同一个接口,一个类在另外一个类基础上实现增强方法,以前是采用继承,为什么要采用装饰者模式

类继承一旦父类改变,那么子类也得相应进行改变,也就是说它们之间的耦合性太高,不利于代码的维护和管理,使用装饰者模式可以将装饰类和被装饰类彼此独立起来,只需要实现共同的接口,一旦需要改代码升级时,只需要更改相应的类就可以了,不需要都改变。

三.哪里有使用装饰者模式

按照常规继承的话,实现FileWriter,MediaWriter,DataWriter并且让其实现缓冲写出功能得这么做,但是导致了继承体系的臃肿,而且子类功能的重复,关联性也大,不利于维护。

Writer

|--FileWriter

|--BufferedFileWriter

|--MediaWriter

|--BufferedMediaWriter

|--DataWriter

|--BufferedDataWriter

很显然jdk没有这么处理,而是采用了装饰者模式,实现共同接口Writer,将BufferWriter作为一个共同的被装饰类,创建一个父类对象Writer,通过构造方法

可以传入FileWriter ,MediaWriter,DataWriter,作为父类Wirter引用指向它们三个中任意一个子类对象。

Writer

|--FileWriter

|--MediaWriter

|--DataWriter

|--BufferedWriter

从而实现了装饰者模式,其实传入实例之后就相当于以下情况了

BufferedWriter(FileWriter w){}

BufferedWriter(MediaWriter w){}

BufferedWriter(DataWriter w){}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值