{"id":21644372,"url":"https://github.com/vectorxxxx/note_designpatterns","last_synced_at":"2025-07-10T12:07:42.159Z","repository":{"id":91477529,"uuid":"405997326","full_name":"vectorxxxx/NOTE_DesignPatterns","owner":"vectorxxxx","description":"尚硅谷Java设计模式（图解+框架源码剖析）学习笔记","archived":false,"fork":false,"pushed_at":"2023-01-11T01:05:36.000Z","size":346,"stargazers_count":34,"open_issues_count":0,"forks_count":18,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T18:22:07.492Z","etag":null,"topics":["design-pattern","design-patterns"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vectorxxxx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-09-13T14:03:36.000Z","updated_at":"2025-01-22T07:30:18.000Z","dependencies_parsed_at":"2023-07-08T15:00:09.351Z","dependency_job_id":null,"html_url":"https://github.com/vectorxxxx/NOTE_DesignPatterns","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vectorxxxx/NOTE_DesignPatterns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectorxxxx%2FNOTE_DesignPatterns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectorxxxx%2FNOTE_DesignPatterns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectorxxxx%2FNOTE_DesignPatterns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectorxxxx%2FNOTE_DesignPatterns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vectorxxxx","download_url":"https://codeload.github.com/vectorxxxx/NOTE_DesignPatterns/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vectorxxxx%2FNOTE_DesignPatterns/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262056504,"owners_count":23251685,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["design-pattern","design-patterns"],"created_at":"2024-11-25T05:39:52.023Z","updated_at":"2025-06-26T11:34:24.697Z","avatar_url":"https://github.com/vectorxxxx.png","language":"Java","readme":"# NOTE_DesignPatterns\n\n## 介绍\n\n:sparkles: 尚硅谷Java设计模式（图解+框架源码剖析）学习笔记\n\n\n\n## 更新\n\n- :link: Github：[GitHub - vectorxxxx/NOTE_DesignPatterns: 尚硅谷Java设计模式（图解+框架源码剖析）学习笔记](https://github.com/vectorxxxx/NOTE_DesignPatterns)\n- :link: Gitee：[NOTE_DesignPatterns: 尚硅谷Java设计模式（图解+框架源码剖析）学习笔记 (gitee.com)](https://gitee.com/vectorx/NOTE_DesignPatterns)\n- :link: GitCode：[VectorUx / NOTE_DesignPatterns · GitCode](https://gitcode.net/qq_35925558/NOTE_DesignPatterns)\n- :link: 语雀：[设计模式从入门到精通 · 语雀 (yuque.com)](https://www.yuque.com/u21195183/fnz31h)\n- :link: 博客园：[设计模式从入门到精通 - 随笔分类 - VectorX - 博客园 (cnblogs.com)](https://www.cnblogs.com/vectorx/category/2046320.html)\n- :link: CSDN：[设计模式从入门到精通_VectorX's Blog-CSDN博客](https://blog.csdn.net/qq_35925558/category_11416999.html)\n- :link: 掘金：[设计模式从入门到精通 - VectorX的专栏 - 掘金 (juejin.cn)](https://juejin.cn/column/7019529168140369951)\n\n\u003cmark\u003e**整理不易，还望各位看官一键三连 :heart: :heart: :heart: **\u003c/mark\u003e\n\n\u003cmark\u003e**整理不易，还望各位看官一键三连 :heart: :heart: :heart: **\u003c/mark\u003e\n\n\u003cmark\u003e**整理不易，还望各位看官一键三连 :heart: :heart: :heart: **\u003c/mark\u003e\n\n:sparkles:下面开始吧~\n\n---\n\n## 0、设计模式境界\n\n境界大多是相通的\n\n:person_fencing: 剑魔独孤求败的五层剑法境界\n\n- :crossed_swords: **青钢利剑**：一招一式，极致招式\n- :crossed_swords: **紫薇软剑**：招式变化，以柔克刚\n- :crossed_swords: **玄铁重剑**：运劲法门，力度压制\n- :crossed_swords: **木剑**：以快打慢，持强克弱\n- :crossed_swords: **无剑**：内力外放，化气攻击\n\n:book: 清代文学家王国维在《人间词话》提出的读书三层境界\n\n- :city_sunrise: **昨夜西风凋碧树，独上高楼，望尽天涯路**\n- :womans_clothes: **衣带渐宽终不悔，为伊消得人憔悴**\n- :izakaya_lantern: **众里寻他千百度，蓦然回首，那人却在灯火阑珊处**\n\n\n\n## 1、设计模式目的\n\n:computer: 设计模式是为了让程序（软件），具有更好的\n\n- :recycle: **可复用性**\n- :book: **可读性**\n- :link: **可扩展性**\n- :policeman: **可靠性**\n- :wrench: **可维护性**\n- :snowboarder: **灵活性**\n- :pushpin: **高内聚，低耦合**\n\n\n\n## 2、设计模式七大原则\n\n- :one: **单一职责原则**（Single Responsibility Principle）：一个类只负责一项职责\n- :two: **接口隔离原则**（Interface Segregation Principle）：一个类对另一个类的依赖应该建立在最小的接口上\n- :three: **依赖倒转原则**（Dependence Inversion Principle）：面向接口编程\n- :four: **里氏替换原则**（Liskov Substitution Principle）：用聚合、组合代替继承\n- :five: **开闭原则**（OCP，Open Closed Principle）：对扩展开放，对修改关闭\n- :six: **迪米特法则**（Demeter Principle）：最少知道原则，只与直接的朋友通信\n- :seven: **合成复用原则**（Composite Reuse Principle）：尽量使用合成/聚合的方式，而不是使用继承\n\n\n\n## 3、UML 类图关系\n\n- **依赖**（dependence）\n- **泛化**（Generalization）：即继承\n- **实现**（Implementation）\n- **关联**（Association）：单向一对一关系；双向一对一关系\n- **聚合**（Aggregation）\n- **组合**（Composition）\n\n\n\n## 4、设计模式分类（5 + 7 + 11）\n\n- **创建型模式**（5种）：单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式\n- **结构型模式**（7种）：适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式\n- **行为型模式**（11种）：模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式\n\n\n\n## 5、23 种设计模式定义\n\n1. **单例模式**（Single Pattern）：某个类只能存在一个对象实例\n2. **工厂模式**（Factory Pattern）：由工厂对象决定创建出哪种产品类的实例\n3. **原型模式**（Prototype Pattern）：用原型实例指定创建对象种类，并通过拷贝原型创建新的对象\n4. **建造者模式 / 生成器模式**（Builder Pattern）：将复杂对象的建造过程抽象出来，使这个抽象过程的不同实现方法可以构造出不同表现（属性）的对象\n5. **适配器模式**（Adapter Pattern）：将某个类的接口转换成客户端期望的另一个接口表示\n6. **桥接模式**（Bridge Pattern）：将实现与抽象分离，放在两个不同的类层次中，可以独立改变\n7. **装饰者模式**（Decorator Pattern）：动态地将新功能附加到对象上\n8. **组合模式 / 部分整体模式**（Composite Pattern）：依据树形结构来组合对象，用来表示部分以及整体层次\n9. **外观模式 / 过程模式**（Facade Pattern）：为调用端提供统一的调用接口\n10. **享元模式 / 蝇量模式**（Flyweight Pattern）：运用共享技术有效地支持大量细粒度的对象\n11. **代理模式**（Proxy Pattern）：通过代理对象访问目标对象\n12. **模板模式 / 模板方法模式**（Template Method Pattern）：定义一个操作中的算法骨架，将一些步骤延迟到子类中\n13. **命令模式**（Command Pattern）：将发起请求的对象与执行请求的对象解耦\n14. **访问者模式**（Visitor Pattern）：将数据结构与数据操作分离\n15. **迭代器模式**（Iterator Pattern）：提供一种遍历集合元素的统一接口，用一致的方法遍历集合元素\n16. **观察者模式**（Observer Pattern）：对象之间多对一依赖的一种设计方案\n17. **中介者模式**（Mediator Pattern）：用一个中介对象来封装一系列的对象交互\n18. **备忘录模式**（Memento Pattern）：在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态\n19. **解释器模式**（Interpreter Pattern）：给定一个语言并定义其文法表示，使用该解释器来解释语言中的句子\n20. **状态模式**（State Pattern）：解决对象在多种状态转换时，需要对外输出不同的行为的问题\n21. **策略模式**（Strategy Pattern）：定义算法族，分别封装起来，让他们之间可以互相替换\n22. **职责链模式 / 责任链模式**（Chain of Responsibility Pattern）：为请求创建一个接收者对象的链\n\n\n\n## 6、23种设计模式举例、源码及优缺点\n\n| 分类   | 设计模式   | 举例             | 源码                                  | 优点               | 缺点                                       |\n| :----- | :--------- | :--------------- | :------------------------------------ | :----------------- | ------------------------------------------ |\n| 创建型 | 单例模式   | `Singleton`      | JDK 中`java.lang.Runtime`             | 节省资源，提高性能 |                                            |\n| ~      | 工厂模式   | 披萨店           | JDK 中`Calendar`                      | 统一管理，便于维护 |                                            |\n| ~      | 原型模式   | 克隆羊           | Spring 中`ApplicationContext`         | 简化过程，提高效率 | \u003cfont color='red'\u003e复杂\u003c/font\u003e；违背 OCP    |\n| ~      | 建造者模式 | 盖房子           | JDK 中`StringBuilder`                 | 解耦创建过程       |                                            |\n| 结构型 | 适配器模式 | 插座             | SpringMVC 中`HandlerAdapter`          | 兼容性             |                                            |\n| ~      | 桥接模式   | 手机             | JDBC 中`Driver`                       | 分离抽象与实现     |                                            |\n| ~      | 装饰者模式 | 星巴克咖啡       | JDK 中`FilterlnputStream`             | 动态扩展功能       |                                            |\n| ~      | 组合模式   | 学校院系         | JDK 中`HashMap`                       | 明确部分与整体层次 |                                            |\n| ~      | 外观模式   | 影院管理         | MyBatis 中`Configuration`             | 屏蔽细节，简化操作 | \u003cfont color='orange'\u003e过多不利于维护\u003c/font\u003e |\n| ~      | 享元模式   | 网站展示         | JDK 中`Integer`                       | 降低内存，提高效率 | \u003cfont color='red'\u003e复杂\u003c/font\u003e              |\n| ~      | 代理模式   | 教师教书         | JDK 中`Proxy`                         | 扩展功能，更加安全 |                                            |\n| 行为型 | 模板模式   | 豆浆制作         | Spring 中`AbstractApplicationContext` | 统一算法，代码复用 | \u003cfont color='orange'\u003e过多不利于维护\u003c/font\u003e |\n| ~      | 命令模式   | 智能生活         | Spring 中`JdbcTemplate`               | 解耦请求发起与执行 | \u003cfont color='red'\u003e复杂\u003c/font\u003e              |\n| ~      | 访问者模式 | 测评系统         |                                       | 解耦数据结构与操作 | 违背迪米特、依赖倒转                       |\n| ~      | 迭代器模式 | 学校院系         | JDK 中`ArrayList`                     | 统一遍历           | \u003cfont color='orange'\u003e过多不利于维护\u003c/font\u003e |\n| ~      | 观察者模式 | 天气预报         | JDK 中`Observable`                    | 动态添加三方       |                                            |\n| ~      | 中介者模式 | 智能家庭         |                                       | 封装交互           | \u003cfont color='red'\u003e复杂\u003c/font\u003e              |\n| ~      | 备忘录模式 | 游戏角色状态恢复 |                                       | 方便恢复状态       | 占用资源，消耗内存                         |\n| ~      | 解释器模式 | 四则运算         | Spring 中`SpelExpressionParser`       | 可扩展性           | 调试复杂；效率低                           |\n| ~      | 状态模式   | APP 抽奖         | 借贷平台                              | 分离状态           | \u003cfont color='orange'\u003e过多不利于维护\u003c/font\u003e |\n| ~      | 策略模式   | 鸭子             | JDK 中`Comparator`                    | 分离不变与变化     | \u003cfont color='orange'\u003e过多不利于维护\u003c/font\u003e |\n| ~      | 职责链模式 | 采购审批         | SpringMVC 中`HandlerExecutionChain`   | 分离请求与处理     | 调试复杂；影响性能                         |\n\n\n\n整理难免有误，欢迎大家批评指正！\n\n---\n\n\u003e 署名 4.0 国际 (CC BY 4.0)。您可以自由地：共享 — 在任何媒介以任何形式复制、发行本作品；演绎 — 修改、转换或以本作品为基础进行创作；在任何用途下，甚至商业目的。只要你遵守许可协议条款，许可人就无法收回你的这些权利。惟须遵守下列条件：署名 — 您必须给出适当的署名，提供指向本许可协议的链接，同时标明是否（对原始作品）作了修改。您可以用任何合理的方式来署名，但是不得以任何方式暗示许可人为您或您的使用背书。\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvectorxxxx%2Fnote_designpatterns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvectorxxxx%2Fnote_designpatterns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvectorxxxx%2Fnote_designpatterns/lists"}