设计模式-策略模式

什么是策略模式:策略模式定义算法簇分别封装起来,并使它们之间可以相互替换,该模式让算法的变化独立于调用者之外。
定义比较抽象,还是用代码来说明,我们可以定义一组行为接口,然后针对接口做不同的实现,最后通过调用不同的行为实现达到不同的效果,比方说狗吃骨头,但是玩具狗什么都不吃。

public abstract class Animal {

    private EatAction eatAction;

    private RunAction runAction;

    public abstract void performRun();

    public abstract void performEat();

    public EatAction getEatAction() {
        return eatAction;
    }

    public void setEatAction(EatAction eatAction) {
        this.eatAction = eatAction;
    }

    public RunAction getRunAction() {
        return runAction;
    }

    public void setRunAction(RunAction runAction) {
        this.runAction = runAction;
    }
}
public interface EatAction {

    public void eat();
}
public interface RunAction {

    public void run();
}

public class DogEat implements EatAction {

    @Override
    public void eat() {
        System.out.println("Eat Bone");
    }
}
public class DogRun implements RunAction {
    @Override
    public void run() {
        System.out.println("run with Four legs");
    }
}
public class ToyDogEat implements EatAction {
    @Override
    public void eat() {
        System.out.println("eat nothing");
    }
}

public class Main {


    public static void main(String[] args){
        Animal dog = new Dog();
        dog.setEatAction(new DogEat());
        dog.setRunAction(new DogRun());
        dog.performEat();
        dog.performRun();

        dog.setEatAction(new ToyDogEat());
        dog.performEat();

    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 本文的结构如下: 引言 什么是策略模式 模式的结构 典型代码 代码示例 策略模式和模板方法模式的区别 优点和...
    w1992wishes阅读 4,363评论 1 7
  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 9,149评论 0 14
  • 概念及定义 概念在完成某一功能时,有时需要根据不同环境采取不同的策略或行为。将这些不同的策略或行为(称为算法)一一...
    maxwellyue阅读 3,627评论 0 0
  • 二十三种设计模式 - 策略模式 策略模式简介 模式动机 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个...
    JustTheSame阅读 5,798评论 2 16
  • 南京重新认识你 在这之前,我来过两次南京,回去之后,我就告诉我自己我这辈子再也不要来南京了,这两次的印象确实不太好...
    我是简瑟阅读 2,415评论 4 1