设计模式 | 描述 | 使用场景 | 链接 |
单例模式(Singleton Pattern) | 它属于创建型模式,保证一个类只有一个实例,并提供一个全局访问点。 | 需要频繁创建和销毁对象时,或者需要控制资源的共享访问时。例如数据库连接池、线程池等。 | 中文 EN |
抽象工厂模式 (Abstract Factory Pattern) | 它属于创建型模式,是一个超级工厂,用来创建其他工厂。这个工厂也被称为工厂的工厂。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。 | 抽象工厂模式适用于当需要创建一系列相互依赖或相关的对象时,而且不想指定它们具体的类。例如,当需要创建一个跨平台的GUI组件时,可以使用抽象工厂模式来创建不同平台下的按钮、文本框等组件5。 | 中文 EN |
原型模式 (Prototype Pattern) | 它属于创建型模式,通过复制现有的实例来创建新的实例。 | 需要创建大量相同或相似的对象时,或者对象的创建过程比较复杂或耗时时。例如游戏中的角色、图形编辑器中的图形等。 | 中文 EN |
建造者模式 (Builder Pattern) | 它属于创建型模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 | 需要生成具有多个部件或属性的复杂对象时,或者需要根据不同需求组合不同部件或属性时。例如电脑、汽车等产品及其组装过程。 | 中文 EN |
工厂方法模式 (Factory Method Pattern ) | 它属于创建型模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 | 需要创建一系列相互依赖或相关的对象时,或者需要根据不同条件或环境创建不同类型的对象时。例如日志记录器、数据库访问器等。 | 中文 EN |
适配器模式 (Adapter Pattern) | 它属于结构型模式,将一个类的接口转换成客户希望的另外一个接口,使原本不兼容的类可以一起工作。 | 当需要使用一个现有的类而其接口不符合需求时; 当需要复用一些已存在的子类而不需要修改它们时; 当需要将多个组件统一到一个接口下时。 | 中文 EN |
桥接模式 (Bridge Pattern) | 它属于结构型模式,将抽象部分与实现部分分离,使它们都可以独立地变化。 | 当一个类存在两个独立变化的维度时,且这两个维度都需要进行扩展时。例如:图形既可按形状分,又可按颜色分。 | 中文 EN |
装饰模式 (Decorator Pattern) | 它属于结构型模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 | 当需要给一个现有的类添加附加职责,而又不能采用继承的方式时; 当需要动态地给一个对象增加功能,并且能够动态地撤销时。 | 中文 EN |
组合模式 (Composite Pattern) | 它属于结构型模式,将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 | 当需要表示对象的部分-整体层次结构时; 当需要通过一个统一的接口操作树形结构中的每个对象时。 | 中文 EN |
外观模式 (Facade Pattern) | 它属于结构型模式,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 | 当要为一个复杂子系统提供一个简单接口时; 当客户端与多个子系统之间存在很大依赖性时; 当需要构建一个层次结构的子系统时,可以使用外观模式定义子系统中每层级别上所需功能。 | 中文 EN |
享元模式 (Flyweight Pattern) | 它属于结构型模式,运用共享技术有效地支持大量细粒度的对象。 | 当一个应用程序使用了大量相似或相同对象时; 当由于使用大量对象导致很大内存开销时; 当对象有很多不变属性而且可以共享出来时。 | 中文 EN |
代理模式 (Proxy Pattern) | 它属于结构型模式,为其他对象提供一种代理以控制对这个对象的访问。 | 当需要为一个对象提供访问控制时;当需要在访问一个对象时执行一些附加操作时; 当需要使用远程代理、虚拟代理、保护代理、缓存代理等时。 | 中文 EN |
模版方法模式 (Template Pattern) | 它属于行为型模式,为定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 | 当有一些通用的方法,并且逻辑相同,只是细节上有差异时; 当需要控制子类扩展时。 | 中文 EN |
命令模式 (Command Pattern) | 它属于行为型模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。 | 当需要将发出请求的对象和执行请求的对象解耦时; 当需要支持命令的撤销和恢复功能时; 当需要将一组操作组合成一个命令时。 | 中文 EN |
访问者模式 (Visitor Pattern) | 它属于行为型模式,封装一些作用于某种数据结构中各元素的操作,它可以在不改变数据结构前提下定义作用于这些元素新操作。 | 当需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联)时;当对象结构中对象对应类很少改变时。 | 中文 EN |
迭代器模式 (Iterator Pattern) | 它属于行为型模式,提供一种方法顺序访问一个聚合对象中各个元素, 而又无需暴露该对象内部表示。 | 当需要为聚合对象提供多种遍历方式时;当需要为遍历不同聚合结构提供统一接口时。 | 中文 EN |
观察者模式 (Observer Pattern) | 它属于行为型模式,定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。 | 当一个对象的改变需要同时改变其他对象时; 当一个对象必须通知其他对象时;当需要实现发布-订阅模式时。 | 中文 EN |
中介者模式 (Mediator Pattern) | 它属于行为型模式,用一个中介对象来封装一系列的对象交互,使各个对象不需要显式地相互引用,从而降低其耦合度。 | 当对象之间存在复杂的网状结构关系时;当想创建一个运行于多个类之间的对象,又不想生成新的子类时。 | 中文 EN |
备忘录模式 (Memento Pattern) | 它属于行为型模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 | 当需要保存和恢复数据相关状态时;当提供一个可回滚操作时。 | 中文 EN |
解释器模式 (Interpreter Pattern) | 它属于行为型模式,给定一个语言,定义它的文法表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。 | 当有一种特定类型问题发生频率足够高时;当需要构建一个专门处理某种语言或表达式文法规则时。 | 中文 EN |
状态模式 (State Pattern) | 它属于行为型模式,允许一个对象在其内部状态改变时改变它的行为,使对象看起来似乎修改了它的类。 | 当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时; 当一个操作中含有庞大的多分支结构语句时。 | 中文 EN |
策略模式 (Strategy Pattern) | 它属于行为型模式,定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。 | 当有多种算法或策略可供选择,且可以动态切换时; 当需要屏蔽算法或策略具体实现细节时;当存在多重条件语句时。 | 中文 EN |
责任链模式 (Chain of Responsibility Pattern) | 它属于行为型模式,为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。 | 当有多个对象可以处理同一请求,但具体由哪个对象处理该请求由运行时判断决定时; 当不明确指定请求处理者时; 当想动态地指定请求处理者集合时。 | 中文 EN |
详细请见下表:
请关注点赞,有您支持,我更努力!