好文档 - 专业文书写作范文服务资料分享网站

【黑马程序员】装饰者模式详解

天下 分享 时间: 加入收藏 我要投稿 点赞

【黑马程序员】装饰者模式详解

前言:

? ?? ? 何为装饰者模式:

? ?? ?? ?? ?? ?? ?? ?在不改变原类和继承的情况下动态的扩展对象的功能.通过包装一个对象(类)来实现一个新的 具有原来对象相同接口的对象(类). 装饰者模式的特点:

1.? ? 在不改变原有对象的原本的结构上进行功能的添加.

2.? ? 装饰对象和原对象都实现了相同的接口.可以使用于原有对象的方式使用装饰对象. 3.? ? 装饰对象中包含原有对象.即装饰对象是真的的原始对象经过包装之后的对象. 使用环境:

1.? ? 在不影响其他对象的情况下.以动态.透明的方式给单个对象题添加职责. 2.? ? 处理那些可以撤销的职责.

3.? ? 当不您呢个采用生成子类的方法进行扩充的时.一种情况是可能大量独立的扩展.为支持每一种扩展将 产生大量的之类.使得之类的数量呈爆炸性增长.另一中情况是因为定义的类被隐藏.或是不能用于生成子类. 参与者:

1.? ? 被装饰的对象基类. 2.? ? 被装饰的对象. 3.? ? 装饰者抽象类 4.? ? 具体的装饰者 代码:

// 基类 接口或者是抽象类??会被 被原始对象或是装饰对象继承或是实现

1 public interface Person { 2 ????void eat(); 3 } 4 5

// 原始对象??实现基类的接口

1 public class Man implements Person { 2 ????public void eat() { 3 ????????\男人在吃\); 4 ????} 5 } 6

// 装饰者的抽象类 实现基类接口

01 public abstract class Decorator implements Person { 02 ????protected Person person;

03 ????public void setPerson(Person person) { 04 ????????this.person = person; 05 ????}

06 ????public void eat() { 07 ????????person.eat(); 08 ????} 09 } 10

//装饰者 继承装饰者的抽象类.而抽象类实现了基类接口那么 此类中也相当于继承了 基类中的方法

01 public class ManDecoratorA extends Decorator { 02 ????public void eat() { 03 ????????super.eat(); 04 ????????reEat();

05 ????????\类\); 06 ????}

07 ????public void reEat() { 08 ????????\再吃一顿饭\); 09 ????} 10 }

11 public class extends Decorator { 12 ????public void eat() { 13 ????????super.eat(); 14 ????????\); 15 ????????\类\); 16 ????} 17 } 18 19 20 21

// 测试类

01 public class Test {

02 ????public static void main(String[] args) { 03 ????????Man man = new Man();

04 ????????ManDecoratorA md1 = new ManDecoratorA(); 05 ????????ManDecoratorB md2 = new ManDecoratorB(); 06 ????????md1.setPerson(man); 07 ????????md2.setPerson(md1); 08 ????????md2.eat(); 09 ????} 10 } 11

总结: 动态的将功能附加到对象上.想要扩展功能.装饰者是有别于继承的另一种选择. 图解

装饰者图解

【黑马程序员】装饰者模式详解

【黑马程序员】装饰者模式详解前言:????何为装饰者模式:??????????????在不改变原类和继承的情况下动态的扩展对象的功能.通过包装一个对象(类)来实现一个新的具有原来对象相同接口的对象(类).装饰者模式的特点:1.??在不改变原有对象的原本的结构上进行功能的添加.2.??
推荐度:
点击下载文档文档为doc格式
5xqjx8v8kx77xpo5846y5ap1c1kz8f00qd0
领取福利

微信扫码领取福利

微信扫码分享