标签:component 结构 man static oid bsp 抽象类 排查 net
装饰模式是结构型设计模式之一,不使用继承和改变类文件的情况下,动态地扩展一个对象的功能,是继承的替代方案之一(就增加功能来说,装饰者模式相比生成子类更为灵活。)。它是通过创建一个包装对象,也就是装饰来包裹真实的对象,并增加功能。
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
//被装饰者---接口 interface Person { void eat(); } //被装饰者---实现类 class Man implements Person { public void eat() { System.out.println("男人在吃饭"); } } //装饰者--抽象类,实现了被装饰者接口,持有被装饰者的引用 abstract class Decorator implements Person { private Person person; public Decorator(Person person) { this.person = person; } public void eat() { person.eat(); } } //定义装饰者A---实现类 class ManDecoratorA extends Decorator { public ManDecoratorA(Person person) { super(person); } public void eat() { super.eat(); reEat(); System.out.println("装饰类B"); } public void reEat() { System.out.println("再吃一顿炒面"); } } //定义装饰者B---实现类 class ManDecoratorB extends Decorator { public ManDecoratorB(Person person) { super(person); } public void eat() { System.out.println("=======例子2========"); super.eat(); reEat(); System.out.println("装饰类A"); } public void reEat() { System.out.println("再喝一碗粥"); } } //测试类 public class Test { public static void main(String[] args) { Man man = new Man(); ManDecoratorA md1 = new ManDecoratorA(man); ManDecoratorB md2 = new ManDecoratorB(man); md1.eat(); md2.eat(); } }
=====================
男人在吃饭
再吃一顿炒面
装饰类B
=======例子2========
男人在吃饭
再喝一碗粥
装饰类A
代理模式和装饰模式有点像,都是持有了被代理或者被装饰对象的引用。它们两个最大的不同就是装饰模式对引用的对象增加了功能,而代理模式只是对引用对象进行了控制却没有对引用对象本身增加功能。
标签:component 结构 man static oid bsp 抽象类 排查 net
原文地址:http://www.cnblogs.com/chengdabelief/p/7636232.html