There are certain universal laws and principles in software development that guide architects, programmers, and anyone needing to design software. This page lists quite a few of those principles, although it's far from complete. This page is a fork of programming-principles repository by Lars Kappert, who has done most of the work collecting the material.
- Abstract Document
- Abstract Factory
- Active Object
- Acyclic Visitor
- Adapter
- Aggregator Microservices
- Ambassador
- API Gateway
- Arrange/Act/Assert
- Async Method Invocation
- Balking
- Bridge
- Builder
- Business Delegate
- Bytecode
- Caching
- Callback
- Chain of responsibility
- Circuit Breaker
- Static Content Hosting
- Collection Pipeline
- Combinator
- Command
- Commander
- Composite
- Composite Entity
- Converter
- Curiously Recurring Template Pattern
- Data Access Object
- Data Bus
- Data Mapper
- Data Transfer Object
- Decorator
- Delegation
- Dependency Injection
- Dirty Flag
- Double Checked Locking
- Facade
- Factory
- Factory Kit
- Factory Method
- Interpreter
- Iterator
- Monitor
- Observer
- Private Class Data
- Producer Consumer
- Proxy
- Servant
- Sharding
- Singleton
- State
- Step Builder
- Strategy
- Table Module
- Template method
- Trampoline
- Unit Of Work
- Update Method
- Value Object
- Version Number
- Visitor
目的
使用动态属性,并在保持类型安全的同时实现非类型化语言的灵活性。
解释
抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全,并将不同类的属性分离为一组接口。
真实世界例子
考虑由多个部分组成的汽车。 但是,我们不知道特定汽车是否真的拥有所有零件,或者仅仅是零件中的一部分。 我们的汽车是动态而且非常灵活的。
通俗的说
抽象文档模式允许在对象不知道的情况下将属性附加到对象。
或称
工具包
目的
提供一个用于创建相关对象家族的接口,而无需指定其具体类。
解释
真实世界例子
要创建一个王国,我们需要具有共同主题的对象。精灵王国需要精灵国王、精灵城堡和精灵军队,而兽人王国需要兽人国王、兽人城堡和兽人军队。王国中的对象之间存在依赖关系。
通俗的说
工厂的工厂; 一个将单个但相关/从属的工厂分组在一起而没有指定其具体类别的工厂。
维基百科上说
目的
活动对象设计模式使每个驻留在其控制线程中的对象的方法执行与方法调用脱钩。 目的是通过使用异步方法调用和用于处理请求的调度程序来引入并发。
解释
实现活动对象模式的类将包含自同步机制,而无需使用“同步”方法。
真实世界例子
兽人以其野性和顽强的灵魂而著称。 似乎他们有基于先前行为的控制线程。
要实现具有自己的控制机制线程并仅公开其API而不公开自己的执行,我们可以使用活动对象模式。
程序示例
目的
允许将新功能添加到现有的类层次结构中,而不会影响这些层次结构,也不会有四人帮访客模式中那样循环依赖的问题。
解释
真实世界例子
我们有一个调制解调器类的层次结构。 需要使用基于过滤条件的外部算法(是Unix或DOS兼容的调制解调器)来访问此层次结构中的调制解调器。
通俗地说
非循环访问者允许将功能添加到现有的类层次结构中,而无需修改层次结构
WikiWikiWeb 上说
又被称为
包装器
目的
将一个接口转换成另一个客户所期望的接口。适配器让那些本来因为接口不兼容的类可以合作无间。
解释
现实世界例子
考虑有这么一种情况,在你的存储卡中有一些照片,你想将其传到你的电脑中。为了传送数据,你需要某种能够兼容你电脑接口的适配器以便你的储存卡能连上你的电脑。在这种情况下,读卡器就是一个适配器。
另一个例子就是注明的电源适配器;三脚插头不能插在两脚插座上,需要一个电源适配器来使其能够插在两脚插座上。
还有一个例子就是翻译官,他翻译一个人对另一个人说的话。
意图
用户对聚合器服务进行一次调用,然后聚合器将调用每个相关的微服务。
解释
真实世界例子
我们的网络市场需要有关产品及其当前库存的信息。 它调用聚合服务,聚合服务依次调用产品信息微服务和产品库存微服务,返回组合信息。
通俗地说
聚合器微服务从各种微服务中收集数据,并返回一个聚合数据以进行处理。
Stack Overflow上说
聚合器微服务调用多个服务以实现应用程序所需的功能。
目的
在客户端上提供帮助程序服务实例,并从共享资源上转移常用功能。
解释
真实世界例子
远程服务有许多客户端访问它提供的功能。 该服务是旧版应用程序,无法更新。 用户的大量请求导致连接问题。新的请求频率规则需要同时实现延迟检测和客户端日志功能。
通俗的说
使用“大使”模式,我们可以实现来自客户端的频率较低的轮询以及延迟检查和日志记录。
微软文档做了如下阐述
可以将大使服务视为与客户端位于同一位置的进程外代理。 此模式对于以语言不可知的方式减轻常见的客户端连接任务(例如监视,日志记录,路由,安全性(如TLS)和弹性模式)的工作很有用。 它通常与旧版应用程序或其他难以修改的应用程序一起使用,以扩展其网络功能。 它还可以使专业团队实现这些功能。