《Head First 设计模式》 第一章 设计模式入门

 

原则

模式

实践

待了解

关联

 

原则

1、封装变化

找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起

2、多用组合,少用继承

3、针对接口编程,而不是不针对实现编程

 

模式

策略模式

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

图 23. 策略模式的结构

Context:使用不同策略的环境,它可以根据自身的条件选择不同的策略实现类来完成所要的操作。它持有一个策略实例的引用。创建具体策略对象的方法也可以由他完成。
Strategy:抽象策略,定义每个策略都要实现的策略方法
ConcreteStrategy:具体策略实现类,实现抽象策略中定义的策略方法

图及说明来源于:

https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/index.html

 

与工厂模式的差别

工厂模式是创建型模式 ,它关注对象创建,提供创建对象的接口. 让对象的创建与具体的使用客户无关。
策略模式是对象行为型模式 ,它关注行为和算法的封装 。它定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换。使得算法可独立于使用它的客户而变化

用一个例子说明:
我们去旅行。策略模式的做法:有几种方案供你选择旅行,选择火车好呢还是骑自行车,完全有客户自行决定去构建旅行方案(比如你自己需要去买火车票,或者机票)。而工厂模式是你决定哪种旅行方案后,不用关注这旅行方案怎么给你创建,也就是说你告诉我方案的名称就可以了,然后由工厂代替你去构建具体方案(工厂代替你去买火车票)。

来源于:

https://blog.csdn.net/hguisu/article/details/7558249

 

实践

书中的实例,看了这张图,就能回想起策略模式的实际应用方式

图片来源于《Head First 设计模式》 第 22 页

 

# 待了解

第 11、12 页,关于接口、实现、超类型,看不大明白

 

关联

哪里用到了策略模式?

使用 Spring 时,自动注入 service 类(注入时使用的是接口作为变量),就是使用了策略模式,当我们调用 service 的方法时,调用的是 service 的具体实现类的对应方法

 

不错的博客

https://blog.csdn.net/hguisu/article/details/7558249

 

posted @ 2020-05-05 22:01  stoneBlog  阅读(171)  评论(0编辑  收藏  举报