设计模式-策略模式

背景

有各种鸭子,野鸭、北京鸭、玩具鸭,有各个行为,比如飞、叫

传统思路

创建一个Duck父类,在这个父类中声明鸭子的共同行为与属性,所有鸭子继承自这个父类。

问题:

继承时,一些子类可能修改父类的大部分行为与属性,会有溢出效应。

基本介绍

定义一些算法族,分别封装起来,让他们之间可以相互替换。把算法封装成接口,聚合到使用类中

把变化的代码从不变的代码中分离出来。

用聚合和组合的方式代替继承。

将使用层和算法实现层分离开。

三个角色

①Strategy:抽象接口,定义一个算法,可以有多个子类,也就是说一个算法可以有多种实现

②ConcreteStrategy:实现抽象接口,具体的算法。

③Context:构造器,根据需求调用指定需要的ConcreteStrategy。

具体实现

创建FlyBehavior和QuackBehavior接口,定义fly(),quack()方法。

创建NoFlyBehavior,GoodFlyBehaviour等具体的行为类实现FlyBehavior和QuackBehavior接口。

创建Duck父类,在父类中声明FlyingBehavior和QuackBehavior成员变量。

创建具体鸭子类,如WildDuck,ToyDuck等,把具体的行为类(如NoFlyBehavior)赋值给在父类中声明的成员变量。

相关推荐
晨米酱21 小时前
JavaScript 中"对象即函数"设计模式
前端·设计模式
数据智能老司机1 天前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机1 天前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机1 天前
精通 Python 设计模式——性能模式
python·设计模式·架构
使一颗心免于哀伤1 天前
《设计模式之禅》笔记摘录 - 21.状态模式
笔记·设计模式
数据智能老司机2 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
数据智能老司机2 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
烛阴2 天前
【TS 设计模式完全指南】懒加载、缓存与权限控制:代理模式在 TypeScript 中的三大妙用
javascript·设计模式·typescript
李广坤2 天前
工厂模式
设计模式