Java设计模式之策略模式

概念:用于算法的自由切换和扩展,需要使用策略模式实现算法的定义和使用分离,从而替换传统的硬编码方式。又称政策模式。

角色包括:

	环境类:使用算法的角色,维护抽象策略类的引用。
	抽象策略类:声明抽象算法,方便替换算法。
	具体策略类:实现抽象策略类。

实现大致过程

  定义一个策略公有方法接口A,所有不同种类的策略实现这个接口A。再定义一个环境类,包含接口A这个成员变量,定义一个方法,用来执行传入成员变量的方法。

所有策略公有方法类

package com.example.ployDemo;

/**
 * description
 * <p>
 *  所有策略共有方法类
 * @author slliao
 * @date 2019/4/29 10:06.
 */
public interface Gun {
    public void run();
}

策略1实现公有方法接口

package com.example.ployDemo;

/**
 * description
 * <p>
 *  Awm实现Gun接口
 * @author slliao
 * @date 2019/4/29 10:07.
 */
public class AwmGun implements Gun{
    @Override
    public void run() {
        System.out.println("正在使用AWM");
    }
}

策略2实现共有方法接口

package com.example.ployDemo;

/**
 * description
 * <p>
 *散弹枪实现gun接口
 * @author slliao
 * @date 2019/4/29 10:08.
 */
public class ShotGun implements Gun{

    @Override
    public void run() {
        System.out.println("正在使用散弹枪");
    }
}

定义环境类

package com.example.ployDemo;

/**
 * description
 * <p>
 *  定义一个枪的接口
 * @author slliao
 * @date 2019/4/29 10:10.
 */
public class Environment {
    private Gun gun;

    public Environment(Gun gun){
        super();
        this.gun=gun;
    }

    public void run(){
        gun.run();
    }

    public Gun getGun() {
        return gun;
    }

    public void setGun(Gun gun) {
        this.gun = gun;
    }
}

测试

 public class Test {
    public static void main(String[] args) {
        System.out.println("距离远,使用远程武器");
        Environment en = new Environment(new AwmGun());
        en.run();
        System.out.println("距离近,使用近战武器");
        en.setGun(new ShotGun());
        en.run();
    }
}

在这里插入图片描述

总结
优点:可以根据不同情况动态的改变对象的行为。
缺点:情况复杂的情况下需要建立很多的策略类。
客户端需要知道全部的策略,并且自己决定使用哪种策略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值