2021-01-30 python策略模式实践

需求场景:

给定多种路径的http链接,解析不同url的参数,根据参数获取数据,组织数据发送到特定接口。

实现思路:

处理不同url的过程有共同点,如发送数据的格式、接收接口的接口相同,都需要从url解析参数,获取、组织数据都需要使用数据库连接资源,

不同点是获取、组织数据的逻辑不同。

因此设计一个父类,不同的url设计一个对应的子类。

父类:

1.持有数据库连接,同时实现数据库连接释放方法(若子类较多,该部分可以单独拆分,避免浪费资源)

2.抽象一个匹配接口,传入url,返回是否由当前策略处理,具体由子类实现

2.抽象一个组织数据接口,具体由子类实现

3.发送数据接口,调用组织数据接口,完成数据发送

子类

1.实现匹配接口,正则表达式匹配url

2.实现组织数据接口,实现获取和组织数据的逻辑

为了方便使用这些不同的策略,设计一个上下文类持有这些不同的子类

上下文类:

1.持有父类引用指向不同子类实例的列表

2.实现选择策略接口,传入一个url, 遍历子类实例列表,调用其匹配接口,若匹配则返回该子类实例

3.实现资源释放接口,遍历子类实例列表,分别调用其释放数据库连接方法

处理的时候构造一个上下文对象,处理结束后调用资源释放接口即可。

若按过程方法去实现这个需求,肯定会有多个if-else逻辑,对后来人维护不友好。

简单抽象一下,不用手写多个if-else的判断逻辑,增加删除一个策略也比较简单,代码维护相对容易。

原文地址:https://www.cnblogs.com/imgax/p/14348985.html