首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式的类别

设计模式的类别主要包括三种:创建型模式、结构型模式和行为型模式。

  1. 创建型模式:这类模式主要关注对象的创建和初始化过程。它们的目的是在隐藏对象创建细节的同时,为客户端提供一个优雅的接口。
  • 单例模式(Singleton):确保一个类仅有一个实例,并提供一个全局访问点。
  • 原型模式(Prototype):使用原型对象创建新对象,并通过复制这个原型对象来避免创建过程中的约束来达到一个高性能的对象创建。
  • 简单工厂模式(Simple Factory):通过一个共同的接口来创建新实例,而不是显式地实例化对象。
  • 工厂方法模式(Factory Method):定义一个创建对象的接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类。
  • 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的一组对象,而无需指定它们具体的类。
  1. 结构型模式:这类模式用于设计类和对象之间的组织和关系。
  • 适配器模式(Adapter):将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
  • 桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以独立运行。
  • 装饰器模式(Decorator):动态地给一个对象添加一些额外的职责。就增加职责来说,装饰器模式比生成子类更为灵活。
  • 组合模式(Composite):将一组对象构造成树形结构以表示“整体/部分”的层次关系。组合模式使得客户对单个对象和组合对象有一致的使用。
  • 外观模式(Facade):为子系统中的一组接口提供一个一致的界面,外观模式定义一个高层接口,让系统更容易使用。
  • 享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。
  • 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。
  1. 行为型模式:这类模式专注于对象之间的交互和通信。
  • 策略模式(Strategy):定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。使得算法可独立于使用它的客户而变化。
  • 模板方法模式(Template Method):定义一个操作中算法的骨架,将一些步骤延迟到子类中。模板方法模式使得子类可以重新定义算法的某些步骤而无需改变算法的结构。
  • 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
  • 迭代器模式(Iterator):提供一个方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
  • 责任链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
  • 命令模式(Command):将一个请求或者操作封装成一个对象,从而使你可以用不同的请求对客户进行参数化; 对请求进行排队或者记录请求日志,以及支持可撤销的操作。
  • 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
  • 状态模式(State):允许对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的行为。
  • 解释器模式(Interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
  • 中介者模式(Mediator):定义一个中介
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

组合模式实例商品类别树

1.题目: 有一个根节点,比如“服装”,它没有父节点,它可以包含其他的节点。 树枝节点,有一类节点可以包含其他的节点,称之为树枝节点,比如“男装”、“女装”和“母婴”。...如果碰到类似上面这种,需使用对象树来描述或实现的功能,都可以考虑使用组合模式,比如读取XML文件,或是对语句进行语法解析等。...2.UML图 3.代码 package 组合模式; public abstract class Cloth { protected String name; public Cloth(String...Cloth c); public abstract void Remove(Cloth c); public abstract void display(String str); } package 组合模式...Override public void display(String str) { str+="-"; System.out.println(str+name); } } package 组合模式

24620

【设计模式】汉堡中的设计模式——策略模式

目录 【设计模式】汉堡中的设计模式——策略模式 每章一句 前言 情景带入 开始分析 策略模式 尝试编码 如果我要新添加一种形式呢?...games 前言 哈喽,大家好,今天要分享的知识点是关于策略模式的使用,观看本文章可能需要耗费【8】分钟,通过本文,你可以认识到以下几个知识点 什么是策略模式 针对策略模式的局限,又有哪些解决办法 枚举策略了解一下...,这样做的好处就是实现客户端(真正的调用方)与具体实现间的解耦,如下图所示 所以,根据设计,我们把代码给敲一下 首先是顶层接口代码 然后是各个具体算法的实现 Context代码 客户端调用情况...这里引用我在看《Head First 设计模式》中看到的一段话,他的意思是 设计模式的定义告诉我们,问题包含了一个目标和一组约束;光明的方向就是你的目标,黑暗的方向就是这些约束 光明与黑暗总是相伴而生,...if-else情况 原来的设计不变,把Context给替换成HandlerFactory,通过静态方法返回信息,这里为了更加贴合实际,定义了两个VO对象 简单工厂 最终客户端调用 使用postman

84200
  • 『设计模式』设计模式--策略模式

    策略模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。...策略模式相当于"可插入式(Pluggable)的算法"。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。...策略模式和简单工厂模式的结合:把分支判断放到环境角色中。...if-else语句来选择这些行为的情况,可以使用策略模式来代替这些条件语句 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。...模式讲解 策略模式功能:把具体算法从具体业务处理中独立 策略模式与if-else语句:多个if-else出现考虑使用策略模式 算法的平等性:策略算法是形同行为的不同实现 谁来选择具体策略算法:客户端

    2.1K20

    设计模式 -- 常用设计模式

    设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns)                                   ——可复用面向对象软件的基础...设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。...使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。...设计模式分类 经典的《设计模式》一书归纳出23种设计模式,这23种模式又可归为,创建型、结构型和行为型3大类 2.1.创建型模式 前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势...工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    2.1K21

    设计模式 | 必备的责任链设计模式

    责任链设计模式中的角色 Handler 抽象处理者(定义一个处理请求的接口,接口可以定义出一个方法,以设定和返回对下家的引用。...具体处理者持有下家对象的引用) Client 客户端(调用者) 责任链设计模式类图 ?...责任链模式的结构其实和链表很类似,存在的区别就是责任链模式中所有的对象都有一个共同的父类( 或接口 ): ? 在责任链模式中,N 个 Handler 子类都处理同一个请求,只不过具体的职责有所差别。...责任链设计模式在Spring、Dubbo、Mybatis等框架中也有大量的应用。 总结 责任链模式经常用于过滤器,拦截器,事件( 鼠标键盘事件,冒泡事件等 )等场景。...GOF23种设计模式类型、描述和类图(上) GOF23种设计模式类型、描述和类图(中) GOF23种设计模式类型、描述和类图(下) 【文章汇总】设计模式篇 Java中的门面设计模式及如何用代码实现

    1.3K10

    『设计模式』设计模式--模板方法模式

    -----------------------------------------------------------------深入浅出的设计模式 模板方法模式(Template Method...模板方法模式是基于继承的代码复用的基本技术,模板方法模式的结构和用法也是面向对象设计的核心。...模板方法的本质:抽象封装流程,具体进行实现 模版方法模式需要开发抽象类和具体子类的设计师之间的协作。 一个设计师负责给出一个算法的轮廓和骨架 另一些设计师则负责给出这个算法的各个逻辑步骤。...多个子类有公有的方法,并且逻辑基本相同时; 重要,复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现; 重构时,模板方法模式 是一个经常使用的模式,把相同的代码抽取到父类,然后通过钩子函数约束其行为...最后,设计模式给出的是一种设计框架,而不是条条框框,你需要用的是他真正优秀的地方! 开发实例 ?

    1.2K20

    『设计模式』设计模式--原型模式

    1.概念: 原型模式(Prototype Pattern)是通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类对象,同时又能保证性能而且不需要知道内部细节。...这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。...IClonabe接口中有一Clone方法,可以在类中复写,实现自定义的克隆方法。 原型模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些"易变类"拥有稳定的接口。...类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。 性能和安全要求的场景。 通过 new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。 一个对象多个修改者的场景。...在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过 clone 的方法创建一个对象,然后由工厂方法提供给调用者。原型模式已经与 Java 融为浑然一体,大家可以随手拿来使用。

    1.2K50

    面向对象设计的设计模式(十四):策略模式

    其实我们可以定义一些独立的类来封装不同的解决方案,每一个类封装一个具体的方案,这些不同的方案就是我们所说的策略。而且我们可以用一个抽象的策略类来保证这些策略的一致性,这就是策略模式的设计方案。...现在我们清楚了策略模式的适用场景,下面看一下策略模式的成员和类图。...模式类图 ? 策略模式类图 代码示例 场景概述 模拟一个两个整数可以随意替换加减乘除算法的场景。...策略模式代码示例类图 优点 策略模式遵循开闭原则,用户可以在不修改原有系统的前提下选择和更换算法 避免使用多重条件判断 可以灵活地增加新的算法或行为 提高算法和策略的安全性:可以封装策略的具体实现,调用者只需要知道不同策略之间的区别就可以...iOS SDK 和 JDK中的应用 JDK中的Comparator是策略模式的实现,可以使用不同的子类,也就是具体策略来解决不同的需求。

    1K20

    java设计模式之工厂模式【设计模式】

    工厂模式: 这里用百度百科的词条来解释: 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。...著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象。...在我们java生态中,spring对工厂模式运用的可算是极致了,顶级类BeanFactory是bean的最顶级的工厂类... 在这里,我模拟一下工厂模式: 先说一下工厂模式需要的角色: 机器?...试想,天下的面条种类那么多,工厂模式是非常容易扩展的,实现思路即java的“多态” 这里,就已经实现了一个简单的工厂模式,即简单工厂模式 当你的宝马机器生产宝马的时候,这个时候只需要拓展Machine类即可...,这个时候Machine类作为工厂模式的一个标准(即类似于BeanFactory) 生产宝马流程与面条一样: package com.example.demo.core.design; /** *

    86140

    面向对象设计的设计模式(七):外观模式

    定义 外观模式(Facade Pattern):外观模式定义了一个高层接口,为子系统中的一组接口提供一个统一的接口。外观模式又称为门面模式,它是一种结构型设计模式模式。...封装子系统的接口并提供给客户端 子系统类(SubSystem):子系统类实现子系统的功能,对外观类一无所知 下面通过类图来看一下各个成员之间的关系: 模式类图 外观模式类图 上图中的method1&2(...比如: 假设我们可以用遥控器直接开启热风,那么实际上就是两个步骤: 开启空调 空调切换为热风模式 我们把这两个步骤用一个操作包含起来,一步到位。像这样简化操作步骤的场景比较适合用外观模式。...因此,这些设备可以看做是该智能家居系统的子系统;而这个遥控器则扮演的是外观类的角色。 下面我们用代码来看一下如何实现这些设计。...而投影仪只能连接DVD Player 现在我们把所有的家用电器类和他们的接口都定义好了,下面我们看一下该实例的外观类HomeDeviceManager如何设计。

    91610

    visitor设计模式ppt_常用的设计模式

    大家好,又见面了,我是你们的朋友全栈君。 动机 Visitor是访问者的意思。 数据结构中保存着元素。一般我们需要对元素进行处理,那么处理元素的代码放在哪里呢?...最显然的方法就是放在数据结构的类中,在类中添加处理的方法。但是如果有很多处理,就比较麻烦了,每当增加一种处理,我们就不得不去修改表示数据结构的类。...visitor模式就是用来解决这个问题的,visitor模式将数据结构的定义和处理分离开。...也就是会新增一个访问者的类,将数据元素的处理交给访问者类,这样以后要新增处理的时候,只需要新增访问者就可以了。...模式定义 将更新(变更)封装到一个类中(访问操作),并由待更改类提供一个接收接口,则可达到效果。

    24830

    面向对象设计的设计模式(十七):命令模式

    由定义可以看出,在命令模式中,命令被封装成了对象,而发送命令的客户端与处理命令的接收者中间被调用对象隔开了,这种设计的原因或者适用的场景是什么样的呢?...现在我们清楚了命令模式的适用场景,下面看一下命令模式的成员和类图。 成员与类图 成员 不包括请求的发起者(客户端),命令模式共有四个成员: 抽象命令类(Command):命令类负责声明命令的接口。...下面通过类图来看一下命令模式各个成员之间的关系: 模式类图 ?...命令模式代码示例类图 优点 将命令的发起者和命令的执行者分离,降低系统的耦合度 便于批量处理命令,比如日至队列的实现;便于命令的撤销或重试,比如网络请求等 缺点 需要针对每一个命令创建一个命令对象。...iOS SDK 和 JDK中的应用 在JDK中,java.lang.Runnable是使用命令模式的经典场景,Runnable接口可以作为抽象的命令,而实现了Runnable的线程即是具体的命令。

    69120

    设计模式--组合模式的思考

    ---- 组合模式是一种抽象树形结构的模式,其在业务开发中也是一种很有用的设计模式,下面开始分析.....那么组合模式的作用就是统一这三种类型的节点,让客户端当成一种节点来处理.下面是组合模式下的方式 组合设计 // 其为节点的约束,主要暴露给客户端,客户端不需要了解子类是什么. public abstract...组合体现在CompositeNode节点的设计,其内部引用的是Node抽象类实例,也就是可以一直往下延伸. 组合模式更多的是一种面向接口编程的思想,大多数日常开发中总会有意无意的使用了这种模式思想....Netty中的组合模式 Netty中的CompositeByteBuf使用了组合设计模式,但是其有点特殊,Netty所描述的零拷贝是应用层面上不做任意的数据复制,而是使用组合的方式拷贝,比如有两个Buf...那么这也是一种组合设计模式的思想,更可以说是一种妙用。

    94830

    设计模式--策略模式的思考

    ---- 策略模式是一种简单的设计模式,但是其在业务开发中是一种非常有用的设计模式.举个例子,当你的业务需要针对不同的场景(可以简单理解为枚举类),执行不同的策略时那么使用策略模式可以帮助你更好的写出低耦合与高可扩展的代码...new StrategyContext(new CouponStrategy()).sendPrize(uid, prize) 这是标准的策略模式,这种模式在如今的IOC下应用场景并不是很多,该模式有不少缺点...设计模式–观察者模式的思考 策略模式的本质 策略模式的本质是把复杂的算法从一个类中提取出来,用一种合理的方式管理起来,避免业务类的膨胀....与状态模式的关系 状态设计模式的类图结构与策略模式几乎是一致的.从逻辑上状态是平行的无法互相替换,但是策略与策略之间是可以完全替换的,只是实现方式的不同.在选择设计模式的时候是根据这一点来区分,代码上的体现是对于状态设计模式以...State结尾,对于策略设计模式以Strategy结尾,让开发人员第一眼看过去就能明白整个设计的思路最佳.

    75150

    设计模式--Builder模式的思考

    重叠构造器模式 重叠构造器模式在Java代码中很常见,其解决的问题是参数过多情况下又不想给调用方带来过多的实例化对象负担.在这种情况下调用方只需要选择一个适合自己的构造函数调用就好....工厂模式 工厂模式本意在于封装具体的创建流程,提供出简单便捷的入口,但是在多参数情况下其能改进的只是让实例化过程不再是一条直线,工厂中可以根据具体参数制造出Configuration及其子类.其本质与重叠构造器模式并没有太大的区别...,但是缺点也是很明显: 对象的创建过程被分解,按照意图,new的过程就是创建,剩下的一律不算创建,但这种模式下的创建实际上是两步,创建与填值....Builder模式 有句话说得好,遇到难以解决的问题就加一层中间层来代理抽象.Builder模式正式如此,对象本身创建麻烦,那么就使用一个代理对象来主导创建与检验,兼顾了重叠器模式的安全性以及JavaBean...模式的灵活性.

    75090

    java设计模式之代理模式【设计模式】

    先讲一个段子,有四个人物,分别是张三,我,张三老婆,日本某公司(自己脑补哈) 静态代理 张三想要去日本某公司买xxx,但是对于经费等等一系列的原因然后就放弃了这个念头,我刚好要去日本玩的,张三得知我要去日本...,他就偷偷给我说,他想要一个size为D的xxx,让我帮他代购一个,于是我就带着他的需求去日本某公司购入了xxx,然后买完之后回国拿给了张三。...在这个过程中,我作为代理对象(我带着张三的需求【购买的动作即为接口,他的需求即为方法和参数】),张三作为被代理对象。我帮他购买这个过程就叫做代理。...又有一个环境,即当张三的老婆也需要女性的xxx,也偷偷的让我代购,那么我又要亲自过去帮她买,但是想想,我作为一个d代理,一会儿帮这个买,一会儿帮那个买,每次买的东西还不一样,想想,如果作为代码写成一个系统代码是不是会非常的多...动态代理 我开了一家代购公司,张三联系到我们公司,我们公司的A员工刚好要去日本做代购,于是带着他的需求去代购了,张三老婆也要买日本的另外一款产品,B员工帮他去代购了,这样的代理对象永远都是动态的(Proxy.newInstance

    68430

    模式的模式:从设计模式到元模式

    除了设计模式之外,我们所处的行业还有大量的其它模式: 容器设计模式。...设计模式的组织 在《设计模式》一书中,引入的概念是『设计模式空间』,在这里它们被分为了三大类: 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。...在 《领域驱动设计》 一书以多种形式组织了模式,依次的四个部分是(PS:个人临时总结): 运用领域模型 —— 『模型知识提取的模式』 模型驱动设计的构造块 —— 『模型设计的模式』 通过重构来加深理解...如何对现有的模式进行一些抽象。 对于『模式的模式』的理解,有助于我们更好地理解好设计模式。对于设计模式的理解之后,只需要理解其背后的模式,就不需要再去熟记每个设计模式。...所以,我们就来到了元素模式,依据的它也是来自于一本书《元素模式》。 元素模式:设计模式的模式 模式是来源于对惯用法的总结,而诸如于元素模式则是对于设计模式的提取,即模式中的模式。

    75910
    领券