设计模式-适配器模式

  1. 适配器模式
    1. 类适配器
    2. 对象适配器
    3. 接口适配器

适配器模式

将某个类的接口转换成客户端期望的另一个接口表示。使得原本由于接口不兼容而不能一起工作的那些类能在一起工作。

类适配器

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

/**
* @USER: lynn
* @DATE: 2020/4/26
**/
public class 类适配器 {
public static void main(String[] args) {
充电器 phone = new 手机();
System.out.println(phone.高压转低压());
}
}

class 高压电{
public int 插座(){
int output = 220;
return output;
}
}
interface 充电器{
int 高压转低压();
}
class 手机 extends 高压电 implements 充电器{

@Override
public int 高压转低压() {
int 高压电 = 插座();
//适配细节
int 低压电 = 高压电/44;
return 低压电;
}
}

或者

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

/**
* @USER: lynn
* @DATE: 2020/4/26
**/
public class 类适配器 {
public static void main(String[] args) {
充电器 phone = new 手机();
System.out.println(phone.高压转低压());
}
}

abstract class 高压电 implements 充电器{
public int 插座(){
int output = 220;
return output;
}
}
interface 充电器{
int 高压转低压();
}
class 手机 extends 高压电{

@Override
public int 高压转低压() {
int 高压电 = 插座();
//适配细节
int 低压电 = 高压电/44;
return 低压电;
}
}

对象适配器

对象适配器拥有源角色的实例

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
/**
* @USER: lynn
* @DATE: 2020/4/26
**/
public class 对象适配器 {
public static void main(String[] args) {
充电器 phone = new 手机对象(new 高压电());
System.out.println(phone.高压转低压());
}
}

class 手机对象 extends 高压电 implements 充电器{

private 高压电 伏220高压电;

public 手机对象(高压电 伏220高压电) {
this.伏220高压电 = 伏220高压电;
}

@Override
public int 高压转低压() {
int 高压电 = 伏220高压电.插座();
//适配细节
int 低压电 = 高压电/44;
return 低压电;
}
}

接口适配器

通过抽象类来实现适配

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

/**
* @USER: lynn
* @DATE: 2020/4/26
**/
public class 接口适配器 {
public static void main(String[] args) {
手机输入 phone = new 手机适配器(new 工业插座());
System.out.println("输出后电压"+phone.输入电压());
phone = new 手机适配器(new 家庭插座());
System.out.println("输出后电压"+phone.输入电压());
}
}

abstract class 插座{
public int 输出电压(){
return 200;
}
}
class 家庭插座 extends 插座{
@Override
public int 输出电压() {
return 220;
}
}
class 工业插座 extends 插座{
@Override
public int 输出电压() {
return 440;
}
}
interface 手机输入{
int 输入电压();
}

class 手机适配器 implements 手机输入{

private 插座 chazuo;

public 手机适配器(家庭插座 jiatingchazuo) {
this.chazuo = jiatingchazuo;
}

public 手机适配器(工业插座 gongyechazuo) {
this.chazuo = gongyechazuo;
}

@Override
public int 输入电压() {
if (chazuo !=null){
System.out.println("输出前电压:"+chazuo.输出电压());
}
//适配逻辑
return 5;
}
}
  • 使用场景
    • 项目接口的新需求,不用更改老代码,实现代码兼容

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

文章标题:设计模式-适配器模式

文章字数:710

本文作者:Cynaith

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

最后更新:2020-05-02, 01:26:05

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

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

目录
×

喜欢就点赞,疼爱就打赏