策略模式学习笔记

策略模式定义:将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现,并使它们可以相互替换,从而导致客户端程序独立于算法的改变。

策略模式区别于模板方法模式:

- 策略模式强调整体算法,即将整个算法交由用户实现。(采用组合方式)

- 模板方法模式强调部分算法,即整体算法不变情况下,部分子算法实现交由用户实现。(采用继承方式)

设计原则:

- 找出不变部分抽象成接口(鸭子鸣叫行为),找出变化部分使用具体实现。(鸭子不叫,鸭子嘎嘎叫,鸭子唧唧叫)

- 面向接口编程,而不是面向实现编程。

- 多用组合,少用继承(组合优于继承原则)

策略模式的实现:

- 通过分离变化得出的策略接口Strategy - Strategy的实现类

- 客户端程序有一个Strategy

- 在客户端程序中选择/组装正确的Strategy实现

策略模式的优点:

1. 使用了组合,使架构更加灵活

2. 富有弹性,可以较好的应对变化(开-闭原则)

3. 更好的代码复用性(相对于继承)

4. 消除大量的条件语句

策略模式的缺点:

1. 客户端代码需要了解每个策略实现的细节

2. 增加了对象的数目(随便时间推移,策略实现类会越来越多)

策略模式的适用场景:

- 许多相关的类仅仅是行为差异

- 运行时选取不同的算法变体

- 代码中存在多个条件判断语句

时间: 2024-10-28 15:47:48

策略模式学习笔记的相关文章

WPF-MVVM模式学习笔记3——MVVM概念再次挖掘

通过上篇文章<WPF-MVVM模式学习笔记2--MVVM简单样例>中举了一个例子,我对MVVM大概有了一个比较浅显的意思.同时,看过前两篇文章的人,也知道我的这个系列的文章大多数来源于其他的博客,我其实只是起了一个汇总的作用,毕竟我也是在学习,肯定是要去网络上学习别人的笔记喽.本篇文章将以温故而知新的方式再次去理解MVVM,力求对MVVM的认识再深一个层次. 1.再看"M-V-VM" M:即Model,由现实世界抽象出来的模型. V:即View,视图,界面,该界面与用户输入

大端模式 && 小端模式学习笔记

Big-Endian和Little-Endian的定义如下:1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端.2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端. 不同字节序如何存储数据? 看看两种方式如何存储数据,假设从地址0x00000001处开始存储十六进制数0x12345678,那么 Bit-endian 如此存放(按原来顺序存储)0x00000001           -- 120x00000002 

策略模式 -- 学习HeadFirst设计模式记录

策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 将算法族从对象中独立出来,然后在对象中通过组合的方式,定义算法对象,再委托该对象处理算法. 单一原则:封装变化: 多用组合,少用继承: 针对接口编程,不针对实现编程:

策略模式学习2---原理

虽然使用继承可以满足现在各种的需求但是当客户的要求改变的时候我们一旦改变了超类的一些东西将会影响到子类中的许多东西: 继承的问题: 对超类的局部改变会影响其他部分.会有影响溢出的问题存在. 所以在超类里面如果挖个坑,在子类继承的时候就会出现许多需求问题,这些坑都需要我们自己去填.为了开发的工作量的减少我们就需要使用我们的OO设计原则了. 当我遇到一个新的项目的时候我应该考虑这些问题来解决我的项目: 需要新的设计方式来满足项目的扩展性:降低复杂程度: 分析项目的变化部分和不变部分提取变化的部分,抽

策略模式学习

将算法的定义和使用分离,这就是策略模式所要解决的问题. 策略模式的主要目的是将算法的定义与使用分开,也就是将算法的行为和环境分开. 如在Discount类中,该类为具体的算法类,该类只有算法的行为,也就是计算价格的行为.而在环境类中,环境类定义了算法使用的环境. 策略模式提供了一种可以替换继承关系的办法.算法的使用和算法本身混在一起,不符合“单一职责原则”,如果决定使用哪一种算法的逻辑和该算法本身混合在一起,就不可能再独立演化:而且使用继承无法实现算法或行为在程序运行时的动态切换. 策略模式适用

设计模式之策略模式(笔记)

策略模式:它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式封装了变化,减少了各种算法类与使用算法类之间的耦合. 例如做一个商场收银软件,定义三种收费方式,正常收费,打8折,满300送100.这三种收费方式实际上就是具体的三种策略方式. 首先定义一个抽象算法类CashSuper,定义支持所有算法的公共接口 public abstract class CashSuper { //应付金额抽象方法 public abstract doub

接口、抽象类应用之策略模式学习

接口应用之策略模式 策略模式(Strategy Pattern),定义了一系列算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于它的客户应用而独立变化. OO设计原则 面向接口编程(面向抽象编程) 封装变化 多用组合,少用继承 // 测试类(包含main方法) public class StrategyPattern { public static void main(String[] args) { BaseService userService = new UserServi

[GeekBand] 设计模式——工厂模式学习笔记

 本文参考文献:GeekBand课堂内容,授课老师:李建忠 :大话设计模式 其余的模式方法请自行查看Geekband相关课程,在此不累述. 这周的课题是: 针对DrawingSystem中的基类Shape和各个子类Line.Rec.Circle.为支持更多的形状子类,请使用某种模式来支持灵活地创建它们.使用松耦合面向对象设计方法和思想,可使用伪码表示设计. 课程中提到了四种模式,“工厂方法”.“抽象工厂”.“原型模式”.“构建器”模式.最后聚焦在了“工厂方法”和“抽象工厂”这两种方法,那么第一个

面向对象编程中设计模式学习笔记

上学期学的OOP,最近把期末复习笔记拿出来温习,共享一发. Polymorphism means many different form If you have inheritance, you have polymorphism Inheritance Polymorphism Abstraction Encapsulation Information hiding Loose coupling Hello.exe (an executable) Hello.dll (an assembly