装饰模式(Decorator)

mac2022-06-30  69

一、装饰模式的类图如下

 

在装饰模式中的角色有:

  ●  抽象构件(Component)角色:就是需要装饰者的基类

  ●  具体构件(ConcreteComponent)角色:具体需要装饰的实例类

  ●  装饰(Decorator)角色:装饰物/装饰物 的基类

  ●  具体装饰(ConcreteDecorator)角色:具体装饰物类

话不多说,先看实例:

二、装饰模式具体实例

待装饰类的基类:

/** * 人 */ public interface People { public void speak(); }

具体待装饰类   ,中国人一出生就说汉语,   在人生旅途中也需要学习多种语言来装饰自己

/** * * 中国人类 实现people * 重写speak()方法 , 中国人说汉语 */ public class Chinese implements People { @Override public void speak() { System.out.println("中国娃说汉语"); } }

装饰物/装饰品 的基类  --此处装饰类  为语言

/** * 装饰类 * 语言基类 */ public class Language implements People { private People people; public Language() { } public Language(People people) { this.people = people; } @Override public void speak() { people.speak(); } }

具体装饰类1:    装饰自我  - - 学习英语

/** * 具体装饰类1 * 学习说英语 */ public class English extends Language{ public English(People people) { super(people); people.speak(); } @Override public void speak() { System.out.println("学会说英语"); } }

具体装饰类2    装饰自我  - - 学习法语

/** * 具体装饰类2 * 学习说法语 */ public class French extends Language{ public French(People people) { super(people); people.speak(); } @Override public void speak() { System.out.println("学会说法语"); } }

具体装饰类3    装饰自我  - - 学习德语

** * 具体装饰类 * 学习说德语 */ public class German extends Language{ public German(People people) { super(people); people.speak(); } @Override public void speak() { System.out.println("学会说德语"); } }

测试类:

public class main { public static void main(String[] args) { People people = new Chinese(); /* People people1 = new English(people); People people2 = new French(people1); people2.speak();*/ People zhangsan = new English(new French(new German(people))); zhangsan.speak(); } }

输出结果:

转载于:https://www.cnblogs.com/Actexpler-S/p/8179998.html

最新回复(0)