设计模式策略模式

编程

抽象折扣类:

public interface MemberStrategy {

    /**

     * 计算图书的价格

     * @param booksPrice    图书的原价

     * @return    计算出打折后的价格

     */

    public double calcPrice(double booksPrice);

}

 
三个实现类:(初级会员、中级会员、高级会员)

 public class PrimaryMemberStrategy implements MemberStrategy {

 

    @Override

    public double calcPrice(double booksPrice) {

        

        System.out.println("对于初级会员的没有折扣");

        return booksPrice;

    }

 

}

 

public class IntermediateMemberStrategy implements MemberStrategy {

    @Override

    public double calcPrice(double booksPrice) {

        System.out.println("对于中级会员的折扣为10%");

        return booksPrice * 0.9;

    }

}

 

public class AdvancedMemberStrategy implements MemberStrategy {

    @Override

    public double calcPrice(double booksPrice) {

       

        System.out.println("对于高级会员的折扣为20%");

        return booksPrice * 0.8;

    }

}


价格类:

public class Price {

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

    private MemberStrategy strategy;

    /**

     * 构造函数,传入一个具体的策略对象

     * @param strategy    具体的策略对象

     */

    public Price(MemberStrategy strategy){

        this.strategy = strategy;

    }

    

    /**

     * 计算图书的价格

     * @param booksPrice    图书的原价

     * @return    计算出打折后的价格

     */

    public double quote(double booksPrice){

        return this.strategy.calcPrice(booksPrice);

    }

}


测试:

public class Client {

 

    public static void main(String[] args) {

        //选择并创建需要使用的策略对象

        MemberStrategy strategy = new AdvancedMemberStrategy();

        //创建环境

        Price price = new Price(strategy);

        //计算价格

        double quote = price.quote(300);

        System.out.println("图书的最终价格为:" + quote);

    }

}


输出:10


策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。
因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。

以上是 设计模式策略模式 的全部内容, 来源链接: utcz.com/z/514259.html

回到顶部