![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
设计模式的学习总结
起个名字好难__
这个作者很懒,什么都没留下…
展开
-
Java设计模式——行为型模式:职责链模式(责任链模式)
在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度模式定义为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。在责任链模式中,客户原创 2020-10-20 09:36:43 · 114 阅读 · 0 评论 -
Java设计模式——行为型模式:模板方法模式
例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。模式定义定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。模式结构模板方法模式需要注意抽象类与具体子类之间的协作。它用到了虚函数的多态性技术以及“不用调原创 2020-10-18 23:08:01 · 882 阅读 · 0 评论 -
Java设计模式——创建型模式:原型模式(克隆模式)
模式定义原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。模式介绍动机:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。优点:1、性能提高。 2、逃避构造函数的约束。缺点: 1、配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别原创 2020-10-18 22:39:36 · 114 阅读 · 0 评论 -
Java设计模式——结构型模式:组合模式
模式定义组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。动机: 将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。模式介绍主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户原创 2020-10-17 23:47:17 · 142 阅读 · 0 评论 -
Java设计模式——行为型模型:迭代器模式
模式定义迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。模式介绍主要解决:不同的方式来遍历整个整合对象。何时使用:遍历一个聚合对象。如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。关键代码:定义接口:hasNext, next。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码原创 2020-10-17 23:00:46 · 82 阅读 · 0 评论 -
Java设计模式——行为型模式:策略模式(政策模式)
模式动机完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。定义一些独立的类来封装不同的算法,每一个类封装一个具体的算法,在这里,每一个封装算法的类我们都可以称之为策略(Strategy),为了保证这些策略的一致性,一般会用一个抽象的策略类来做算法的定义,而具体每种算法则对应于一个具体策原创 2020-10-15 23:06:21 · 122 阅读 · 0 评论 -
Java设计模式——行为型模式:状态模式
模式动机在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。模式定义允许一个对象在其内部状态状态改变时,改变它的行为,对象看起来似乎修改了它的类。模式结构状态模式包含如下角色:Context: 环境类State: 抽象状态类ConcreteState: 具体状态类时序图状态图如下:代码实现//抽象状态类public interface State {原创 2020-10-15 22:39:16 · 90 阅读 · 0 评论 -
Java设计模式—行为型模式:观察者模式
模式动机建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将作出相应反应。在此,发生改变的目标称为观察目标,被通知的对象称为观察者。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系。模式定义定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(D原创 2020-10-14 22:47:08 · 73 阅读 · 0 评论 -
Java设计模式——行为模式:中介者模式(调停者模式)
模式动机在面向对象的软件设计与开发中,根据“单一职责原则”,我们应尽量将对象细化,使其值负责或呈现单一职责。对于一个模块,可能由很多对象构成,而且这些对象之间可能存在相互引用,为了减少对象两两之间的复杂引用关系,使之成为一个松耦合系统,这就是中介者模式的模式动机。模式定义用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。模式结构中介者模式包含如下角色:Mediator原创 2020-10-14 09:30:49 · 126 阅读 · 0 评论 -
Java设计模式——行为模式:命令模式(动作模式或事务模式)
模式动机在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接受者是谁,也不知道被请求的操作时哪个,我们只需要在程序运行时指定具体的请求接受者即可,此时可以使用命令模式进行设计。命令模式可以去发送者和接受者完全解耦,发送者与接收者之间没有直接的引用关系,发送请求的对象只需要知道如何发送请求,不必知道如何完成请求。模式定义将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Acti原创 2020-10-13 22:40:07 · 304 阅读 · 0 评论 -
Java设计模式——结构型模式:代理模式
模式动机在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。模式定义给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。模式结构代理模式包含如下角色:Subject: 抽象主题角色Proxy: 代理主题角色RealSubj原创 2020-10-12 22:14:49 · 94 阅读 · 0 评论 -
Java设计模式——结构型模式:外观模式(门面模式)
模式动机模式定义外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。模式结构外观模式包含如下角色:Facade: 外观角色SubSystem:子系统角色时序图代码实现//子系统public class CPU { public void startup(){ System.out.println("cpu原创 2020-10-12 21:36:08 · 84 阅读 · 0 评论 -
Java设计模式——结构型模式:装饰模式(油漆工模式)
模式动机一般有两种方式可以给一个类或者对象增加行为:继承机制,常用不做解释关联机制,即将一个类的对象嵌入到另一个对象中,由另一个对象决定是否调用嵌入对象的行为来扩展自己的行为,我们称这个接入嵌入对象的类为装饰器。装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任,换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。模式定义动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式原创 2020-10-11 14:44:08 · 279 阅读 · 0 评论 -
Java设计模式——结构型模式:桥接模式(接口模式或柄体模式)
模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方案是为每一种形状都提供一套各种颜色的版本(4x3种版本)。第二种设计方案是根据实际需要对形状和颜色进行组合(4个形状版本加3个颜色版本)对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥接模式的应用。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的原创 2020-10-10 22:31:53 · 165 阅读 · 0 评论 -
Java设计模式——结构型模式:适配器模式
模式动机通常情况下,客户端可以通过目标类的接口访问它所提供的服务,但是可能存在目标类满足客户功能,提供的接口不一定是客户端所需要的,这可能是由于现有类中的方法名与目标类中定义的方法名不一致等原因导致的。适配器模式可以提供一个包装类,包装不兼容的接口对象,这个包装类就是适配器,它所包装的对象就是适配者,即被适配的类。当客户类调用适配器的方法时,在适配器类的内部将调用适配者类的方法,而这个过程对客户类是透明的,客户类并不直接访问适配者类。因此,适配器可以使由于接口不兼容而不能交互的类可以一起工作。这就是适原创 2020-10-10 21:35:03 · 182 阅读 · 0 评论 -
Java设计模式(五):单例模式(单件模式或单态模式)
模式动机对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但只能有一个正在工作的任务。保证一个类只有一个实例对象就是单例模式的动机。一个好的解决方法是,让类负责保存它唯一的实例,这个类可以保证没有其他实例被创建,并且可以提供一个访问该实例的方法。模式定义单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局的方法。单例模式的三大要点:某个类只能有一个实例这个类必须自行创建这个实例该类必须自行向整个系统提供这个实例原创 2020-10-10 12:45:45 · 166 阅读 · 0 评论 -
Java设计模式(四):建造者模式(生成器模式)
模式动机在现实生活中存在一些复杂的产品,如汽车,它有方向盘、轮胎、发动机灯组件构造而成,但是用户无需知道各个组件的生产过程与具体的构造过程,只需要最后得到一个汽车即可。在软件设计中,也有一些复杂的对象,它拥有一系列成员属性。复杂对象相当于一辆汽车,对象的属性则相当于汽车的部件,建造产品的过程相当于组合部件的过程。由于这个过程过于复杂,因此这些部件的组合过程往往被外部化到一个称为建造者的对象中,建造者将建造完毕的复杂对象返回给客户端。用户无需关心该对象所包含的属性以及他们的组装方式,这就是建造者模式的模式原创 2020-10-08 23:20:16 · 237 阅读 · 0 评论 -
Java设计模式(三):抽象工厂模式
模式动机在工厂方法模式中,具体工厂生产具体产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性。一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法,但是有时我们需要一个具体工厂方法提供多个产品对象,而不是单一的产品对象。为了更清晰地理解工厂方法模式,需要先引入两个概念:产品等级结构 :产品等级结构即产品的继承结构。例如抽象类电视机,其子类有海尔电视机、海信电视机,此时抽象类电视与具体类电视机构成一个产品等级结构。产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,属于不同产原创 2020-10-07 23:34:10 · 67 阅读 · 0 评论 -
Java设计模式(二):工厂方法模式
模式动机在上文中,我们了解到简单工厂模式的动机,优点与缺点。简单工厂模式中,工厂类担负的责任过重,如果要新增具体产品就必须对工厂类进行重新实现,没有满足开闭原则。在工厂方法中,创建了工厂的抽象类,当需要新增具体产品时,只需要针对相应的具体产品新增对应的工厂类即刻。模式定义工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中原创 2020-10-07 21:59:23 · 1221 阅读 · 0 评论 -
Java设计模式(一):简单工厂模式
简单工厂模式模式动机一个软件系统可以有多个不同形状的外观,如圆形方形菱形等,这些形状的按钮都继承于一个基类。如果我们在定义这些按钮时,不需要知道按钮类的名称,只需要传入该按钮的一个参数,并提供一个方便调用的方法,将该参数传入方法即可获得相应的按钮对象,此时,就可以使用简单工厂模式。模式定义简单工厂模式,又称静态工厂方法模式,是创建型模式。在简单工厂模式中,可以根据传入的参数的不同返回不同类的实例,简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。包含角色(1)工厂原创 2020-10-07 15:26:05 · 343 阅读 · 0 评论 -
设计模式预备知识:时序图
时序图又称UML时序图或者UML序列图,用于描述对象之间发送消息的时间顺序,显示多个对象之间的动态协作。时序图的几大元素我们在画时序图时会涉及7种元素:角色(Actor)、对象(Object)、生命线(LifeLine)、控制焦点(Activation)、消息(Message)、自关联消息、组合片段。其中前6种是比较常用和重要的元素,剩余的一种组合片段元素不是很常用,但是比较复杂。组合片段的资料见这篇文章角色系统角色可以使人或者其他系统,通常用小人代替对象对象位于时序图的顶部,以一个矩形表示。对原创 2020-10-06 22:37:44 · 271 阅读 · 0 评论 -
设计模式预备知识:UML类图
以下内容来自该链接的总结UML类图泛化关系(generalization)继承关系为 is-a的关系;两个对象之间如果可以用 is-a 来表示,就是继承关系:(…是…)。例如:自行车是车、猫是动物泛化关系用一条带空心箭头的直线表示;如下图表示(A继承自B);ps:在最终代码中泛化关系表现为继承非抽象类。实现关系(realize)实现关系用一条带空心箭头的虚线表示;eg:”车”为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(汽车还是自行车),才 可以用来定义对象(”车”这原创 2020-10-05 22:47:06 · 126 阅读 · 1 评论