java_248_GOF23设计模式_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构_练习

策略模式strategy
在这里插入图片描述
不采用策略模式处理问题的方法
在这里插入图片描述
在这里插入图片描述
//-------------------不采用策略模式处理问题的方法----------------------
package java_248_GOF23设计模式_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构_练习;
/**
*不采用策略模式处理问题的方法

  • 实现起来比较容易,符合一般开发人员的思路

  • 假如:类型特别多,算法比较复杂时整个条件语句的代码就变得很长,难于维护

  • 如果有新增类型,就需要频繁的修改此处的代码

  • 不符合开闭原则
    /
    public class TestStrategy {
    //getPrice获取价格
    public double getPrice(String type,double price){//type类型;price价格
    if (type.equals (" 普通客户小批量 “)) {
    System.out.println(” 不打折,原价 ");
    return price;
    }else if (type.equals ("普通客户大批量 “)){
    System.out.println (” 打九折 ");
    return price
    0.9;
    }else if (type.equals (“老客户小批量”)){
    System.out.println(“打八五折”);
    return price0.85;
    }else if (type.equals (“老客户大批量”)){
    System.out.println(“打八折”);
    return price
    0.8;
    }
    return price;
    }
    }
    //----------采用策略模式处理问题的方法----------接口---------------
    package java_248_GOF23设计模式_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构_练习;
    /**
    接口
    /
    public interface Strategy {//Strategy战略
    //属性
    public double getPrice(double standardPrice);//standardPrice原价
    }
    //-------------------新客户小批量--------------------
    package java_248_GOF23设计模式_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构_练习;
    /

  • 增加实现类:新客户小批量
    */
    public class NewCustomerFewStrategy implements Strategy {//NewCustomerFewStrategy新客户小批量策略

    public double getPrice(double standardPrice) {
    System.out.println(“不打折,原价”);
    return standardPrice;
    }
    }
    //---------------新客户大批量-------
    package java_248_GOF23设计模式_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构_练习;
    /**

  • 增加实现类:新客户大批量
    */
    public class NewCustomerManyStrategy implements Strategy {//NewCustomerFewStrategy新客户大批量策略

    public double getPrice(double standardPrice) {
    System.out.println(“打九折”);
    return standardPrice*0.9;
    }
    }
    //---------------------老客户小批量-----------------
    package java_248_GOF23设计模式_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构_练习;
    /**

  • 增加实现类:老客户小批量
    */
    public class OldCustomerFewStrategy implements Strategy {//NewCustomerFewStrategy老客户小批量策略

    public double getPrice(double standardPrice) {
    System.out.println(“打八五折”);
    return standardPrice*0.85;
    }
    }
    //-------------------------老客户大批量-----------
    package java_248_GOF23设计模式_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构_练习;
    /**

  • 增加实现类:老客户大批量
    */
    public class OldCustomerManyStrategy implements Strategy {//NewCustomerFewStrategy老客户大批量策略

    public double getPrice(double standardPrice) {
    System.out.println(“打八折”);
    return standardPrice*0.8;
    }
    }
    //------------------上下文类;负责和具体的策略类交互--------------------
    package java_248_GOF23设计模式_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构_练习;
    /**
    *上下文类;负责和具体的策略类交互;

  •  具体的算法和直接客户端调用彻底分离了;使得算法可以独立于客户端独立的变化
    
  • 如果使用spring的依赖注入功能,还可以通过配置文件,动态的注入不同策略对象,动态的切换不同的算法
    */
    public class Context {//Context上下文
    private Strategy strategy;//当前采用的算法对象
    //可以通过构造器来注入
    public Context(Strategy strategy) {
    super();
    this.strategy = strategy;
    }
    //或者加入set方法也可以
    public void setStrategy(Strategy strategy) {
    this.strategy = strategy;
    }
    //写入方法 打印报价;
    //这里也可以添加不同的需求;真正使用的时候是不在这里打印
    public void pringPrice(double s){//pringPrice打印价格
    System.out.println(“您该报价:”+strategy.getPrice(s));
    }
    }
    //-----------------测试-----------
    package java_248_GOF23设计模式_策略模式_CRM中报价策略_GUI编程中布局管理器底层架构_练习;

public class Cilent {
public static void main(String[] args) {
System.out.println("-----老客户大批量------------");
Strategy s1 = new OldCustomerManyStrategy();
Context ctx = new Context(s1);
ctx.pringPrice(100);

	System.out.println("-----新客户小批量------------");
	Strategy s2 = new NewCustomerFewStrategy();
	Context ctx2 = new Context(s2);
	ctx2.pringPrice(100);
}

}
//----------------结果---------------------
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值