大话设计模式--策略模式(代码片段)

程序员小熊 程序员小熊     2022-12-12     473

关键词:

策略模式(Strategy):定义了算法家族,分别封装起来,让各个算法之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。


/**
* 策略,定义计算报价算法的接口
* */
public interface Strategy 
    /**
     * 计算应该报的价格
     * @param goodPrice 商品销售原价
     * @return 计算出来的,应该给客户的价格
     *
     */

    public double calcPrice(double goodPrice);




之后定义不同的具体实现算法

public class NormalCustomerStrategy implements Strategy 

    @Override
    public double calcPrice(double goodPrice) 
        System.out.println("对于新客户或者是普通用户,没有折扣");
        return goodPrice;
    


public class OldCustomerStrategy implements Strategy

    @Override
    public double calcPrice(double goodPrice) 
        /**
         * 具体算法实现,为老客户计算应报的价格
         */
        System.out.println("对于老客户,统一折扣5%");

        return (goodPrice * (1 - 0.05));
    


public class LargerCustomerStrategy implements Strategy 

    public double calcPrice(double goodsPrice) 

        System.out.println("对于大客户,统一折扣10%");

        return goodsPrice*(1-0.1);

    



public class Price 

    /**
     *
     * 持续一个具体的策略对象
     */

    private Strategy strategy = null;

    public Price(Strategy astrategy) 
        this.strategy = astrategy;
    

    public double qoute(double goodPrice) 
        return this.strategy.calcPrice(goodPrice);
    


策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。

同时策略模式的Strategy类层次为Context定义了一系列的可重用的的算法或行为,继承有助于析取出算法中的公共功能。

另外一个策略模式的优点是简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试

大话设计模式之策略模式读后感(代码片段)

策略模式:定义了算法家族,分别封装起来,让他们呢之间可以互相的替换,此模式让算法的变化不会影响到使用算法的客户。UML类图:解读:策略模式是定义一系列的算法,从概念上来讲,这些算法完成的工作都是一样的,只... 查看详情

设计模式——策略模式(代码片段)

慢慢的做记录,做最强大的自己看了大话设计模式之后感触很深,发现自己还有很多学习的东西,设计软件并不是一两句代码把功能写完了就行,需要思考的内容有很多代码来源参考大话设计模式这本书,这里在博客里记录一下... 查看详情

大话设计模式——策略模式

一、开篇  上篇文章【大话设计模式】——简单工厂模式告诉了我们一个网吧收费工厂对象怎样创建收费形式(白天收费、夜间收费)的实例。简单工厂代码中有非常多case分支语句 ,假设我们还想填加收费的形式(比方会... 查看详情

大话设计模式之策略模式

策略模式  定义了一系列的算法,分别封装起来,让他们之间可以互相替换。此模式让算法的改变不会影响到使用算法的客户。  在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对... 查看详情

java之策略模式(大话设计模式)

温故而知新,每次读设计模式都会有不同的体验,坚持每天一个设计模式,直到熟练运用设计模式。策略模式定义了很多完成相同工作的算法,但实现不同,它可以以相同的方式调用所有的算法,减少了算法和调用算法的耦合。... 查看详情

策略模式算法选择(代码片段)

...;开发收银系统。【普通代码】说明:图片来源于大话设计模式,仅供学习使用。可以看到完全是硬编码,不灵活,可以采用上章学到的工厂模式解耦。工厂模式代码简单工厂模式虽然也能解决这个问题,但这... 查看详情

策略模式算法选择(代码片段)

...;开发收银系统。【普通代码】说明:图片来源于大话设计模式,仅供学习使用。可以看到完全是硬编码,不灵活,可以采用上章学到的工厂模式解耦。工厂模式代码简单工厂模式虽然也能解决这个问题,但这... 查看详情

设计模式-策略模式(代码片段)

参考:《大话设计模式》策略模式(Strategy): 它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户环境角色(Context):持有一个Strategy对象的引用抽象策略角色(Strat... 查看详情

《大话设计模式》——读后感商场促销?——策略模式

...对商场促销进行各种各样的打折进行设计案例的,而大话设计模式中还提到:  等等,打折、返现等等一系列促销具体方式 查看详情

大话设计模式之简单工厂模式(代码片段)

大话设计模式——简单工厂模式--参考自《大话设计模式》需求现在有一个需求,实现一个简单的计算器对于一般的初学者来说可能会这么实现:publicclasscalculatepublicstaticvoidmain(String[]args)Scannercin=newScanner(System.in);System.out.println(&qu... 查看详情

python大话设计模式:简单工厂模式(蟒版)(代码片段)

查看详情

大话设计模式读书笔记--2.策略模式

面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类定义它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算... 查看详情

csharp大话设计模式:简单工厂模式(c#版)(代码片段)

查看详情

大话设计模式之代理模式(代码片段)

代理模式是为了隐藏真实对象,为其提供一种代理以控制对这个对象的访问。UML类图: 公用接口Subject类:1/**2*定义共有接口3*/4publicinterfaceSubject56voidresquest();7真实对象RealSubject类:1/**2*真实实现3*/4publicclassRealSubjectimplementsSubj... 查看详情

大话设计模式-外观模式(代码片段)

外观模式:为子系统中的一组接口提供一个一致的界面,从模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。1//facade.cpp:定义控制台应用程序的入口点。2//34#include"stdafx.h"5#include<iostream>67usingnamespacestd;89classs... 查看详情

大话设计模式之简单工厂模式(代码片段)

背景需求:模拟一个简单计算器。UML类图:说明:抽象类AbstractOperation有一个抽象方法getResult和两个成员变量,加减乘除分别继承AbstractOperation并实现getResult方法即可。OperationFactory是一个简单工厂方法,可根据入参实例化不同的... 查看详情

大话设计模式-建造者模式(代码片段)

建造者模式建造者模式又称生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象,这些对象内部构构建间的构造顺序通常是稳定的,但对象内... 查看详情

2018/12/07《大话设计模式》状态模式(代码片段)

 《Forever吴建豪》洗脑~ 1:什么是状态模式?  -定义:当一个对象的内在状态改变时,允许改变其行为,这个对象看起开像是改了其类。  -哎~又来了句让人听不明白的定义......  -看一段代码来理解吧classAprivate$sta... 查看详情