软件设计模式-策略模式

阅读数:81 评论数:0

跳转到新版页面

分类

架构学

正文

策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

设计原则多用组合,少用继承。封装变化。针对接口编程,不针对实现编程。

原则和模式可以在软件开发生命的任何阶段应用。

这里把鸭子的飞行的行为想像为“一族算法”。

封装变化:把会变化的部分取出并封装起来,便以后可以轻易地改动或扩充此部分,而不影响不需要变化的部分。

针对接口编程,关键就是在多态。利用多态,程序可以针对超类型编程,执行时会根据实际状况执行到真正的行为。例如:有一个抽象对象Animal,有一个具体的实现Dog,那么:

“针对实现编程”

Dog d = new Dog();
d.bark();

"针对接口编程"

Animal animal = new Dog();
animal.makeSound();

Spring框架中资源访问Resource接口,是具体资源访问策略的抽象,可以看做是一种策略模式的应用。

最常用的有四个:

(1)ClassPathResource:以类路径的方式进行访问。

(2)FileSystemResource:以文件系统绝对路径的方式进行访问。

(3)ServletContextResource:以相对于web应用根目录的方式进行访问。

(4)UrlResource:通过java.net.URL来访问资源,当然也支持File格式,如“file:”。




相关推荐

观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 设计原则:</st

装饰者模式:动态将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 设计原则:类应该对扩展

设计原则:要依赖抽象,不要依赖具体类。 这个原则听起来很像是“针对接口编程,不针对实现编程”,然而这里更强调“抽象”,不能让高层组件依赖底层组件,而且,不管高层或低层组件,“两者”应该依赖于抽象。 一

一、概述 单件模式:确保一个类只有一个实例,并提供一个全局访问点。对于频繁使用的对象,特别是重量级对象,可以省略创建对象所花费的时间,同时降低GC压力。 采用私有构造器。Spring容器中的Bean默

一、概述 命令模式:将动作的请求者从动作的执行者中解耦。 发起请求的对象是调用者,调用者只要调用命令对象的execute()方法就可以让接收者工作,而不必知道具体的接收者对象是谁、是如何工作的。 命

一、概述 适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 以上是对象适配器的图。 以上是类适配器的图。

外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 适配器是包装一个类,而外观模式是包装多个

模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 算法内的步骤不要切割的太细,否则会较没有弹性。 钩子是

迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各

组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。使用组合模式,我们能把相同的操作应用在组合和个别对象上。