📄 simulatingduck.java
字号:
/*
* 策略模式:定义一族算法,分别封装起来,让它们之间可以互相替换,该模式让算法的变化独立于使用算法的客户
*
* 设计原则1:将应用中可能需要变化之处独立出来,不要就将它们和不需要变化的代码混在一起
* 设计原则2:针对接口编程,而不是针对实现编程
* */
//之前可以看看P4的鸭子类的原始继承设计,及可能产生的一些问题
//不同的鸭子的飞行行为不同
interface FlyBehavior{
public void fly();
}
//叫声也不同
interface QuackBehavior{
public void quack();
}
//具体的飞行类
class FlyWithWings implements FlyBehavior{
public void fly(){
System.out.println("有真翅膀的鸭子的飞行");
}
}
class FlyNoWay implements FlyBehavior{
public void fly(){
System.out.println("翅膀假的,鸭子不会飞");
}
}
//具体的叫声类
class Quack implements QuackBehavior{
public void quack(){
System.out.println("鸭子呱呱叫");
}
}
class Squeak implements QuackBehavior{
public void quack(){
System.out.println("鸭子吱吱叫");
}
}
class MuteQuack implements QuackBehavior{
public void quack(){
System.out.println("鸭子不会叫");
}
}
abstract class Duck{
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck(){}
public abstract void display();
//由具体的鸭子自己实现各自的行为
public void performFly(){
flyBehavior.fly();
}
public void performquack(){
quackBehavior.quack();
}
public void swim(){ //共同的行为
System.out.println("所有鸭子都能游泳");
}
//受益于这种设计,可以动态改变鸭子的行为
public void setFlyBehavior(FlyBehavior fb){
flyBehavior =fb;
}
public void setQuackBehavior(QuackBehavior qb){
quackBehavior =qb;
}
}
//具体的鸭子类
class MallardDuck extends Duck{
public MallardDuck(){
flyBehavior = new FlyWithWings();
quackBehavior = new Quack();
}
public void display(){
System.out.println("一只真正的野鸭子");
}
}
class ModeDuck extends Duck{
public ModeDuck(){
flyBehavior = new FlyNoWay();
quackBehavior = new MuteQuack();
}
public void display(){
System.out.println("一只模型鸭");
}
}
public class SimulatingDuck {
public static void main(String[] args) {
MallardDuck md = new MallardDuck();
md.display();
md.performFly();
md.performquack();
ModeDuck modeDuck = new ModeDuck();
modeDuck.display();
modeDuck.performFly();
modeDuck.performquack();
modeDuck.setQuackBehavior(new Squeak());
modeDuck.performquack();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -