软件构造博客5 设计模式

创建型模式:

工厂模式:定义一个对象的接口,但是由子类决定用哪个类来实例化,从而将类的实例化延迟至子类。工厂方法用于客户端需要根据一些参数创建一个实例的场景。

 

 静态工厂方法既可以在ADT内部实现,也可以构造单独的工厂类,这种方法与new相比就有指定的更有意义的名称,而且不必每次调用时都创建新的工厂对象,还可以返回原返回类型的任意子类型。但是,工厂方法意味着每增加一种产品都需要增加一个新的工厂子类。

结构型模式

适配器模式:目的是将某个类或者接口转换为用户期望的其他形式,能解决类之间接口不兼容的问题,而且通过增加一个接口将已存在的子类封装起来,使得用户面向接口编程,从而隐藏了具体子类。

 

 适配器常用的模式就是继承和指派,但是这种组合继承会引发组合爆炸导致大量代码重复。

装饰器模式:为对象增加不同侧面的特性,每个子类只负责一个效果,通过指派机制增加到对象上,本质上是一个递归方式。具体过程为用接口定义装饰物执行的公共操作,然后将其实对象在接口的基础上用通用的方法放到对象中。Decorator是一个抽象类,是所有装饰类的基类,里面包含成员变量comp指向的被装饰对象。

装饰器在运行时形成(而继承是编译),并由多个对象组成,并且可以与不同的装饰器混合。

表现型模式

策略模式:有多种算法实现同一任务,但需要根据用户需要动态切换算法。

解决方案是,为不同的实现算法构造抽象接口,利用指派在运行时动态传入用户倾向的算法类实例。

 

 模板模式:不同的用户实现类似功能,即步骤一样,具体方法不同。解决方案是共性的步骤在抽象类中实现,差异化的步骤在各个子类中实现。使用继承和重写实现模板模式,这种方法经常应用与框架中。

 

 

迭代器模式:客户端希望对放入容器或集合类的一组ADT对象进行遍历访问,而无需关心容器的具体类型。即不管在哪里,迭代器提供相同的遍历模式。

 

 访问者模式:对特定类型对象的特定操作(visit),在运行时将二者动态地绑定到一起,该操作可以灵活修改,无需更改被visit的类。为ADT预留了一个将来可扩展的功能接入点,外部实现的功能代码可以在不改变ADT本身的情况下通过指派加入到ADT中。

 

 

访问者和策略虽然都来自指派,但是访问者强调外部定义对ADT的某种操作,它与ADT关系不大(仅使用),所以ADT内部只需开放accept(visitor)即可,用户对齐外部调用;而策略强调对ADT内部某种功能的算法灵活调换,它们是ADT的一部分,只不过是被指派到外部策略类里。

posted @ 2022-06-22 23:02  Asteraria  阅读(18)  评论(0编辑  收藏  举报