首页 > 其他分享 >策略模式(Strategy)

策略模式(Strategy)

时间:2022-11-26 19:47:47浏览次数:48  
标签:策略 double 模式 Strategy 算法 standarPrice strategy public

当处理同一个对象有多个处理算法的时候,使用一个策略对象来选择处理算法。

 


 

例子:

  对于客户的优惠率。

算法实现统一的接口:

public interface Strategy {
    public double getPrice(double standarPrice);//获取计算价格的算法
}

具体算法,实现类1:

class NewCustomerFewStrategy implements Strategy{
    @Override
    public double getPrice(double standarPrice) {
        System.out.println("新顾客,少量购买,不打折");
        return standarPrice;
    }
}

实现类2:

class NewCustomerManyStrategy implements Strategy{
    @Override
    public double getPrice(double standarPrice) {
        System.out.println("新顾客,大量购买,九五折");
        return standarPrice;
    }
}

实现类3:

class OldCustomerFewStrategy implements Strategy{
    @Override
    public double getPrice(double standarPrice) {
        System.out.println("老客户,少量购买,九折");
        return standarPrice*0.9;
    }
}

实现类4:

class OldCustomerManyStrategy implements Strategy{
    @Override
    public double getPrice(double standarPrice) {
        System.out.println("老客户,大量购买,八折");
        return standarPrice*0.8;
    }
}

策略对象:持有一个算法对象的引用,即可调用实际的算法,实现了处理对象与被处理对象的分类。

public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    //可以设置指定算法
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    //价格算法
    public void pringPrice(double s){
        System.out.println("折后价:"+strategy.getPrice(s));
    }
}

测试:

public class Client {
    public static void main(String[] args) {
        //顾客类型
        Strategy s1 = new OldCustomerFewStrategy();
        //策略对象,根据客户类型选取算法
        Context c1= new Context(s1);
        //执行策略
        c1.pringPrice(998);
    }
}

测试结果:

 

标签:策略,double,模式,Strategy,算法,standarPrice,strategy,public
From: https://www.cnblogs.com/lurenjia-bky/p/16928128.html

相关文章

  • 设计模式之创建型模式
    创建型模式:提供创建对象的机制,提升已有代码的灵活性和可复⽤性。PS:博客根据it老齐大话设计模式课程课件进行整理,IT老齐视频学习网站:https://www.itlaoqi.com包含的设......
  • 解释器模式(Interpreter)
    自定义解析器。需要:构建语法树,定义终结符与非终结符。 替代方案:Java中使用脚本引擎运行脚本语言......
  • 访问者模式(Visitor)
    表示一个作用于某对象结构中的各个元素的操作,使我们在不改变元素的类的前提下定义作用于这些元素的新操作。使用场景:对象结构比较稳定,但经常需要在此对象结构上定义新的......
  • 外观模式(也叫做门面模式)
    外观模式(也叫做门面模式):影院管理项目:         外观模式的基本介绍:   外观模式的原理类图:   原理类图的说明(外观模式的角色)1)外观类(F......
  • 命令模式(Command)
    将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 结构:......
  • 企业办公新模式,随时随地云上协同!
    如今,越来越多人参与到项目中进行协同,因此对企业内部的协同办公提出了更高的要求,同时加之大环境下的居家办公要求,导致很多人一回到家之后就会出现无电脑可用、没有办公室电脑......
  • AI模型部署典型策略
    【编者按:模型部署是AI开发生产流程中的重要步骤。对于许多组织而言,选择最佳的模型部署策略以扩展到生产级系统,都是一项复杂且具有挑战的工作。今天IDP将和大家一同,跟随Yasha......
  • D110设计模式_4备忘录模式20221122
     备忘录模式(MementoPattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。客户不与备忘录类耦合,与备忘录管理类耦合。优点: 1、给用......
  • 中介者模式(Mediator )
    用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。场景:公司多个部门之间,若直接互相打交......
  • 使用Python进行交易策略和投资组合分析
    我们将在本文中衡量交易策略的表现。并将开发一个简单的动量交易策略,它将使用四种资产类别:债券、股票和房地产。这些资产类别的相关性很低,这使得它们成为了极佳的风险平衡......