![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
李金轩
每一次的选择,不要勉强自己,但是选择了,就要坚持下去,因为坚持下去,才能有抵达终点的可能。
展开
-
设计模式之原型模式
原型模型定义:用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建模式,它提供了一种创建对象的最佳方式。主要意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。主要解决:在运行期建立和删除原型。解决方法:利用已有的一个原型对象,快速生成和原型对象一样的实例优点:1、如果创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提高效率。...原创 2019-12-10 08:07:54 · 1917 阅读 · 11 评论 -
设计模式之备忘录模式
备忘录模式定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。该模式属于行为型模式。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。解决方案:通过一个备忘录类专门存储对象状态。优点:1,提供...原创 2019-12-10 08:07:15 · 1850 阅读 · 6 评论 -
设计模式之观察者模式
观察者模式定义:当一个对象被修改时,则会自动通知它的依赖对象。这种模式属于行为型模式。主要意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用性和低耦合,保证高度协作。解决方案:使用面向对象技术,可以将这种依赖关系弱化。优点:1,观察者和被观察者,是抽象耦合...原创 2019-12-07 22:24:37 · 1913 阅读 · 6 评论 -
设计模式之桥接模式
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式。主要意图:将抽象部分与实现部分分离,使它们都可以独立的变化。主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。解决方案:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。优点:1、抽象和实现的分离。2、优秀的扩展能力。3、实现细节对客户透明。...原创 2019-12-07 22:24:06 · 1875 阅读 · 5 评论 -
设计模式之代理模式
代理模式定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对象的引用。(一个类代表另一个类的功能。)通俗的来讲代理模式就是我们生活中常见的中介。比如你想买一个房子,你需要了解的信息在中介这里你都可以了解到,不需要去找房主联系,中介就是代理了房主的一切卖房权利。主要意图:中介隔离作用(在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起...原创 2019-12-07 22:23:00 · 1877 阅读 · 7 评论 -
设计模式之访问者模式
访问者模式:使用一个访问者类,改变元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。主要意图:主要将数据结构与数据操作分离。主要解决:稳定的数据结构和易变的操作耦合问题。解决方案:在被访问的类里面加一个对外提供接待访问者的接口。优点:1,各角色职责分离,符合单一职责原则。2,具有优秀的扩展性。3,使得数据结构和作...原创 2019-12-07 22:23:05 · 1914 阅读 · 8 评论 -
设计模式之解释器模式
解释器模式:提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。主要意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。主要解决:对于一些固定文法构建一个解释句子的解释器。解决方案:构建语法树,定义终结符与非终结符。优点:1、可扩展性比较好,灵活。2、增加了新的解释表达式...原创 2019-12-07 22:23:37 · 1925 阅读 · 5 评论 -
设计模式之享元模式
享元模式:主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。主要意图:运用共享技术有效地支持大量细粒度的对象。主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。解决方案:用唯一标识码判断,如果在内存中有,...原创 2019-12-07 22:23:42 · 1909 阅读 · 7 评论 -
设计模式之中介者模式
中介者模式:是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。主要意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对...原创 2019-12-07 22:23:47 · 1867 阅读 · 9 评论 -
设计模式之职责链模式
职责链模式:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。其过程实际上是一个递归调用。要点:1、有多个对象共同对一个任务进行处理。2、这些对象使用链式存储结构,形成一个链,每个对象知道自己的下一个对象。3、一个对象对任务进行处理,可以添加一些操作后将对象传递个下一个任务。也可以在此对象上...原创 2019-12-07 22:23:56 · 1916 阅读 · 8 评论 -
设计模式之命令模式
命令模式:是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。主要意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,...原创 2019-12-10 08:06:51 · 1856 阅读 · 4 评论 -
设计模式之单例模式
单例模式:就是整个程序有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建。主要意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。解决方案:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。优点:1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。2...原创 2019-12-10 08:06:59 · 1841 阅读 · 6 评论 -
设计模式之迭代器模式
迭代器模式:是编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。主要意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。主要解决:不同的方式来遍历整个整合对象。解决方案:把在元素之间游走的责任交给迭代器,而不是聚合对象。优点:1、它支持以不同的方式遍历一个聚合对象。2、迭代...原创 2019-12-07 22:24:16 · 1914 阅读 · 7 评论 -
设计模式之组合模式
组合模式定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。主要意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使...原创 2019-12-10 08:07:06 · 1899 阅读 · 6 评论 -
设计模式之适配器模式
适配器模式定义:将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。主要解决:在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。解决方案:继承或依赖(推荐)。优点:1、可以让任何两个没有关联的类一起运行。2、提高了类的复用...原创 2019-12-10 08:07:20 · 1867 阅读 · 8 评论 -
设计模式之状态模式
状态模式定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。。这种类型的设计模式属于行为型模式。主要意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。解决方案:将各种具体的状态类抽象出来。优点:1、封装了转换规则。2、枚举可能的状态,在...原创 2019-12-10 08:07:32 · 1924 阅读 · 7 评论 -
设计模式之抽象工厂模式
抽象工厂模式定义:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。主要意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。主要解决:接口选择的问题。解决方案:在一个产品族里面,定义多个产品。优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中...原创 2019-12-07 22:24:21 · 1900 阅读 · 7 评论 -
设计者模式之建造者模式
建造者模式定义:使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。主要意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它...原创 2019-12-10 08:07:38 · 1894 阅读 · 8 评论 -
设计模式之外观模式
外观模式定义:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。主要意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。解决方案:客户端不与系统耦合,外观类与系统...原创 2020-01-08 08:02:07 · 1878 阅读 · 13 评论 -
设计模式之模板方法模式
模板方法模式的定义:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决:一些方法通用,却在每一个自类都重写了这一方法。解决方案:将这些通用算法抽象出来。优点:1、封装不变部分,扩展可变部分;2、提取公共代码,便于维护;3、行为由父类控制,子类实现。缺点:每一个不同的实现都需要一个子类来...原创 2019-12-10 08:07:45 · 1860 阅读 · 7 评论 -
设计模式之工厂方法
工厂方法定义:这是设计模式中创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。主要意图:创建对象的接口,让实现该接口的类决定要实例化哪个类。解决问题:接口选择应用地点:明确地计划不同条件下创建不同实例时。注意事项:作为创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。...原创 2020-01-08 08:02:18 · 1863 阅读 · 18 评论 -
设计模式之装饰模式
装饰模式的定义:是允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式在设计模式中属于结构型模式,它是作为现有类的一个包装。主要意图:动态的给一个对象添加一些额外的职责 (就增加功能来说,装饰器模式相比生成自雷更为灵活)。使用场景:在不想增加很多子类的情况下扩展类(1,扩展一个类的功能。2,动态增加功能,动态撤销。)。优点:装饰类和被装饰类可以独立发展,耦合度低,装饰模式...原创 2019-12-05 18:57:57 · 1884 阅读 · 10 评论 -
设计模式之原则篇
单一职责原则定义上来说:应该有且仅有一个原因引起类的变更。单一职责原则为我们提供了一个编写程序的准则,要求程序员在写代码(类,抽象类,接口)的时候,要使其功能职责单一纯粹,使其改变的外在因素缩减到最少。从另一个方面来说,如果一个功能(类)承担的职责过多,相当于把这些职责耦合在一起。当其中一个职责改变时,可能会会牵一发而动全身,从而造成这个功能(类)失效,不利于持续改进。打一个例子,...原创 2019-12-05 18:57:50 · 1842 阅读 · 6 评论 -
设计模式之策略模式
策略模式是设计模式中属于行为型模式,它的作用是让一个类的行为或者其算法可以在运行时更改。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context(环境)对象。策略对象改变context对象的执行算法。我们来看一下策略模式类图从中可以看到Strategy(策略)是下方ABC三个类的父类,与Context(环境)有着聚合和单向关联关系。根据类图,我们来看一下...原创 2019-12-01 19:12:07 · 1866 阅读 · 4 评论 -
设计模式之简单工厂
简单工厂模式是一种创建型模式,可以叫做静态工厂方法模式。虽然叫做模式,但是不属于二十三种GOF设计模式里边的。简单工厂模式在大话设计模式中,用的是一种运算的小例子来实现的,我来说一下这个例子的基本操作。首先第一段代码是对输入的数字有一个地方存储,并且可以读写,方便进行下一步的运算/// <summary> /// 运算类 /// </summary>...原创 2019-11-27 10:39:31 · 1861 阅读 · 5 评论