设计模式--策略模式
2021-07-05 18:51:48 5 举报
Head First设计模式里的策略模式
作者其他创作
大纲/内容
MallardDuck
disply()
类图表示: 继承 接口 有一个
委托给flybehavior
关联关系,表示A知道B,但 B不知道A;关联对象通常是以成员变量的形式实现的
再次改良(封装行为)【委托】【策略模式】【组合】
RubberDuck
quack(){ //覆盖成吱吱叫}dispay(){ //外观是橡皮鸭}
Quack
quack(){ //呱呱叫}
问题:所有的子类鸭子都继承了父类的行为,即使这个鸭子不需要,如橡皮鸭不应该会飞
RedheadDuck
display()fly()quack()
OO原则封装变化多用组合,少用继承针对接口编程,不针对实现编程
表示B由A组成,强聚合关系,B不存在A也就不存在
设计原则:把需要改变的独立出来.设计原则:针对接口编程,而不是针对实现编程.
Squeak
quack(){ //吱吱叫}
DecoyDuck
display()
表示继承抽象类(接口)
MallarDuck
委托给quackbehavior(判断使用哪个叫声类)
表示关联的关系
Quackable
quack()
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
OO基础 抽象 封装 多态 继承
描述不同类的对象之间的结构关系,关联关系默认不强调方向,在最终代码中,关联对象通常是以成员变量的形式实现的
表示依赖的关系
表示聚合的关系
案例:鸭子类(叫声不同,是否会飞)
dispay()//外观是红头
OO模式策略模式—定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
FlyWithWings
fly(){ //实现鸭子的飞行}
flyNoWay
fly(){ //什么都不做}
改良设计(使用接口)
表示组合的关系
表示继承非抽象类
dispay()//外观是绿头
表示A由B组成
表示继承的关系
Duck
swim()display()//鸭子的其他方法
FlyBehavior flyBehaviorQuackBehavior quackBehavior
swim()display()performQuack()performFly() setFlyBehavior() //动态设置飞行行为setQuackBehavior() //动态设置行为
表示A依赖于B;他描述一个对象在运行期间会用到另一个对象的关系,与关联关系不同的是,它是一种临时性的关系;在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性;
表示实现的关系
FlyBehavior
fly()
原始设计(使用继承)
QuackBehavior
MuteQuack
quack(){ //不会叫}
Flyable
fly()swim()quack()display()//鸭子的其他方法
display()quack()
0 条评论
下一页