24种设计模式复习总结

本文深入探讨了面向对象编程中的20种经典设计模式,包括工厂模式、抽象工厂模式、单例模式、创建者模式等,详细阐述了它们的原理、应用场景以及如何在实际开发中应用这些模式以提高代码的可读性和可维护性。

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

Factory Pattern(工厂模式):1. 创建对象的接口,封装对象的创建;2. 使具体化类的工作延迟到子类中。(维护一类对象)

AbstractFactory Pattern(抽象工厂 模型):该模式将一组对象的创建封装到一个用于创建对象的类中。(解决的问题:要创建一组或者相互依赖的对象)。


Singleton Pattern(单例模式):该模式在面向纯粹的面向对象的范式中用于创建唯一的实例,值得注意的是Singleton不能被实例化,因此将其构造函数声明为protected或private类型。Singleton Pattern经常与Factory Pattern结合使用,因为Factory对象只能有一个。



Builder Pattern(创建者模式):将一个复杂的对象的构建与它的表示分离,使得同样的构建构成可以创建不同的表示。如建筑师画图纸,而工人建造房屋。


Prototype Pattern(原型模式):提供一个通过已存在对象进行新对象创建的接口(clone)。(浅拷贝和深拷贝)



Bridge Pattern(桥梁模式):将抽象部分与实现部分分开实现,使他们都可以独立地变化,并使用组合的方式将多维度的抽象方法联系在一起。比如咖啡分小杯、中杯、大杯以及加奶和不加奶,则抽象部分为:小杯、中杯、大杯,行为为:加奶和不加奶。

Adapter Pattern(适配器模式):适配就是由“源”到“目标”的适配,而当中链接两者的关系就是适配器。它负责把“源”过度到“目标”。将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式分为两种:① 面向类的设计模式;② 面向对象的设计模式。

① 面向类的适配器:该模式使用继承和接口实现的方式复用需要适配器的类。

② 面向对象的适配器:该模式使用组合的方式实现需要复用的类。



 Decorator模式(装饰模式):动态地给一个对象添加一些额外的职责。



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


Flyweight模式(享元模式):使用共享技术实现元素的共享。


Facade模式(外观模式):要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。  



 Proxy模式(代理模式):不通过要操作对象本身去操作这个对象,而是通过一个能控制这个对象的对象(代理)去操作这个对象。


Template模式(模板模式):逻辑框架相同,但是对某一个业务逻辑(算法实现)在不同的对象中有不同的实现方式。Template采用继承的方式实现这一点(strategy模式采用组合的方式去解决)。



Strategy模式(策略模式):解决与Template模式相同(类似)的问题。Strategy模式将逻辑(算法)封装到一个类中,通过组合的方式将具体算法的实现在组合对象中实现,通过委托的方式将抽象接口的实现委托给组合对象实现。



State模式(状态模式):人或事物有不同的状态,每种状态又有其特定的表现,在这些状态下又使一个状态转移到另一个不同的状态。



Observer模式(观察者模式):Observer模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。(如视图-文档)


Memento模式(备忘模式):在不破坏封装性的情况下,捕获并保存一个类的内部状态,可以利用该保存的状态实施恢复操作。


Mediator模式(中介者模式):用一个中介对象来封装一系列关于对象交互行为。如MVC中的Controller。



Command模式(命令模式):命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。


Visitor模式(访问者模式):在不改变原有类结构的基础上不断添加新的功能。缺点:破坏了封装性;Concretement扩展困难:每添加一个Element的子类,就要修改Visitor的接口,使得可以提供给这个新增加的子类的访问机制。


Chain of Responsibility模式(职责链模式):Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去。


Iterator模式(迭代模式):提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。具体应用容器类(Vector、Set等)。


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

解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。实例应用:正则表达式。


最后:各个模式的使用不一定是相互独立,而是可以融合。

 

总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 二、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科 3、依赖倒转原则(Dependence Inversion Principle) 这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。 4、接口隔离原则(Interface Segregation Principle) 这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。 5、迪米特法则(最少知道原则)(Demeter Principle) 为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。 6、合成复用原则(Composite Reuse Principle) 原则是尽量使用合成/聚合的方式,而不是使用继承。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值