设计模式
文章平均质量分 65
[奋斗不止]
这个作者很懒,什么都没留下…
展开
-
设计模式6大原则-单一职责原则
设计模式6大原则-单一职责原则定义:一个类应该只有一个引起变化的原因。一个类只负责一项职责如果一个类有多个职责,这些职责耦合在一起,当一个职责发生变化时,可能影响其他的职责。如:一个类有 A、B、C 等职责,当职责A 需求变化二需要修改类时,有可能导致原本运行正常的类无法运行。看一个手机模型类设计手机属性和功能包括如下手机型号名、手机屏幕尺寸、打电话、发短信、玩游戏、看视频设计一个手机接口 IPhone如下IPhone 接口中包含手机的属性以及不同功能(通讯、娱乐)的所有接口,如果添加属原创 2021-11-25 18:02:13 · 2233 阅读 · 0 评论 -
设计模式6大原则-里氏替换原则
设计模式6大原则-里氏替换原则原创 2021-11-29 16:28:26 · 504 阅读 · 0 评论 -
设计模式6大原则-依赖倒置原则
设计模式6大原则-依赖倒置原则定义:(1) 高层模块不应该依赖低层模块,两者都应该依赖其抽象(2) 抽象不应该依赖细节(3) 细节应该依赖抽象如果高层模块依赖于低层模块,当低层模块发生变化需要改动时,会导致高层模块跟着修改。抽象和细节又是什么?抽象:接口或者抽象类细节:就是实现类优点:(1) 降低类间的耦合(2) 提高系统的稳定性(3) 减少并行开发引起的风险(4) 提高代码的可读性和可维护性实现方法:(1) 每个类尽量提供接口或抽象,或者两者都具备(2) 变量的表面类型尽量原创 2021-11-29 19:34:29 · 458 阅读 · 0 评论 -
设计模式6大原则-接口隔离原则
设计模式6大原则-接口隔离原则原创 2021-11-30 17:19:11 · 379 阅读 · 0 评论 -
设计模式6大原则-迪米特法则
设计模式6大原则-迪米特法则定义:迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解,迪米特法则的一个英文解释为: Only talk to your immediate friends (只和你最亲近的朋友交谈)。一个类应该对自己需要耦合的类或者调用的类知道的最少,被耦合或调用的类内部逻辑跟自身无关,也不需要关心,只需要知道被耦合或者调用类提供的 public 方法或者属性变量。迪米特法则的核心观念就是降低类间耦合。每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,原创 2021-12-01 12:04:17 · 688 阅读 · 0 评论 -
设计模式6大原则-开闭原则
设计模式6大原则-开闭原则定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。开闭原则理念就是当需求改变时,希望在不改变原有代码的前提下,通过扩展模块、函数来满足新需求。开闭原则是其他五大原则的实现,也是面向对象程序设计的终极目标,它使软件实体具有一定的适应性、灵活性的同时具备稳定性和扩展性。为什么要采用开闭原则?(1) 开闭原则对测试的影响已经投入使用的代码都是有意义的,需要经过 高压力、异常、错误 等严苛条件测试,换句话说,已有代码很多都是通过验证的代码,因此当提出新需求或者需求变原创 2021-12-02 16:16:46 · 1138 阅读 · 0 评论 -
设计模式-单利模式
设计模式-单利模式一、单例模式确保一个类仅有一个实例,并提供一个全局访问点,避免一个全局使用的类频繁的创建和销毁。二、何时使用一个公司只有一个老板一个学校只有一个校长操作系统只有一个任务管理器三、如何实现下面使用C#代码展示 public class Singleton { // 单例实例,声明为 instance,避免外部调用 private static Singleton instance = null; // 将构造函原创 2021-10-29 18:37:19 · 236 阅读 · 0 评论 -
设计模式-简单工厂模式
设计模式-简单工厂模式定义:由一个工厂类根据传入参数,动态决定创建哪一个产品类(这些产品类继承自一个父类或接口)结构:Factory (工厂)负责实现创建所有实例的内部逻辑,工厂类创建产品的方法可以被外界直接访问,一般定义为静态方法 (static),所以有时候也叫静态工厂方法。Product (抽象、接口 产品)简单工厂模式所创建的所有对象对应类的父类或接口Concrete Product (具体产品)简单工厂创建的目标下面以一个汽车工厂为例,展示一个汽车工厂生产 小轿车、公共汽车、校车原创 2021-11-01 16:39:41 · 143 阅读 · 0 评论 -
设计模式-工厂方法模式
设计模式-工厂方法模式接上文的简单工厂模式简单工厂模式中讲到了几条缺点,其中之一便是扩展困难,一旦添加新产品就不得不修改简单工厂方法,违背了设计模式的开闭原则,工厂方法的出现能够解决这个问题。定义:工厂方法模式定义一个创建产品的接口,将实际创建产品的工作延迟到子类中。结构:AbstractFactory (抽象工厂)提供了创建产品的接口,不负责具体产品的创建,抽象工厂可以是抽象类,也可以是一个接口ConcreteFactory(具体工厂)继承 AbstractFactory,实现Abstra原创 2021-11-01 17:20:58 · 152 阅读 · 0 评论 -
设计模式-抽象工厂模式
设计模式-抽象工厂模式接简单工厂模式、工厂方法模式上篇的工厂方法模式中一个工厂只生产一种产品,它具有很好的扩展性,但是在现实中工厂都是多元化的,一个工厂可以创建一系列的产品,此时工厂方法模式就不适用了,于是抽象工厂的出现解决了一系列产品的创建问题。定义:抽象工厂用于产品族的创建,抽象工厂是指当有多个抽象角色时使用的一种工厂模式,向客户提供创建产品的接口,可以创建多种产品族中的产品。结构:AbstractFactory (抽象工厂)提供多个创建不同产品的接口,不负责具体产品的创建,抽象工厂可以是抽原创 2021-11-01 18:31:39 · 174 阅读 · 0 评论 -
设计模式-建造者模式
设计模式-建造者模式定义:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。建造者模式将一个复杂对象的构造分解为多个简单的步骤,然后一步一步的构建,产品的组成部分是不变的,但是每一个部件是灵活选择的。依然以汽车为例,汽车是一个复杂的对象,它由,底盘、车架、轮胎、发动机、内饰、等组装而成,4S点的采购员去采购一批小轿车,不能让汽车采购员去购买汽车组件然后组装小轿车,我们采用建造者模式来解决这个问题。我们把汽车的组装过程封装到一个建造者类中,建造者负责根据需求组装产品,然后交付给采原创 2021-11-02 14:41:47 · 136 阅读 · 0 评论 -
设计模式-模板方法模式
设计模式-模板方法模式定义:一个抽象类公开定义了执行它的方法的方式/模板,而一些特殊方法的实现可以在子类中重写实现,但调用将以抽象类中定义的方式进行。模板方法使得子类在不改变一个方法的结构前提下,重新定义该方法内部调用的一些方法,来得到一个新的执行结果。如简历模板、论文模板,下载一个模板后不需要修改模块的位置,按顺序将自己的内容填写到相应的模块中,最终每个人都能制作出来一个属于自己的独一无二的简历、论文等。依然以汽车为例,现在奔驰小轿车和宝马小轿车都生产好了,开始测试行驶虽然轿车品牌不同,但是行驶原创 2021-11-02 15:56:55 · 164 阅读 · 0 评论 -
设计模式-代理模式
设计模式-代理模式定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户和目标对象之间起到中介的作用。代理模式类图如下Interface 抽象角色通过接口或抽象类声明真实角色实现的业务方法RealObject 具体角色也叫做被委托角色、 被代理角色。 是业务逻辑的具体执行者Proxy 代理角色也叫做委托类、 代理类。 它负责对真实角色的应用, 把所有抽象主题类定义的方法限制委托给真实主题角色实现, 并且在真实主题角色原创 2021-11-10 18:35:22 · 539 阅读 · 0 评论 -
设计模式-原型模式
设计模式-原型模式定义:指定创建对象的种类,并且通过拷贝这些原型对象创建新的对象。这里提到的原型对象就是被克隆的对象。当创建一个类的实例的过程很昂贵或很复杂,并且需要多次创建这样的类实例时,如果我们用 new 操作去创建这样的类实例,会增加创建类对象的复杂度和消耗更多的内存空间,因为内存中分配了多个这样的实例对象。而使用原型模式就可以在不需要关心任何创建细节,又大大提高性能的前提下完成对象的创建。使用场景(1) 当一个系统应该独立于它的产品创建、构成和表示时(2) 为了避免创建一个与产品类层次平原创 2021-11-24 15:39:23 · 398 阅读 · 0 评论 -
设计模式-中介者模式
设计模式-中介者模式定义:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互使用场景:对象与对象之间存在大量的关联关系,导致系统的结构变得很复杂,对象之间形成网状拓扑结构,一个对象发生变化,其它对象也需要相应的修改处理。网状拓扑结构如下使用中介者模式我们希望将对象之间的网状拓扑结构调整为星型拓扑结构星型拓扑结构如下中介者模式的类图结构如下Mediator 抽象中介者抽象中介者定义统一的接口,用于各同事之间的交互原创 2021-11-17 17:20:56 · 484 阅读 · 0 评论 -
设计模式-命令模式
设计模式-命令模式定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。使用场景(1) 需要对方法的请求这和方法的实现者解耦,使得调用者和接收者不直接交互(2) 需要对操作进行 撤销、恢复、记录(3) 需要在不同的时间指定请求、将请求排队和执行请求命令模式类图如下Receiver 接收者角色可以是具体类,也可以是抽象类、接口,执行命令的角色Command 抽象命令角色抽象出命令对象,可以根据不同的命令类型,写出不原创 2021-11-22 17:50:34 · 2682 阅读 · 0 评论 -
设计模式-责任链模式
设计模式-责任链模式定义:为请求创建了一个接受者对象的链,使多个接受者都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些接受者连成一条链,并沿着这条链传递该请求,不保证一定有接受者处理该请求。使用场景(1) 多个对象可以处理一个请求,但是具体哪个对象处理请求在运行时确定(2) 可动态指定一组对象处理请求,或者添加新的处理者(3) 需要在不明确指定请求处理者的情况下,向多个处理者中的一个提交请求责任链模式类图如下Handler 抽象处理者角色定义一个处理请求的接口,包含抽原创 2021-11-23 15:06:46 · 441 阅读 · 0 评论 -
设计模式-装饰者模式
设计模式-装饰者模式定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更灵活。特点:(1) 装饰对象和真实对象有相同的接口(2)装饰对象包含一个真实对象的引用(3)装饰对象接受所有来自客户的请求,然后把请求转发给真实对象,在转发请求之前或者以后增加一些附加功能,以达到在运行时,不用修改具体对象的结构就可以对其增加附加的功能装饰者模式的使用场景(1) 需要扩展一个类的功能,或给一个类增加附加功能(2) 需要动态地给一个对象增加功能,这些功能可以动态地撤销(3) 需原创 2021-11-16 15:23:41 · 458 阅读 · 0 评论 -
设计模式-策略模式
设计模式-策略模式定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式的使用场景(1) 多个类之区别在表现行为不同,在运行时选择具体要执行的行为(2) 需要在不同的情况下使用不同的策略(3) 对客户隐藏具体策略的实现细节,彼此独立策略模式类图如下Context 封装角色屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化Strategy 抽象策略角色策略、算法的抽象,通常为接口,定义每个策略或算法必须具原创 2021-11-16 17:07:33 · 484 阅读 · 0 评论 -
设计模式-适配器模式
设计模式-适配器模式定义:将一个类的接口转换成希望的另外的接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。如何将下图中两个图形对接在一起?方式一:随意挑选左、右图中的一个修改,然后就可以拼接在一起了方式二:再做一个图,能够让新的图即能跟左边的图拼接,又能跟右边的图拼接,如下中间绿色图形是新制作的图。项目设计时左右两个图可能没有关联关系,各自是一个独立的模块,并且项目开发过程中 左、右 两图已经分别接入到了一些功能模块中,并且已经经过测试验证,当新需求需要两图共同协作时,修改任何一个原创 2021-11-02 19:18:32 · 143 阅读 · 0 评论 -
设计模式-组合模式
设计模式-组合模式定义:组合模式也叫部分-整体模式,将对象组合成树形结构以表示 “部分-整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性。一个公司的人员(部分员工)组成结构如下如上的树形结构图展示了一个公司的人员结构,公司最高指挥者是CEO,往下一层是研发经理、销售经理、财务经理、人事部经理等等,根据部门不同,经理下还有组长,组长下还有具体员工。从该属性结构分析,有两种不同的节点组合节点:有子节点的节点 (如上 CEO、研发经理)叶子节点:没有子节点的节点 (如上 研发组员 A原创 2021-11-04 15:45:39 · 239 阅读 · 0 评论 -
设计模式-观察者模式
设计模式-观察者模式定义:对象间一种一对多的依赖关系,使得当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新。使用场景:(1)一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合(2)一个对象通知其他对象,而并不知道这些对象是谁。观察者模式类图如下Subject 被观察者定义被观察者必须实现的职责,它必须能够动态地增加,删除观察者,它一般是抽象类或者实现类,仅仅完成作为被观察者必须实现的职责,管理观察者并通知观察者。Concr原创 2021-11-18 15:04:32 · 503 阅读 · 0 评论 -
设计模式-外观模式
设计模式-外观模式定义:外观模式又叫门面模式,为子系统中的一组接口提供一个统一的访问接口,外观模式定义了一个高层接口,让子系统更容易使用。下面看一个系统中多个类对象之间的调用关系客户A需要耦合调用各个子系统,客户A需要了解所有子系统,并且与之耦合在一起,不利于扩展维护,且增加了客户的理解成本下面看引入外观模式后类图如下引入一个外观类,客户A只需要访问外观类,外观类来处理子系统之间的关系。当子系统需要扩展、修改时客户A不需要任何修改,一切由外观类来管理。外观模式类图如下Faced 外观/门原创 2021-11-11 16:20:51 · 377 阅读 · 0 评论 -
设计模式-备忘录模式
设计模式-备忘录模式定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到之前保存的状态。通俗的说,备忘录模式就是一个对象的备份模式,提供了一种程序数据的备份方法和恢复数据的方法。使用场景(1) 手机通讯录备份(2) 游戏存档(3) Word 的 Ctrl + Z 组合键备忘录模式的类图如下Originator 发起人角色记录当前时刻的内部状态,负责定义那些属于备份范围的状态,负责创建和恢复备忘录数据。Memento 备忘录角色负原创 2021-11-18 16:19:11 · 2787 阅读 · 0 评论 -
设计模式-访问者模式
设计模式-访问者模式定义:封装一些作用于某种数据结构各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新操作。使用场景(1) 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。(2) 需要对一个对象结构中的对象进行很多不同且不相关的操作,而你想避免让这些操作“污染”这些对象。看完访问者模式定义和使用场景感觉还是太抽象了。先继续往下看吧访问者模式类图如下Visitor 抽象访问者抽象类或接口,声明访问者可以访问那些具体元素,Visit原创 2021-11-19 11:24:05 · 639 阅读 · 0 评论 -
设计模式-状态模式
设计模式-状态模式定义:当一个对象内在状态改变时允许其改变行为,这个对象看起来想改变了其类。状态模式的核心是封装,状态的变更引起了行为的改变,从外部看就像这个对象对应的类发生了改变一样。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的逻辑简化。状态模式类图如下State 抽象状态接口或者抽象类,对象状态的定义ConcreteState 具体状态角色每一个具体状态必须完成两个职责,本状态要做的事情以及本状态如何切原创 2021-11-15 17:25:27 · 822 阅读 · 0 评论 -
设计模式-解释器模式
设计模式-解释器模式定义:给定一门语言,定义它的文法的一种表示,定义一个解释器,该解释器使用该表示来解释语言中的句子。解释器模式是一种按照规定语法进行解析的方案,在现在项目中使用较少。使用场景(1) 当一个语言需要解释执行,并且你可将语言中的句子表示为一个抽象语法树时(2) 一些重复出现的问题可以用一种简单的语法来表达(3) 一个简单语法需要解释的场景看完上面这些, 语言?语句?文法?解释器?这几个词想必大家都不陌生,编译原理中讲的就是这些,但是概念几乎全忘了。比如正则表达式,它就是对字符原创 2021-11-23 21:16:38 · 630 阅读 · 0 评论 -
设计模式-享元模式
设计模式-享元模式定义:运用共享技术来有效的支持大量细粒度对象的复用。它通过共享技术来大幅度的减少需要创建的对象数量,避免大量相似类的开销,从而提升系统资源的利用率。享元模式的目的在于运用共享技术,是的一些细粒度的对象可以共享,多使用细粒度的对象,便于重用或重构。享元模式的一个重要运用就是复用池、缓存池。享元模式的通用类图如下Flyweight 抽象享元角色产品的抽象类,同时定义出对象的外部状态和内部状态的接口或实现Concrete Flyweight 具体享元角色具体的产品类,实现抽象角原创 2021-11-05 16:35:00 · 164 阅读 · 0 评论 -
设计模式-桥接模式
设计模式-桥接模式定义:将抽象和实现解耦,使得两者可以独立地变化。桥接模式的通用类图如下结构说明:Abstraction 抽象化角色定义出该角色的行为,同时保存一个对实现角色的引用,该角色一般是抽象类RefinedAbstraction 修正抽象化角色引用实现化角色对抽象化进行修正Implementor 实现化角色它是接口或者抽象类,定义角色必须的行为和属性ConcreteImplementor 具体实现化角色实现接口或者抽象类定义的方法和属性下面以房产公司为例,展示房屋从建造到销原创 2021-11-03 15:46:19 · 218 阅读 · 0 评论