设计模式总结

本文详细阐述了设计模式的概念,包括六大原则和设计模式的分类。探讨了创建型、结构型、行为型模式的特点及应用,如简单工厂模式、策略模式、单一职责原则等。并对比了每种模式与原则之间的联系与区别,如原型模式与简单工厂模式、装饰模式与代理模式等。文章旨在帮助读者理解设计模式如何提高软件的可维护性、扩展性和灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 设计模式通过封装的变化,对象之间的松散耦合,针对接口编程来达到复用的效果。同时使用设计模式具有以维护、易扩展,灵活性好等特点。

    六大原则:

    单一职责原则,开放—封闭原则,依赖倒转原则,里氏原则,最少知识原则,合成/聚合复用原则

     

    设计模式分为三大类:

    创建型:单例模式、抽象模式、建造者模式、工厂模式、原型模式

    结构型:适配器模式、桥接模式、装饰模式、外观模式、享元模式、代理模式

    行为型:模板方法,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,职责链模式,访问者模式

     

    创建型模式:以原型模式为例,是可以不需要考虑内在因素,创建出对象的模式。

    结构型:在整个项目架构上所必须的组成成分,例如桥接模式,连接抽象部和实现部分的一种模式。

    单例模式一个类有一个实例,并且提供一个访问他的全局访问点。

    行为型:以享元模式为例,运用共享技术实现共享的过程。

     

    关于每种模式和原则,我有一些自己的理解:

    1简单工厂模式:一种惯用的模式,甚至不能称之为一种模式,而是编程人员下意识使用的一种方法。面向对象编程,类的划分是为了封装,分类的基础是抽象,具有相同属性和功能的对象的抽象集才称之为类。

     2策略模式:定义了算法家族,分别封装起来,让他们之间相互提花,此模式算法的变化不会对客户产生影响。

    注:减少算法类与使用算法类之间的耦合;用相同的方法调用所有的算法类。

     3单一职责:就一个类而言,应该仅有一个引起他变化的原因。

    注:职责单一,才能更专一的解决问题。

     4开放-封闭原则:软件实体(类,模块,函数)可以扩展,不能更改。

    注:面向对象的核心,建立的类、模块、函数都是封装好的,不能修改封装好的类。

    5原则:

    依赖倒转原则:

    1. 高层模块不能依赖底层模块,两者都应该依赖抽象对象。
    2. 抽象不依赖细节,细节依赖抽象。

    注:我们做的项目大多要访问数据库,所以把访问数据库的代码写成函数,每次项目都去调用这些函数,即是高层模块依赖底层模块,但是客户希望访问不同的数据库或储存方式。

    里氏代换原则:子类必须能够替换掉他们的父类。

                                                                                                                                                                   

    6.装饰模式:(Decorator)动态给对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。

     

    7代理模式:为其他对象提供一种failing以控制对这个对象的访问。

     

    8工厂方法模式:定义一个用于创建对象的接口,人那个子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。

    9原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    注:原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。

    与简单工厂模式和工厂方法模式比较。

     

    10模板方法模式:定义一个操作中的短发的骨架,而这些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。

    11迪米特法则:又称最少只是原则---如果两个类不必彼此之间直接通信,那么这两个类就不应当发生直接的相互作用,如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用。

    12外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,使这个接口使得子系统更加容易使用。

     

    13建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

    14观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听同一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。

    注:观察者模式的动机:将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象的一致性。我们不希望为了维护一致性而使各类紧密耦合,这样会给维护、扩展和重用带来不便。观察者所做的工作其实就是在接触耦合,让耦合的双方都依赖于抽象,而不是具体,从而使各自的变化都不户影响另一边的变化。

    15抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

    优点:易于交换产品系列

    缺点:没有自增功能。

    反射+抽象工厂----可以解决自增功能。

    16状态模式:对一个对象的内在状态改变时允许改变其行为,这个对象看起来像改变了其类(因为类的属性变了,所以像是改变了类)。

    17适配器模式:(Adapter)将一个类的接口转换成客户希望的另外一个接口。 

    18备忘录模式:(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。

    19组合模式:(Composite)将对象组合成树形结构来表示部分整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

    20迭代器模式:(Iterator)提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

    21单例模式:(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。

    22桥接模式:(Bridge)将抽象部分与它的实现部分分离,使他们都可以独立的变化。

    合成/聚合复用原则:(CARP)尽量使用合成/聚合,尽量不要使用类继承。

    23命令模式:(Command)将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队会记录请求日志,以及支持可撤销的操作。

    24职责链模式:(Chain of Responsiblity)使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间爱你的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

    25中介者模式:(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

    26享元模式:(Flyweight)运用共享技术有效的支持大量细粒度的对象。

    27解释器模式:(interpreter)给定一个语言,定义它的文法的一种表示,并定义一个解释器使用该表示来解释语言中的句子。

    28访问者模式:(Visitor)表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。


    这些设计模式主要讲的就是抽象,封装与多态的问题,期间还涉及到接口的问题。下面是我自己的一些理解:


    接口与抽象类

    接口:自身提供的与外界交流的抽象化物。

    抽象类:在现实世界中实例化没有意义的一些类。


    观察者模式和职责连模式

    观察者模式:一对多,多个观察者监听一个主题对象,依赖于抽象;

    职责链模式:多个对象都有机会处理一个请求,将这个对象连成链来传递请求。


    外观模式和抽象工厂模式:

    外观模式:定义一个高层接口,提供一致的界面

    抽象工厂模式:创建一个一系列相关或相互依赖对象的接口


    原型模式和模板模式:

    原型模式:用原型实例指定创建的对象,再拷贝新创建的对象,所以在原型实例中已经定义好了所有的东西了。

    模板模式:定义算法骨架,一些步骤延迟到子类,使子类在不改变算法结构也可重新定义某些特定的步骤


    迭代器模式和单例模式:

    迭代器模式:顺序访问聚合对象中的元素。

    单例模式:只有一个实例,并且提供一个它的全局访问点


    状态模式、备忘录模式和适配器:

    状态模式:针对复杂条件,简化逻辑判断;

    备忘录模式:在对象外保存捕捉到的内部状态,并实现回滚

    适配器:通过转换接口,增强兼容性

     

     

     

     

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值