设计模式相关理解

设计模式是软件设计中的一套经验总结,分为创建型、结构型和行为类模式。本文介绍了工厂方法、适配器、装饰器等模式,强调了它们在代码扩展性、接口转换和功能动态增加等方面的优势,同时指出过度使用可能带来的复杂性问题。
摘要由CSDN通过智能技术生成

设计模式:

设计模式:一般指软件设计模式。 软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

设计模式类型:

创建型模式:关注对象创建过程

结构型模式:处理类或对象的组合

行为类模式:描述类或对象交互和分配责任的方式

课程中只涉及其中的七种,它们通常采用继承或委托(delegation)的方式使得程序易于扩展。

Creational patterns创建型模式:

 Factory Method pattern工厂方法模式

       通常的创建类的实例的方式是采用new关键字,这需要我们知道要创建实例的类的名字,不过在一些特定情况下,例如client不知道/不确定/不关心要创建哪个具体类的实例(回忆在Lab2中创建Graph<L>接口的实现类对象,client不关心这个Graph是怎样实现),或者不想在client代码中指明要创建的实例时,这样的方法就显得不那么合适。这时我们可以采用工厂方法来创建实例,定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。

优点:

用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;

在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

缺点:

每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,增加了系统的复杂度

Structural patterns结构型模式:

 Adapter 适配器模式:加个“适配器”以便于复用

将一个类的接口转换成客户希望的另外一个接口。

Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。

适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

该模式的主要优点如下:

客户端通过适配器可以透明地调用目标接口。

复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。

将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。

其缺点是:

对类适配器来说,更换适配器的实现过程比较复杂。

Decorator 装饰器模式

装饰器模式:装饰边框与被装饰物的一致性

装饰(Decorator)模式的定义:

指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

装饰(Decorator)模式的主要优点有:

采用装饰模式扩展对象的功能比采用继承方式更加灵活。

可以设计出多个不同的具体装饰类,创造出多个不同行为的组合。

其主要缺点是:

装饰模式增加了许多子类,如果过度使用会使程序变得很复杂。

装饰器模式通常用于对原本的ADT添加一些特性的任意组合,实际上是让ADT的方法拥有扩展的功能(而不是扩展ADT的方法种类),表现上通常是递归的、一层套一层的new。Decorator模式采用继承+委托(聚合式)实现,修饰功能主要体现在对通用操作的重写上。

Behavioral patterns 行为类模式:

Strategy 策略模式

即针对同一任务,给出不同的策略给客户端选择,这样使得我们代码实现有多样性,不是单一的实现。

策略模式

有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里。解决方案是为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例。

Template Method 模板模式

模板模式的特点是步骤是相同的,但是每一个步骤的实现可以有不同的选择,共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现。模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。这就像一个模板一样,步骤是模板挖好的槽,我们往里填不同的东西。通常使用继承和重写实现模板模式。

Iterator迭代器模式

客户端希望对放入容器/集合类的一组ADT对象进行遍历访问,而无需关心容器的具体类型,也就是说,不管对象被放进哪里,都应该提供同样的遍历方式,这时采用Iterator Pattern。

Visitor 访问者模式

本质上是将数据和作用于数据上的某种/些特定操作分离开来,即对特定类型object的特定操作(visit),在运行时将二者动态绑定到一起,该操作可以灵活更改,无需更改被visit的类。为ADT预留一个将来可扩展功能的“接入点”,外部实现的功能代码可以在不改变ADT本身的情况下在需要时通过delegation接入ADT。

visitor是站在外部client的角度,灵活增加对ADT的各种不同操作(哪怕ADT没实现该操作),strategy则是站在内部ADT的角度,灵活变化对其内部功能的不同配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值