设计模式简述

什么是设计模式:

        设计模式是对面向对象设计中反复出现的问题的解决方案。

设计模式的作用:

        增加了程序的灵活性和可重写性。有助于设计的标准化开发,增强了代码的可读性和可靠性。

设计模式的两大主题:

        系统复用与系统拓展

设计模式的组成:

        ①模型名称:绝大多数模式都是根据其功能或模式结构来命名的,通过一两个词来描述模式的问题、解决方案和效果,以便更好地理解模式并方便开发人员之间的交流。

        ②问题:在设计过程中反复出现的某一段内容,我们将根据这一内容的不同选择不同的设计模式。

        ③解决方案:描述了设计的组成部分、各部分的职责、相互之间的关系与协作方式。

        ④效果:使用该模式后对软件系统中其他部分的影响。包括系统的扩充性、可移植性等。

设计模式的七大原则

        开闭原则(OCP)

        是设计模式的核心,也是最基础、最重要的原则。它说的是对象(类,模块,函数等)对扩展开放(提供方),对修改关闭(使用者),用抽象构建框架,用实现扩展细节。

        对扩展开放:指的是我们系统中的模块、类、方法对它们的提供者(开发者)应该是开放的,提供者可以对系统进行扩展新的功能。

        对修改关闭:指的是系统中的模块、类、方法对它们的使用者(调用者)应该是关闭的。使用者使用这些功能时,不会因为提供方新增了功能而导致使用者也进行相应修改。

        用抽象构建框架:使用抽象类或者接口搭建框架指定规则。

        用实现扩展细节:用子类去继承实现抽象类或接口,然后扩展具体的代码。

       单一职责原则(SRP)

        即一个类只有一个职责(功能)。使用单一职责原则可以降低耦合度、降低类变更的风险,增强代码的可读性。但也有不适用单一职责原则的情况:只有逻辑足够简单,才可以在代码级违反单一职责原则; 只有类中方法数量足够少,可以在方法级别而不是类级别保持单一职责原则

       里氏代换原则(LSP)

        任何基类可以出现的地方,其子类也一定可以出现。即子类可以扩展父类的功能,但不能改变父类原有的功能(不要重写)

        它克服了继承中重写父类造成的可复用性变差的缺点(要求不能重写)。是动作正确性的保证。即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。

       接口隔离原则(ISP)

        客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。一般来说,使用多个隔离的小接口,比使用单个大的接口要好。

        接口要尽可能小,但不能违反单一职责原则。接口要少公布public方法,减少变更的风险。接口的设计粒度越小,系统越灵活,但随之而来的结构复杂化、开发难度增加、可维护性降低无不提示我们要根据实际来设计接口。

      依赖倒置原则(DIP)

        高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。依赖倒置的中心思想是面向接口编程即程序要依赖于接口而不是具体实现。

       减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。

      迪米特原则(最少知识原则)LOD

        一个类或对象应该对其它对象保持最少的了解。即只与直接的朋友通信。

        出现在成员变量、方法的输入输出参数中的类是直接的朋友。而只出现在方法体内部的类就不是直接的朋友,所以不能有类只出现在方法体内部。

        降低了类之间的耦合度,提高了模块的相对独立性。提高了类的可复用率和系统的扩展性。

      组合/聚合复用原则(CRP)

        多用组合或聚合,少用继承:尽可能通过组合已有对象(借用他们的能力)来实现新的功能,而不是使用继承来获取这些能力。

        组合/聚合复用原则是黑箱复用。是动态行为,即运行时行为。可以使系统更加灵活,降低类间的耦合度,最主要的缺点就是系统中会有较多的对象需要管理。

        使用继承要严格遵循里氏代换原则和coad法则。继承是“白箱”复用。是静态行为,也就是编译时行为,缺乏足够的灵活性。而且滥用继承会增加系统构建和维护的难度以及系统的复杂度。

23个设计模式:

        创建型模式:

        创建型模式简单来说就是用来创建对象的,它提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。

        工厂方法模式:

                一个工厂类根据传入的参量决定创建出哪一种产品类的实例,也就是让工厂类的子类来决定要创建哪个产品类。

        抽象工厂模式:

                抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

        单例模式:

                确保某一个类只有一个实例,并且提供一个全局访问点。

        建造者模式:

                用来创建复杂的复合对象,其中封装了一个复杂对象的创建过程,并可以按步骤构造。

        原型模式:

                通过复制现有的实例(原型)来创建新的实例(对象)。

        结构型模式:

                结构型模式主要是用于处理类或者对象的组合,即把类或对象结合在一起形成一个更大的结构。

        适配器模式:

                通过将一个类的方法接口转换成客户希望的另一个接口,将原来不兼容的两个类融合在一起。

        装饰器模式:

                动态的给对象添加新的功能。

        代理模式:

                为其它对象(客户端)提供一个代理以便控制其他对象对这个对象的访问。

        外观模式:

                对外提供一个统一的接口来访问子系统的接口。

        桥接模式:        

                将两个能够独立变化的部分(抽象和实现部分)分离开来,使它们都可以独立的变化。

        组合模式:

                将整体与局部(树形结构)进行递归组合,让客户端能够以一种的方式对其进行处理。

        享元模式:

                通过共享技术(对象池)来有效的支持大量细粒度的对象,减少重复对象的创建。

        行为型模式:

                行为型模式特别关注对象之间的通信,主要是描述类或者对象是怎样交互和分配职责的。

        策略模式:

                封装不同的算法,使算法之间能互相替换。

        模板方法模式:

                定义一套流程模板,根据需要实现模板中的操作(即将一些步骤延迟到子类实现)。

        观察者模式:

                状态发生改变时通知观察者,是对象间的一对多的依赖关系。

        迭代器模式:

                在不暴露该对象的内部结构的情况下,提供一种方法顺序访问一个聚合对象中的各个元素。

        责任链模式:

                将请求的发送者和接收者解耦,让事件沿着链去处理,使得多个对象都有处理这个请求的机会。

        命令模式:        

                将命令请求封装为一个对象,使得可以用不同的请求来进行参数化。

        备忘录模式:

                在不破坏封装的前提下,保存对象的内部状态,以便于在需要时进行恢复。

        状态模式:

                允许一个对象在其对象内部状态改变时改变它的行为,使其可以根据不同的状态做出不同的行为。

        访问者模式:

                不改变数据结构的前提下,定义新的操作行为。

        中介者模式(仲裁者模式):

                用一个中介对象来封装一系列的对象交互。将网状结构转变为星型结构,中央节点是中介对象,使得所有行为都通过中介。

        解释器模式:

                给定一个语言,定义它的文法的一种表示,并定义一个解释器对其进行解释。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值