码字不易,希望大家多提宝贵意见。我们要给别人讲解一个问题的时候,最直观的方法莫过于用图形的方式去讲解,而不是枯燥的文字。毕竟我们还是个孩子的时候,图画更能给我们带来触动,而文字我们因为一些认知的问题会导致一些理解能力上的偏差。设计模式里面的 uml 类图就是可以让你给别人讲解设计理念的时候,不用再是枯燥的代码和文字,而是直接给别人用类图的形式来表达的一种方式。
为了方便大家了解,我会给出对应的类图,以及对应的代码实现,让大家有个初步的概念,方便大家来学习设计模式这枯燥的东西。
我们常见的几种关系:泛化(generalization)、实现(realization)、关联(association)、聚合(aggregation)、组合(composition),依赖(dependency)。
继承是我们在 oop 中最常见的一种方式,让我们可以节约了不少的开发时间。继承也有一些别的文字描述方式:泛化。
它是一种特殊的依赖。
继承就是指一个子类继承了另外一个的功能,并且可以增加它自己的新功能的能力。
表示方法:
继承使用空心箭头 + 实线表示。
示例:
<?phpdeclare(strict_types=1);namespace neilyoz\example;abstract class baexample { public abstract function method01(); public abstract function method02();}class extendxample extends baexample{ public function method01() { // todo: implement method01() method. } public function method02() { // todo: implement method02() method. } public function method0中专能考本科吗3() { }}
实现表示一个类(class)实现形容下雨的诗句 interface 接口(可以实现多个接口)的功能。
表示方法:
使用空心三角形 + 虚线表示
示例:
我们都用过相机,有的相机只是可以拍照,但是有的相机例如拍立得,不仅可以拍照还能够打印出照片。
代码实现:
<?phpnamespace neilyoz\example;interface camera{ public function photograph();}interface 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 neilyoz\example;class oxygen{}class water{}class person{ public function metabolism(oxygen $oxygen, water $water) { // 使用 氧气 水代谢 }}
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
表示方法:
关联关系用实现箭头表示。
示例:
我们的农作物的成熟和天气气候有关系,当一个类需要知道另一个类时,可以用关联。
<?phpdeclare(strict_types=1);class climatic{ public function getcondition() { return "秋天"; }}class cropper{ private climatic $climaticconditions; public function __construct(climatic $climatic) { $this->climaticconditions = $climatic; } public function mature() { if ($this->climaticconditions->getcondition() === "秋天") { echo "成熟了" . php_eol; return; } echo "再等等" . php_eol; }}
表示一种弱的” 拥有” 关系,即 has-a 关系,体现的是 a 对象可以包含 b 对象,但 b 对象不是 a 对象的一部分(可有可无的那种)。两个对象具有各自的生命周期。
表示方法:
聚合关系用空心菱形 + 实线箭头表示
示例:
示例:
大家都是人,是人就要混圈子,人的生命周期和圈子的生命是不一样的,有的人活 100 多岁,有的圈子没多久也会解散,但是圈子解散不影响人的生命。
<?phpdeclare(strict_types=1);namespace neilyoz\example;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_map(functi形容寒冷的诗句on ($person) { $person->collectm珠海外伶仃岛攻略oney(rand(0, 100)); }, $this->members); }}
组合是一种强的‘拥有’关系,是一种 contains-a 的关系,体现了严格的部分和整体关系,部分和整体的生命周期一样。
表示方法:
组合关系用实心的菱形 + 实线箭头表示,还可以使用连线两端的数字表示某一端有几个实例。
示例:
一个男人必须有个大头还必须有个小头才能算完整吧。这种就提现了我们的强拥有关系。
<?phpdeclare(strict_types=1);class bighead{}class smallhead{}class man{ private bighead $bighead; private smallhead $smallhead; public function __construct() { // 代码中这里是我们固定不可替换的 $this->bighead = new bighead(); $this->smallhead = new smallhead(); }}
其实 uml 类图的形式复杂起来也很复杂,但是有这些基础的构图,我们无非就是搭积木而已。peace!!!
原文地址php高级开发工程师简历打造,祝你金三银四跳槽加薪更多学我是一只小虫子教案习内容请访问:
腾讯t3-t4标准精品php架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)
本文发布于:2023-04-08 12:24:54,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/a20e06f2519dfa9ca78dbff6b305861a.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:设计模式不得不知道的 UML 类图.doc
本文 PDF 下载地址:设计模式不得不知道的 UML 类图.pdf
留言与评论(共有 0 条评论) |