网站建设的公司地址,.net网站开发实训体会,网络营销与网络推广的关系,广州市网站建设科技公司目录 1、项目需求2、传统方案解决鸭子问题的分析和代码实现3、传统方式实现存在的问题分析和解决方案4、策略模式基本介绍5、使用策略模式解决鸭子问题6、策略模式的注意事项和细节7、策略模式的使用场景 以具体项目来演示为什么需要策略模式#xff0c;策略模式的优点#x… 目录 1、项目需求2、传统方案解决鸭子问题的分析和代码实现3、传统方式实现存在的问题分析和解决方案4、策略模式基本介绍5、使用策略模式解决鸭子问题6、策略模式的注意事项和细节7、策略模式的使用场景 以具体项目来演示为什么需要策略模式策略模式的优点以及策略模式使用过程中需要注意的问题
1、项目需求
有各种有鸭子野鸭、北京鸭子、烤鸭鸭子有各种行为飞、叫但是各种鸭子的行为又不完全一样显示鸭子信息 2、传统方案解决鸭子问题的分析和代码实现
1传统设计方案
设计一个抽象父类 duck , 定义各种行为然后各种鸭子种类继承该父类重新行为方法
2代码实现
public abstract class Duck {public abstract void display();public void quack() {System.out.println(鸭子嘎嘎叫~~~);}public void swim() {System.out.println(鸭子会游泳~~~);}public void fly() {System.out.println(鸭子会飞翔~~~);}
}public class BjDuck extends Duck{Overridepublic void display() {System.out.println(这是一直北京鸭子~~~~);}Overridepublic void fly() {System.out.println(北京鸭子不能飞翔);}
} 3、传统方式实现存在的问题分析和解决方案
1存在的问题 不同子类的行为是不一样的所以每次定义一个子类就需要重写父类的行为导致代码太耦合
2解决方式 使用策略模式 4、策略模式基本介绍
策略模式指对象有某个行为但是在不同的场景中该行为有不同的实现算法
策略模式体现了几个原则
把变化的代码从不变的代码中抽离出来针对接口编程而不是类多采用组合聚合少用继承的模式
策略模式基本类图
5、使用策略模式解决鸭子问题
封装行为接口实现算法族超类中放行为的接口对象在子类中具体设定行为对象
1 定义行为接口行为接口的具体实现类
// 飞行行为
public interface FlyBehavior {void fly();
}public class NoflyBehavior implements FlyBehavior{Overridepublic void fly() {System.out.println(不会飞);}
}public class GoodflyBehavior implements FlyBehavior{Overridepublic void fly() {System.out.println(具备很好的飞行技能);}
}// 叫行为
public interface QuackBehavior {void quack();
}
public class NoQuackBehavior implements QuackBehavior {Overridepublic void quack() {System.out.println(不能叫);}
}
public class GeGeQuackBehavior implements QuackBehavior{Overridepublic void quack() {System.out.println(咯咯叫);}
}2超类中聚合行为接口
public abstract class Duck {FlyBehavior flyBehavior;QuackBehavior quackBehavior;public abstract void display();public void fly() {flyBehavior.fly();}public void quack() {quackBehavior.quack();}
}
3实现类中设置具体的行为对象
public class BjDuck extends Duck{public BjDuck() {this.flyBehavior new BadflyBehavior();this.quackBehavior new GeGeQuackBehavior();}Overridepublic void display() {System.out.println(我叫做北京鸭子!!);}}4测试
public class Test {public static void main(String[] args) {BjDuck bjDuck new BjDuck();bjDuck.display();bjDuck.fly();bjDuck.quack();}
}6、策略模式的注意事项和细节
策略模式的关键是分析项目中的变化和不变部分核心思想多使用组合少使用继承用行为类进行组合而不是行为的继承
需要注意的是每添加一个策略就要增加一个类当策略过多时会导致类数目庞大
7、策略模式的使用场景
https://blog.csdn.net/m4330187/article/details/121292879