设计模式-装饰器模式

  1. 装饰器模式

装饰器模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

/**
* @USER: lynn
* @DATE: 2020/4/27
**/
public class 装饰器模式 {
public static void main(String[] args) {
手机父类 iPhone = new 苹果手机();
手机装饰 加个壳 = new 手机壳(iPhone);
}
}

abstract class 手机父类{
protected String description;
public void 外观(){
System.out.println(description);
}
}
class 安卓手机 extends 手机父类{
public 安卓手机() {
description = "安卓手机";
}
}
class 苹果手机 extends 手机父类{
public 苹果手机() {
description = "苹果手机";
}
}

abstract class 手机装饰 extends 手机父类{
private 手机父类 phone;

public 手机装饰(手机父类 phone) {
this.phone = phone;
}

void 输出外观(){
if (phone!=null)
phone.外观();
}
}

class 手机壳 extends 手机装饰{

public 手机壳(手机父类 phone) {
super(phone);
this.输出外观();
}

@Override
void 输出外观() {
super.输出外观();
System.out.println("增加手机壳");
}
}

如新增功能 ,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

/**
* @USER: lynn
* @DATE: 2020/4/27
**/
public class 装饰器模式 {
public static void main(String[] args) {
手机父类 iPhone = new 苹果手机();
手机装饰 加个壳 = new 手机壳(iPhone);
手机装饰 贴个膜 = new 贴膜(iPhone);
}
}

abstract class 手机父类{
protected String description;
public void 外观(){
System.out.println(description);
}
}
class 安卓手机 extends 手机父类{
public 安卓手机() {
description = "安卓手机";
}
}
class 苹果手机 extends 手机父类{
public 苹果手机() {
description = "苹果手机";
}
}

abstract class 手机装饰 extends 手机父类{
private 手机父类 phone;

public 手机装饰(手机父类 phone) {
this.phone = phone;
}

void 输出外观(){
if (phone!=null)
phone.外观();
}
}

class 手机壳 extends 手机装饰{

public 手机壳(手机父类 phone) {
super(phone);
this.输出外观();
}

@Override
void 输出外观() {
super.输出外观();
System.out.println("增加手机壳");
}
}

class 贴膜 extends 手机装饰{

public 贴膜(手机父类 phone) {
super(phone);
this.输出外观();
}

@Override
void 输出外观() {
super.输出外观();
System.out.println("贴膜");
}
}
  • 使用目的
    • 动态给对象添加额外职责
  • 应用场景
    • FileInputStream/FileOutputStream

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 yanglau0527@gmail.com

文章标题:设计模式-装饰器模式

文章字数:515

本文作者:Cynaith

发布时间:2020-05-02, 01:23:07

最后更新:2020-05-02, 01:27:00

原始链接:https://cynaith.github.io/2020/05/02/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E8%A3%85%E9%A5%B0%E5%99%A8%E6%A8%A1%E5%BC%8F/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏