码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式 - 策略模式

时间:2018-12-28 00:49:35      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:pac   spl   src   接口   子类   策略   white   isp   public   

策略模式的定义:

  对象有某个行为,但在不同的场景中,该行为有不同的实现算法

模拟鸭子题目:

  设计一个鸭子游戏,游戏中会出现各种鸭子,鸭子类型有木头鸭(不会飞,不会叫)、模型鸭(不会叫,动力飞)、绿头鸭(会飞、会叫)

 

coding:

技术分享图片
package Strategy;

public interface FlyBehavior {
    public void fly();
}
FlyBehavior

飞的行为(也叫策略),设计为一个接口(也叫抽象策略)。

鸭子的飞的方式有很多种,所有飞的方式都继承这个接口(抽象策略),所有的飞行方式组成一个族(算法族)

技术分享图片
package Strategy;

public class FlyNoWay implements FlyBehavior{

    public void fly() {
        System.out.println("我不会飞 !");
    }
}
FlyNoWay

不会飞,飞行算法族中的一个方式

技术分享图片
package Strategy;

public class FlyRocketPowered implements FlyBehavior{

    public void fly() {
        System.out.println("我用动力飞 !");
    }
}
FlyRocketPowered

用动力飞,飞行算法族中的一个方式

技术分享图片
package Strategy;

public class FlyWithWings implements FlyBehavior{

    public void fly() {
        System.out.println("我用翅膀飞 !");
    }
}
FlyWithWings

用翅膀飞,飞行算法族中的一个方式

 

技术分享图片
package Strategy;

public interface HueBehavior {
    public void hue();
}
HueBehavior

鸭子的颜色有好多种,所有的颜色都继承这个接口(抽象策略)

技术分享图片
package Strategy;

public class Black implements HueBehavior{

    public void hue() {
        System.out.println("我是黑色的 !");
    }
}
Black

黑色,是颜色算法族中的一个方式

技术分享图片
package Strategy;

public class White implements HueBehavior{

    public void hue() {
        System.out.println("我是白色的 !");
    }
}
White

白色,是颜色算法族中的一个方式

 

技术分享图片
package Strategy;

public interface QuackBehavior {
    public void quack();
}
QuackBehavior

鸭子的叫声有好多种,所有的叫声都继承这个接口(抽象策略)

技术分享图片
package Strategy;

public class Quiet implements QuackBehavior {

    public void quack() {
        System.out.println("我不会叫 !");
    }
}
Quiet

不叫,是叫声族中的一个方式

技术分享图片
package Strategy;

public class Quack implements QuackBehavior{

    public void quack() {
        System.out.println("我嘎嘎叫 !");
    }
}
Quack

嘎嘎叫,叫声族中的一个方式

技术分享图片
package Strategy;

public class Squeak implements QuackBehavior{

    public void quack() {
        System.out.println("我吱吱叫 !");
    }
}
Squeak

吱吱叫,叫声族中的一个方式

 

技术分享图片
package Strategy;

public class ModeDuck extends Duck{

    public ModeDuck() {
       flyBehavior = new FlyNoWay();
       quackBehavior = new Quiet();
       hueBehavior = new White();
    }
}
ModeDuck

模型鸭,也可以实现其他的鸭子(绿头鸭、木头鸭。。。)

 

技术分享图片
package com.company;

import Strategy.Duck;
import Strategy.ModeDuck;

public class Main {

    public static void main(String[] args) {

        Duck modelduck = new ModeDuck();
        modelduck.display();

    }
}
Main

跑一下!!!

 

鸭子的行为有很多种(颜色、飞行方式、叫声。。。),每一种行为都是可以抽象出一个抽象策略类,每一个行为又有多个实现方式,所有的实现都可以继承这个抽象策略类,实现成具体策略类。

这样以后扩展其他类型的鸭子的时候只要传不同的具体策略就可以实现了。

 

设计模式 - 策略模式

标签:pac   spl   src   接口   子类   策略   white   isp   public   

原文地址:https://www.cnblogs.com/Mr-Wenyan/p/10188320.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!