设计模式不得不知道的 UML 类图

前言

码字并不容易。我希望你能提出更有价值的意见。当我们想向别人解释一个问题时,最直观的方法是用图形而不是枯燥的文字来解释。毕竟,当我们还是个孩子的时候,图片可以更多地触摸我们,而文本会因为一些认知问题而导致一些理解偏差。设计模式中的 UML 类图是一种可以让你向别人解释设计概念的方式,不再是无聊的代码和文本,而是直接以类图的形式表达给别人。

为了方便大家了解,我会给出对应的类图,以及对应的代码实现,让大家有个初步的概念,方便大家来学习设计模式这枯燥的东西。

几种常见的关系:泛化(Generalization)、实现(Realization)、关联(Association)、聚合(Aggregation)、组合(Composition),依赖(Dependency)。

继承的类图

继承就是我们在 OOP 最常见的方法之一,让我们节省了很多开发时间。还有一些其他的文本描述:泛化。

它是一种特殊的依赖。

继承是指一个子类继承另一个功能,并能增加其新功能的能力。

表示方法:

                               继承使用空心箭头 实线表示。

示例:

<?phpdeclare(strict_types=1);namespace NeilyozExample;abstract class BaseExample public abstract function method01(); public abstract function method02();}class ExtendsExample extends BaseExample{ public function method01() // TODO: Implement method01() method. } public function method02() // TODO: Implement method02() method. } public function method03() }}实现的类型图

实现表示一个类(class)实现 inte ** ce 接口(可实现多个接口)的功能。

表示方法:

                               

示例:

我们都用过相机,有些相机只能拍照,但有些相机,比如立得,不仅可以拍照,还可以打印照片。

代码实现:

<?phpnamespace NeilyozExample;inte ** ce Camera{ public function photograph();}inte ** ce Printer{ public function printer();}class Polaroid implements Camera,Printer{ public function photograph() { echo "拍照" . PHP_EOL; } public function printer() { echo "冲洗照片" . PHP_EOL; }

介绍:

对于两个相对独立的对象,当一个对象负责构建另一个对象的例子或依赖另一个对象的服务时,两个对象之间主要反映为依赖关系。

将依赖类作为参数传输到相应的方法中。

表示方法:

                               

示例:

人离不开空气和水,对吧?我们依靠这两件事生存。我们可以用类图来描述。

代码实例:

<?phpdeclare(strict_types=1);namespace NeilyozExample;class Oxygen{}class Water{}class Person{ public function metaboli ** (Oxygen $oxygen,Water $water)

   相关类图

对于两个相对独立的对象,当一个对象的例子与另一个对象的某些特定例子有固定的对应关系时,这两个对象就是相关的。

表示方法:

                               用实现箭头表示 关联关系。

示例:

当一个类需要知道另一个类时,我们的作物的成熟与天气和气候有关。

<?phpdeclare(strict_types=1);class Cli ** tic{ public function getCondition() { return "秋天"; class Cropper{ private Cli ** tic $cli ** ticConditions; public function __construct(Cli ** tic $cli ** tic) $this->cli ** ticConditions = $cli ** tic; } public function ** ture() { if ($this->cli ** ticConditions->getCondition() === "秋天") { echo "成熟了" . PHP_EOL; return; } echo "再等等" . PHP_EOL; 聚合的类图

表示弱 拥有 关系,即 has-a 关系,体现 A 对象可包括 B 对象,但 B 对象不是 A 对象的一部分(可有可无的)。两个对象有自己的生命周期。

表示方法:

                               

示例:

示例:

每个人都是人,是人会混圈子,人的生命周期和圈子的生命是不同的,有些人生活 100 多岁,有些圈子很快就会解散,但圈子解散并不影响人们的生活。

<?phpdeclare(strict_types=1);namespace NeilyozExample;class Person{ private float $money; public function collectMoney(float $money) { $this->money = $money; class Group{ private array $members = public function addMember(Person $person) { $this->members[] = $person; public function cents() { array_ ** p(function ($person) $person->collectMoney(rand(0,100); $this->members); 组合的类图

组合是一种强烈的‘拥有’关系,是 contains-a 的关系反映了严格的部分和整体关系,部分与整体生命周期相同。

表示方法:

                               组合关系用 实心菱形 实线箭头 表示,连接两端的数字也可以用来表示一端的几个例子。

示例:

一个男人必须有一个大头和一个小头才能完成它。这提取了我们强大的关系。

<?phpdeclare(strict_types=1);class BigHead{}class S ** llHead{}class Man{ private BigHead $bigHead; private S ** llHead $s ** llHead; public function __construct() $this->bigHead = new BigHead();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$this->s ** llHead = new S ** llHead()

其实 UML 类图的形式也很复杂,但有了这些基本构图,我们只不过是积木。Peace!!!

原文地址 PHP打造高级开发工程师简历,祝你金三银四跳槽加薪

请访问更多学习内容:

八重樱:腾讯T3-T4标准精品PHP只要你读完《架构师教程目录》,确保工资上升到更高的水平(持续更新)

希望以上内容能对大家有所帮助,很多PHPer在进步过程中,总会遇到一些问题和瓶颈。业务代码写得太多,没有方向感。我不知道从哪里开始改进。我整理了一些信息,包括但不限于:分布式架构、高可扩展性、高性能、高并发性、服务器性能优化TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx高级干货等多个知识点需要的可以免费分享给大家,需要的可以加入我的官方群点击这里。

扫码免费用

源码支持二开

申请免费使用

在线咨询