美文网首页
策略模式 java

策略模式 java

作者: iarchitect | 来源:发表于2018-10-09 11:59 被阅读0次

策略模式:针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得他们可以互相转换。

类型:属于对象的行为模式。

角色:
环境角色:持有一个抽象策略类或策略接口的引用。
抽象策略角色:这是一个抽象角色,由一个接口或抽象类实现。
具体策略角色:封装相关算法或行为。重写抽象策略角色声明的方法。

示例:
商店对不同级别的会员有不同折扣,算法如下:
普通会员无折扣,白银会员95折,黄金会员90折。

代码:
抽象策略角色

public interface MemberI {
    public double calcPrice(double price);
}

具体策略角色

public class PrimaryMember implements MemberI {
    @Override
    public double calcPrice(double price) {
        System.out.println("普通会员没有折扣");
        return price;
    }
}

具体策略角色

public class SilverMember implements MemberI {
    @Override
    public double calcPrice(double price) {
        System.out.println("白银会员,95折");
        return price*0.95;
    }
}

具体策略角色

public class GoldMember implements MemberI {
    @Override
    public double calcPrice(double price) {
        System.out.println("黄金会员,9折");
        return price*0.9;
    }
}

环境角色

public class Price {

    //持有一个具体的策略对象

    private MemberI memberI;
    //通过构造函数,传入一个具体的策略对象

    public Price(MemberI memberI) {
        this.memberI = memberI;
    }

    //计算商品价格
    public double calcPrice(double price){
        return  this.memberI.calcPrice(price);
    }
}

客户端

public class Client {

    public static void main(String[] args) {

        //创建并选取需要使用的策略对象
        MemberI memberI = new SilverMember();
        //创建环境
        Price price = new Price(memberI);
        //计算价格
        double goodPrice = price.calcPrice(100);
        System.out.println("商品经过打折价格为:"+goodPrice);
    }
}

运行结果:


image.png

该模式的优点:
1,通过策略类的等级结构来管理算法族。
2,避免在一个类中为了使用不同的算法,将算法的实现和选择混合在一起的多重条件(if-else if-else)语句。
缺点:
1,客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2,由于策略模式把每个算法的具体实现都单独封装成类,针对不同的情况生成的对象会变得很多。

相关文章

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java适配器模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java观察者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java代理模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java策略模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • Java8之被简化的设计模式

    Java8命令模式简化 策略模式

  • Kotlin设计模式之策略模式

    简单介绍下用Kotlin写的策略模式,还有就是与Java版本的对比。 Kotlin Java 输出 实现策略模式时...

  • 设计模式 | 策略模式及典型应用

    本文的主要内容: 介绍策略模式 示例商场购物打折策略的实现 策略模式总结 源码分析策略模式的典型应用Java Co...

网友评论

      本文标题:策略模式 java

      本文链接:https://www.haomeiwen.com/subject/ancewftx.html