设计模式-装饰模式

 
  • 文章目录
    • 一、装饰模式简介
    • 二、实战演练
    • 三、总结

一、装饰模式简介

  1. 简介:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
  2. 归类:结构型模式
  3. 特点:
    • 注重覆盖、扩展;
    • 装饰器和被装饰器都实现同一个接口,主要目的是为了扩展之后依旧保留 OOP 关系;
    • 满足 is-a 的关系。(这个东西是什么)

二、实战演练

demo事例:用装饰模式编写给人装饰比如穿衣、库、鞋等程序

Persion.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 人
* @author Persion
*
*/
public class Persion {

private String name;
public Persion(){}
public Persion(String name){
this.name = name;
}
public void show(){
System.err.print("装扮:"+name+" ");
}
}

Finery.java

1
2
3
4
5
6
7
8
9
10
11
12
  public class Finery extends Persion{

protected Persion persion;
public void Decorate(Persion persion){
this.persion=persion;
}
public void show(){
if(persion != null){
persion.show();
}
}
}

BigTrouser .java

1
2
3
4
5
6
7
public class BigTrouser extends Finery {
@Override
public void show(){
System.out.print("裤子 ");
persion.show();
}
}

TShrts .java

1
2
3
4
5
6
7
8
9
public class TShrts extends Finery{

@Override
public void show(){
System.out.print("大T恤 ");
persion.show();
}

}

Test .java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 装饰模式
* @author lucksheep
*
*/
public class Test {

/**
* @param args
*/
public static void main(String[] args) {

Persion persion=new Persion("小肥羊");

TShrts shrts=new TShrts();
BigTrouser bt=new BigTrouser();

shrts.Decorate(persion);
bt.Decorate(shrts);

bt.show();
}
}

总结:

  1. 一般呢就是把类中的装饰功能搬移出去,简化原有的类。
  2. 有效的把类的核心职责和装饰的功能分开,并且可以去除相关类中重复的装饰逻辑

 评论