Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from guanguans:master #1

Open
wants to merge 30 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
01ff318
Update README.md
guanguans Jul 9, 2019
70b6742
Update README.md
guanguans Jul 9, 2019
20d5b20
Update README.md
guanguans Jul 9, 2019
919ffbb
Update FUNDING.yml
guanguans Jul 9, 2019
05e5f86
[ImgBot] Optimize images
ImgBotApp Apr 20, 2020
b016c40
更新创建型设计模式部分
singlepig Nov 18, 2020
b71c5f5
更新结构型设计模式部分
singlepig Nov 18, 2020
b8c119e
更新行为型设计模式部分
singlepig Nov 19, 2020
60e9127
Merge pull request #3 from singlepig/patch-1
guanguans Nov 19, 2020
cc4488f
Merge pull request #2 from guanguans/imgbot
guanguans Nov 19, 2020
b7259a1
Update README.md
guanguans Jan 27, 2021
34fd184
Add github config files
guanguans Sep 16, 2021
c3fc8cc
Update README.md
guanguans Sep 16, 2021
6daa1e7
Add dependabot config file
guanguans Sep 30, 2021
23de287
Update README.md
guanguans Sep 30, 2021
fb0ad0a
Bump actions/checkout from 2 to 3
dependabot[bot] Mar 1, 2022
e714b48
Update README.md
guanguans Mar 28, 2022
8cf0d56
Merge pull request #6 from guanguans/dependabot/github_actions/action…
guanguans Mar 28, 2022
d07efd7
Bump design-patterns-for-humans from `5050fe7` to `77076db`
dependabot[bot] Aug 29, 2022
c3a1fee
Merge pull request #8 from guanguans/dependabot/submodules/design-pat…
guanguans Jan 6, 2023
4e9add5
更新依赖配置与工作流
guanguans Apr 30, 2024
fb50f6d
更新lint与zhlint配置文件
guanguans Apr 30, 2024
34e55c0
调整设计模式说明顺序及格式,提高文档可读性
guanguans Apr 30, 2024
81dbfe9
更新设计模式列表
guanguans Apr 30, 2024
c9549b5
调整BurgerBuilder类代码格式
guanguans Apr 30, 2024
f847c4d
更新README:增加代理模式解释
guanguans Apr 30, 2024
ad711ef
Bump dependabot/fetch-metadata from 2.0.0 to 2.1.0
dependabot[bot] Apr 30, 2024
f29aa99
Merge pull request #13 from guanguans/dependabot/github_actions/depen…
github-actions[bot] Apr 30, 2024
f7cfecc
Bump dependabot/fetch-metadata from 2.1.0 to 2.2.0
dependabot[bot] Jul 5, 2024
e457371
Merge pull request #15 from guanguans/dependabot/github_actions/depen…
github-actions[bot] Jul 5, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
调整设计模式说明顺序及格式,提高文档可读性
guanguans committed Apr 30, 2024
commit 34e55c03baddfa7a1a221e90268ce7a848820da6
64 changes: 32 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
@@ -11,8 +11,8 @@
<!-- TOC updateOnSave:false -->

- [介绍](#介绍)
- [注意](#注意)
- [设计模式的类型](#设计模式的类型)
- [注意](#注意)
- [设计模式的类型](#设计模式的类型)
- [创建型设计模式](#创建型设计模式)
- [🏠简单工厂模式(Simple Factory)](#简单工厂模式simple-factory)
- [🏭工厂方法模式(Factory Method)](#工厂方法模式factory-method)
@@ -39,13 +39,13 @@
- [💡策略模式(Strategy)](#策略模式strategy)
- [💢状态模式(State)](#状态模式state)
- [📒模板方法模式(Template Method)](#模板方法模式template-method)
- [总结](#总结)
- [贡献](#贡献)
- [License](#license)
- [总结](#总结)
- [贡献](#贡献)
- [License](#license)

<!-- /TOC -->

# 介绍
## 介绍

设计模式是反复出现问题的解决方案,**如何解决某些问题的指导方针**。它们并不是可以插入应用程序就可以等待神奇发生的类、包或者库。相反它是如何在某些情况下解决某些问题的指导原则。

@@ -70,7 +70,7 @@
* [结构型](#structural-design-patterns)
* [行为型](#behavioral-design-patterns)

# [](#creational-design-patterns)创建型设计模式
## [](#creational-design-patterns)创建型设计模式

通俗解释:

@@ -87,7 +87,7 @@
* [原型模式(Prototype)](#-prototype)
* [单例模式(Singleton)](#-singleton)

## 🏠简单工厂模式(Simple Factory)
### 🏠简单工厂模式(Simple Factory)

现实生活中的例子:

@@ -164,7 +164,7 @@ $door2 = DoorFactory::makeDoor(50, 100);

当创建一个对象不仅仅是一些分配而且涉及一些逻辑时,将它放在专用工厂中而不是在任何地方重复相同的代码是有意义的。

## 🏭工厂方法模式(Factory Method)
### 🏭工厂方法模式(Factory Method)

现实生活中的例子:

@@ -257,7 +257,7 @@ $marketingManager->takeInterview(); // Output: Asking about community building.

在类中有一些通用处理但在运行时动态决定所需的子类时很有用。换句话说,当客户端不知道它可能需要什么样的子类时。

## 🔨抽象工厂模式(Abstract Factory)
### 🔨抽象工厂模式(Abstract Factory)

现实生活中的例子:

@@ -388,7 +388,7 @@ $expert->getDescription(); // Output: I can only fit iron doors

当涉及到不那么简单的,存在相互依赖关系的创建逻辑时使用

## 👷建造者模式
### 👷建造者模式

现实生活中的例子:

@@ -499,7 +499,7 @@ $burger = (new BurgerBuilder(14))

当一个对象可能存在几种类型并避免构造函数伸缩时使用。与工厂模式的主要区别在于:当创建是一步过程时,将使用工厂模式,而当创建是多步骤过程时,将使用建造者模式。

## 🐑原型模式(Prototype)
### 🐑原型模式(Prototype)

现实生活中的例子:

@@ -573,7 +573,7 @@ echo $cloned->getCategory(); // Mountain sheep

当需要一个与现有对象类似的对象时,或者与克隆相比,创建的成本会很高。

## 💍单例模式(Singleton)
### 💍单例模式(Singleton)

现实生活中的例子:

@@ -633,7 +633,7 @@ $president2 = President::getInstance();
var_dump($president1 === $president2); // true
```

# [](#structural-design-patterns)结构型设计模式
## [](#structural-design-patterns)结构型设计模式

通俗解释:

@@ -651,7 +651,7 @@ var_dump($president1 === $president2); // true
* [享元模式(Flyweight)](#-flyweight)
* [代理模式(Proxy)](#-proxy)

## 🔌适配器模式(Adapter)
### 🔌适配器模式(Adapter)

现实生活中的例子:

@@ -742,7 +742,7 @@ $hunter = new Hunter();
$hunter->hunt($wildDogAdapter);
```

## 🚡桥梁模式(Bridge)
### 🚡桥梁模式(Bridge)

现实生活中的例子:

@@ -843,7 +843,7 @@ echo $about->getContent(); // "About page in Dark Black";
echo $careers->getContent(); // "Careers page in Dark Black";
```

## 🌿组合模式(Composite)
### 🌿组合模式(Composite)

现实生活中的例子:

@@ -978,7 +978,7 @@ $organization->addEmployee($jane);
echo "Net salaries: " . $organization->getNetSalaries(); // Net Salaries: 27000
```

## ☕装饰模式(Decorator)
### ☕装饰模式(Decorator)

现实生活中的例子:

@@ -1101,7 +1101,7 @@ echo $someCoffee->getCost(); // 20
echo $someCoffee->getDescription(); // Simple Coffee, milk, whip, vanilla
```

## 📦门面模式(Facade)
### 📦门面模式(Facade)

现实生活中的例子:

@@ -1196,7 +1196,7 @@ $computer->turnOn(); // Ouch! Beep beep! Loading.. Ready to be used!
$computer->turnOff(); // Bup bup buzzz! Haah! Zzzzz
```

## 🍃享元模式(Flyweight)
### 🍃享元模式(Flyweight)

现实生活中的例子:

@@ -1280,7 +1280,7 @@ $shop->serve();
// Serving tea to table# 5
```

## 🎱代理模式(Proxy)
### 🎱代理模式(Proxy)
现实生活中的例子:

> 你有没有用过门禁卡进门?打开该门有多种选择,即可以使用门禁卡或按下绕过安检的按钮打开。门的主要功能是打开,但在它上面添加了一个代理来添加一些功能。让我用下面的代码示例更好地解释它。
@@ -1363,7 +1363,7 @@ $door->close(); // Closing lab door

另一个例子是某种数据映射器实现。例如,我最近使用这种模式为 MongoDB 制作了一个 ODM(对象数据映射器),我在使用魔术方法`__call()`围绕 mongo 类编写了一个代理。所有方法调用被代理到原始 mongo 类,检索结果被原样返回。但在`find`或`findOne`的情况下,数据被映射到所需的类对象,返回这个对象来代替`Cursor`。

# [](#behavioral-design-patterns)行为型设计模式
## [](#behavioral-design-patterns)行为型设计模式

通俗解释:

@@ -1384,7 +1384,7 @@ $door->close(); // Closing lab door
* [状态模式(State)](#-state)
* [模板方法模式(Template Method)](#-template-method)

## 🔗责任链模式(Chain Of Responsibilities)
### 🔗责任链模式(Chain Of Responsibilities)

现实生活中的例子:

@@ -1489,7 +1489,7 @@ $bank->pay(259);
// Paid 259 using Bitcoin!
```

## 👮命令行模式(Command)
### 👮命令行模式(Command)

现实生活中的例子:

@@ -1613,7 +1613,7 @@ $remote->submit($turnOff); // Darkness!

命令模式还可用于实现基于事务的系统。当你一执行命令就持续维持命令历史记录的情况下。如果成功执行了最后一个命令,一切都很好,否则只需要遍历历史记录持续在已经执行过的命令上执行`undo`。

## ➿迭代器模式(Iterator)
### ➿迭代器模式(Iterator)

现实生活中的例子:

@@ -1724,7 +1724,7 @@ foreach($stationList as $station) {
$stationList->removeStation(new RadioStation(89)); // Will remove station 89
```

## 👽中介者模式(Mediator)
### 👽中介者模式(Mediator)

现实生活中的例子:

@@ -1802,7 +1802,7 @@ $jane->send('Hey!');
// Feb 14, 10:58 [Jane]: Hey!
```

## 💾备忘录模式(Memento)
### 💾备忘录模式(Memento)

现实生活中的例子:

@@ -1894,7 +1894,7 @@ $editor->restore($saved);
$editor->getContent(); // This is the first sentence. This is second.
```

## 😎观察者模式(Observer)
### 😎观察者模式(Observer)

现实生活中的例子:

@@ -1991,7 +1991,7 @@ $jobPostings->addJob(new JobPost('Software Engineer'));
// Hi Jane Doe! New job posted: Software Engineer
```

## 🏃访问者模式(Visitor)
### 🏃访问者模式(Visitor)

现实生活中的例子:

@@ -2141,7 +2141,7 @@ $dolphin->accept($speak); // Tuut tutt tuutt!
$dolphin->accept($jump); // Walked on water a little and disappeared
```

## 💡策略模式(Strategy)
### 💡策略模式(Strategy)

现实生活中的例子:

@@ -2220,7 +2220,7 @@ $sorter = new Sorter(new QuickSortStrategy());
$sorter->sort($dataset); // Output : Sorting using quick sort
```

## 💢状态模式(State)
### 💢状态模式(State)

现实生活中的例子:

@@ -2320,7 +2320,7 @@ $editor->type('Fifth line');
// fifth line
```

## 📒模板方法模式(Template Method)
### 📒模板方法模式(Template Method)

现实生活中的例子: