设计模式
zhixin9001
这个作者很懒,什么都没留下…
展开
-
设计模式(23) 访问者模式
由于应用开发过程中先前完成的类型会因为需求变化(无论是业务功能,还是技术实现或是出于集成的需要)增加新的方法,如果直接在基类中增加新的方法,其派生类型可能需要相应进行比较繁琐的处理。而使用访问者模式可以做到在不改变既有类型层次的前提下,运行时动态为类型层次的每个类增加新的操作。访问者模式GOF对策略模式的描述为:Represent an operation to be performed on the elements of an object structure. Visitor lets you原创 2020-09-24 21:41:35 · 105 阅读 · 0 评论 -
设计模式(22) 策略模式
在策略模式中,一个类的行为或算法可以在运行时动态更改。GOF对策略模式的描述为:Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients.— Design Patterns : Elements of Reusable Object-Oriented SoftwareUML原创 2020-09-19 20:44:58 · 111 阅读 · 0 评论 -
设计模式(21) 状态模式
状态模式允许一个对象在其内部状态改变时改变它的行为。用电梯来举例,电梯可以认为具有开门、关门、运行、停止四种状态,这四种状态之间的切换具有多种限制,比如在开门状态下不电梯不能运行,只能转为关门状态;在运行状态下,电梯只能转为停止状态…设想一下,如果要常规的if-else或者switch-case描述电梯的这几种状态间的切换,将生成非常复杂的、逻辑相互交织的代码,可读性差且不易维护。而如果用状态模式来实现,会是怎样的呢?首先创建LiftState,代表抽象的电梯状态,包含了电梯的四个动作(方法),通过这原创 2020-09-07 21:31:26 · 617 阅读 · 0 评论 -
设计模式(20) 观察者模式
观察者模式是一种平时接触较多的模式。它主要用于一对多的通知发布机制,当一个对象发生改变时自动通知其他对象,其他对象便做出相应的反应,同时保证了被观察对象与观察对象之间没有直接的依赖。GOF对观察者模式的描述为:Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically…— D原创 2020-08-29 21:53:31 · 130 阅读 · 0 评论 -
设计模式(19) 备忘录模式
备忘录模式可以在不破坏封装的前提下,将一个对象的状态捕捉(Capture)住,并在外部存储,从而可以在需要的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代器模式一同使用。GOF对备忘录模式的描述为:Without violating encapsulation, capture and externalize an object’s internal state so that the object can be restored to this state later.— Des原创 2020-08-24 21:33:02 · 131 阅读 · 0 评论 -
设计模式(18) 中介者模式
一个软件系统中往往包含了很多的类,这些类之间会存在互相的调用,随着系统的升级、功能的扩展,这些相互调用关系会变得非常复杂,,大量的相互连接使得这样一个类型系统不太可能在没有其他类支持的情况下独立完成工作,久而久之这些类将变得像一个不可分割的整体,内部有着错综复杂的关联。这会导致后期维护特别困难,对系统或模块的任何较大的变动都可能造成无法预知的问题。中介者模式中介者模式可以解决这种问题。它通过提供一个中介类,来处理不同类之间的通信,这样可以降低多个类之间的通信复杂度,使代码更易于维护。中介者模式属于行为型原创 2020-08-23 21:26:43 · 121 阅读 · 0 评论 -
设计模式(17) 迭代器模式
迭代器模式基于IEnumerable的实现使用场景迭代器模式的优缺点迭代器模式迭代器模式用于顺序访问集合对象的元素,而不需要知道集合对象的底层表示。Java和.Net等语言已经将迭代器作为其内部语法元素,比如在C#中,集合对象只需要实现IEnumberable接口,然后就可以用foreach来遍历了。迭代器模式提示我们要从使用者的角度考虑如何设计接口,如何对外提供访问内部对象的方式。即便我们组织的对象系统内部结构很复杂,但对于客户程序而言最简单的方式莫过于通过for /foreach循环依次.原创 2020-08-11 21:26:38 · 97 阅读 · 0 评论 -
设计模式(16) 命令模式
命令模式适用场景Redo & Undo命令模式的优缺点命令模式命令模式是对一类对象公共操作的抽象,它们具有相同的方法签名,所以具有类似操作,可以被抽象出来,成为一个抽象的“命令”对象。请求以命令的形式包裹在对象中,并传给调用对象。调用者寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。这样实际操作的调用者就不是和一组对象打交道,它只需要依赖于这个“命令”对象的方法签名,并根据这个操作签名调用相关的方法。GOF对命令模式描述为:Encapsulate a re.原创 2020-08-05 21:56:11 · 134 阅读 · 0 评论 -
设计模式(15) 解释器模式
项目中有时会遇到某类问题出现得非常频繁,而且它们的变化也基本上以一些规律性的方式进行变化。对于这类问题,如果编写一个对象类进行处理,随着业务变更,将需要频繁地修改代码、编译、部署。与其反复做这种工作,不如把它们抽象为一个语言(语法定义可能很简单,也可能很复杂),这样就可以极大地增加代码的业务适应性。正则表达式就是解释器模式的一种应用;再比如,假设有这样的业务场景 :部门经理可以审批员工的办公用品申请,但如果某个申请单的金额大于1万,那么部门经理就没有权限审批了。这个逻辑可以表示为:本部门员工(申请单)原创 2020-08-03 21:09:46 · 153 阅读 · 0 评论 -
设计模式(13) 职责链模式
行为型模式行为型模式关注于应用运行过程中算法的提供和通信关系的梳理。相比于创建型模式和结构型模式,行为型模式包含了最多的设计模式种类,包括:职责链模式模板方法模式解释器模式命令模式迭代器模式中介者模式备忘录模式观察者模式状态模式策略模式访问者模式职责链模式职责链模式为了避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,会将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。GOF对外观模式的描述为:Avoid coupling the sen原创 2020-07-29 22:13:27 · 97 阅读 · 0 评论 -
设计模式(12) 代理模式
代理模式的目地是为对象提供一种代理以控制对这个对象的访问。为什么会出现“通过一个代理对象,控制其他对象访问目标对象”这种场景,而不知直接new()出一个对象直接使用呢?这是因为在有些场景下对象的访问比较复杂,且需要一些额外的控制,这时如果直接new()出实例,并在调用端处理这些繁杂的细节,会增加系统的耦合。类似的场景有很多,比如远程访问、数据库访问、权限校验、负载均衡等等。GOF对外观模式的描述为:Provide a surrogate or placeholder for another object原创 2020-07-27 17:08:38 · 64 阅读 · 0 评论 -
设计模式(11) 享元模式
基于面向对象思想设计的应用程序有时遇到需要场景大量相同或显示对象实例的场景,这些数量庞大的实例很可能会消耗很多系统资源,最直接的就是内存了。比如要一款围棋游戏,如果每次落子都新建一个对象,将会占用大量内存,而实际上棋子只有黑白两色,不同的只是落子位置而已。另外,大量的主动型对象还会占用很多CPU和显卡的计算资源,举个极端的例子,某个游戏的沙漠场景,为了使游戏具有丰富的视觉效果,要求每一粒沙子都要随着光线而有不同的呈现效果不同,这时候直接new当然也是不现实的。享元模式享元模式提供了一种针对这类场景的解决原创 2020-07-24 20:48:39 · 144 阅读 · 0 评论 -
设计模式(10) 外观模式
外观模式(或门面模式、包装模式)是设计模式中非常朴素地体现面向对象“封装”概念的模式,它的基本原理是将复杂的内部实现以统一接口的方式暴露出来,最大程度地减少客户程序对某些子系统内部众多对象的依赖关系。外观模式在开发过程中运用频率非常高,比如各种第三方SDK大多会使用外观模式。通过一个外观类是的整个系统的接口只有一个统一的高层接口,这样能够降低用户的使用成本,也能够对用户屏蔽很多实现细节。再比如经常会用到的三层结构也是外观模式的应用。GOF对外观模式的描述为:Provide a unified int原创 2020-07-22 21:55:54 · 112 阅读 · 0 评论 -
设计模式(9) 装饰模式
装饰模式装饰模式的特点动态撤销功能装饰模式可以动态向一个现有的对象添加新的功能,同时又不改变其结构。就增加功能来说,使用继承的方式生成子类也可以达到目的,但随着扩展功能的不断增加,子类的数量会快速膨胀,而装饰模式提供了一种更加灵活的方案。装饰模式GOF对装饰模式的描述为:Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subcla.原创 2020-07-20 20:48:30 · 106 阅读 · 0 评论 -
设计模式(8) 组合模式
组合模式透明模式与安全模式对组合的筛选遍历无论是在生活中还是项目中,我们经常会遇到具有“部分-整体”概念的对象,比如员工与团队的关系,这就类似树形结构,可能具有很多的嵌套层次和分支,把这种复杂性直接暴露给调用端是不合适的。组合模式借助组合模式,可以将这类具有“部分-整体”的对象组合成树形的层次结构,并使得用户可以对单个对象和组合对象采用相同的使用方式。GOF对组合模式的描述为:Compose objects into tree structures to represent part-wh.原创 2020-07-17 21:25:15 · 98 阅读 · 0 评论 -
设计模式(7) 桥接模式
桥接模式的概念与实现为什么叫桥接模式桥接模式的适用场景继承是面向对象的三大特性之一,但很多时候使用继承的结果却不尽如人意。除了人尽皆知的紧耦合问题外,有的时候还会导致子类的快速膨胀。设想这样一个场景:最初设计的时候有一个类型Product,但后来随着新需求的出现,X原因导致了它的变化,X有两种情况,则通过继承需要创建两个新的子类ProductX1,ProductX2,但后来有出现了Y因素也会导致Product的变化,如果Y有三种情况,则会出现ProductX1Y1,ProductX1Y2,Pro.原创 2020-07-15 22:39:04 · 124 阅读 · 0 评论 -
设计模式(6) 适配器模式
结构型模式适配器模式类适配器和对象适配器结构型模式结构型模式的重点在于如何通过灵活的体系组织不同的对象,并在此基础上完成更为复杂的类型(或者类型系统),而参与组合的各类型之间始终保持尽量松散的结构关系。结构型模式包括以下几种:适配器模式桥接模式组合模式装饰模式外观模式享元模式代理模式适配器模式GOF对适配器模式的描述为:Specify the kinds of objects to create using a prototypical instance, and cr.原创 2020-07-13 21:39:54 · 84 阅读 · 0 评论 -
设计模式(1) 工厂方法模式
创建型模式简单工厂模式工厂方法模式IOC与工厂方法模式的结合泛型工厂委托工厂创建型模式创建型模式可以隔离客户程序对需要实例化类型的依赖关系,这类模式一般通过将实例化具体对象的职责委托给第三方对象的方式,使得客户程序或者外部系统在获得所需的具体类型实例的同时,而不必对其发生直接的引用。创建型模式包括:工厂方法模式单例模式抽象工厂模式创建者模式原型模式按照大多数设计模式书籍采用的顺序,首先从工厂方法模式开始。简单工厂模式简单工厂模式并没有被归入23种设计模式之列,但.原创 2020-06-29 16:01:09 · 198 阅读 · 0 评论 -
设计模式(2) 单例模式
单例模式线程安全的Singleton会破坏Singleton的情况线程级Singleton单例模式是几个创建型模式中最独立的一个,它的主要目标不是根据客户程序调用生成一个新的实例,而是控制某个类型的实例数量只有一个。GOF对单例的描述为:Ensure a class only has one instance, and provide aglobal point of access to.—Design Patterns : Elements of Reusable Object-Orie.原创 2020-07-02 22:28:56 · 111 阅读 · 0 评论 -
设计模式(3) 抽象工厂模式
抽象工厂模式优化抽象工厂异步工厂在学习抽象工厂模式前,先来回顾一下前面的简单工厂和工厂方法模式。简单工厂的职责非常简单:构造某个实体类型,然后把实例作为抽象类型返回;工厂方法模式则进一步抽象出一个抽象的创建者和一个抽象的产品类型,而实际的执行过程是具体工厂创建具体的产品类型,具体工厂和具体产品类型都可以被抽象为之前定义的抽象创建者和抽象产品类型,这种模式即便面对的是一个很庞大的具有复杂家族关系的类型系统,客户程序在操作的过程中仍然可以基于抽象创建者获得满足某种抽象类型的产品实例。但在很多场景下.原创 2020-07-05 17:51:39 · 137 阅读 · 0 评论 -
设计模式(4) 建造者模式
什么是建造者模式经典建造者模式的优缺点对建造者模式的扩展什么是建造者模式建造者模式将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。虽然与工厂模式、抽象工厂模式、单件模式同为创建型模式,但建造者模式与之前学习的模式相比,更为关注创建过程的细节,它一般用于创建复杂对象,从独立创建每个部分到最后的组装,它承担每个步骤的工作。由于它把创建每个部分都独.原创 2020-07-07 20:38:31 · 135 阅读 · 0 评论 -
设计模式(5) 原型模式
原型模式原型模式的适用场景浅拷贝深拷贝用Initialize方法修改初始化状态原型模式与之前学习的各种工厂方法、单例模式、建造者模式最大、最直观的区别在于,它是从一个既有的对象“克隆”出新的对象,而不是从无到有创建一个全新的对象。与对文件的拷贝类似,原型模式是基于现有的对象拷贝新的对象。原型模式GOF对原型模式的描述为:Specify the kinds of objects to create using a prototypical instance, and create new .原创 2020-07-09 22:11:55 · 83 阅读 · 0 评论