设计模式 桥接模式

WechatIMG30.jpeg

介绍

桥接模式是一种结构型设计模式,它通过将抽象部分与具体实现部分分离,使它们可以独立地变化,从而提高系统的灵活性和可扩展性。

角色

角色 说明
Abstraction 抽象化:定义抽象部分的接口,并维护一个指向实现化对象的引用。它通常是一个抽象类,其中包含一个抽象的操作方法。
Refined Abstraction 扩展抽象化:对抽象化进行扩展,添加新的功能。它通常是一个具体的类,它继承自抽象化,并且实现了抽象类中定义的操作方法。
Implementor 实现化:定义实现化部分的接口,并提供基本的操作方法,但它并不实现抽象化部分的具体操作。它通常是一个接口或抽象类。
ConcreteImplementor 具体实现化:实现实现化部分的接口,并完成具体的操作。它通常是一个具体的类,实现了实现化接口中定义的基本操作方法。

角色示例

类名 担任角色 说明
Size 抽象化 定义果茶杯子规格类,实现不用规格
NormalSize 扩展抽象化 定义正常杯类
BigSize 扩展抽象化 定义大杯类
SmallSize 扩展抽象化 定义小杯类
Ice 抽象化 定义冰量类,实现不用冰量
NormalIce 扩展抽象化 定义正常冰类
LessIce 扩展抽象化 定义少冰类
WithoutIce 扩展抽象化 定义不加冰类
FruitTea 实现化 定义配置果茶的方法,来配置具体果茶
MangoTea 具体实现化 芒果茶类
StrawberryTea 具体实现化 草莓茶类

UML类图

桥接模式.jpg

代码

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php  
interface Size{
public function setSize();
}

class NormalSize implements Size
{
public function setSize()
{
return '正常杯';
}
}

class BigSize implements Size
{
public function setSize()
{
return '大杯';
}
}

class SmallSize implements Size
{
public function setSize()
{
return '小杯';
}
}

interface Ice{
public function setIce();
}

class NormalIce implements Ice
{
public function setIce()
{
return '正常杯';
}
}

class LessIce implements Ice
{
public function setIce()
{
return '少冰';
}
}

class WithoutIce implements Ice
{
public function setIce()
{
return '不加冰';
}
}

abstract class FruitTea{
protected $size;
protected $ice;

public function __construct(Size $size, Ice $ice)
{
$this->size = $size;
$this->ice = $ice;
}

abstract public function getTea();
}

class MangoTea extends FruitTea
{
public function getTea()
{
return "芒果茶".$this->size->setSize().$this->ice->setIce();
}
}

class StrawberryTea extends FruitTea
{
public function getTea()
{
return "草莓茶".$this->size->setSize().$this->ice->setIce();
}
}

$bigSize = new BigSize();
$withoutIce = new WithoutIce();
$mangoTea = new MangoTea($bigSize, $withoutIce);
echo $mangoTea->getTea();

创建 FruitTea.php,内容如上。

执行

1
2
$ php FruitTea.php
芒果茶大杯不加冰
-------------本文结束感谢您的阅读-------------
0%