diff --git a/README.md b/README.md index 93f37de..e49a565 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ - [介绍](#介绍) - - [注意](#注意) - - [设计模式的类型](#设计模式的类型) +- [注意](#注意) +- [设计模式的类型](#设计模式的类型) - [创建型设计模式](#创建型设计模式) - [🏠简单工厂模式(Simple Factory)](#简单工厂模式simple-factory) - [🏭工厂方法模式(Factory Method)](#工厂方法模式factory-method) @@ -39,13 +39,13 @@ - [💡策略模式(Strategy)](#策略模式strategy) - [💢状态模式(State)](#状态模式state) - [📒模板方法模式(Template Method)](#模板方法模式template-method) - - [总结](#总结) - - [贡献](#贡献) - - [License](#license) +- [总结](#总结) +- [贡献](#贡献) +- [License](#license) -# 介绍 +## 介绍 设计模式是反复出现问题的解决方案,**如何解决某些问题的指导方针**。它们并不是可以插入应用程序就可以等待神奇发生的类、包或者库。相反它是如何在某些情况下解决某些问题的指导原则。 @@ -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) 现实生活中的例子: