A detailed introduction to the Java implementation strategy (Strategy) pattern
Strategy pattern: Behavioral pattern
Encapsulates the same behavior and different processing algorithms respectively. Make them interchangeable
1. Define a supertype interface and behavior method
2. Define different implementation classes, Different algorithms to achieve this behavior
##
/** * 策略模式:针对同一命令(或行为),不同的策略做不同的动作 * 商品促销 * 本类为:收取现金的类 * * @author stone */ public interface ICashSuper { double acceptCash(double money); }
/** * 正常收取现金 * @author stone * */ public class CashNormal implements ICashSuper { @Override public double acceptCash(double money) { return money; } }
/** * 打折收取现金 * @author stone * */ public class CashRebate implements ICashSuper { private double rebate; //折扣 public CashRebate (double rebate) { this.rebate = rebate; } @Override public double acceptCash(double money) { return new BigDecimal(money * rebate / 10).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); } }
/** * 让利返现 收取现金 * @author stone * */ public class CashReturn implements ICashSuper { private double moneyCondition; //返现底限金额 private double returnMoney; //返还金额 public CashReturn(double moneyCondition, double returnMoney) { this.moneyCondition = moneyCondition; this.returnMoney = returnMoney; } @Override public double acceptCash(double money) {//多重返利 if (money >= moneyCondition) { return money - Math.floor(money / moneyCondition) * returnMoney; } else { return money; } } }
/** * 根据传递的的策略类,执行相应的行为 * @author stone * */ public class CashContext { private ICashSuper casher; public CashContext() { } public CashContext(ICashSuper casher) { this.casher = casher; } public void setCasher(ICashSuper casher) { this.casher = casher; } //根据具体的策略对象,调用它的算法行为 public double acceptCash(double money) { return this.casher.acceptCash(money); } }
/* * 策略(Strategy)模式 关注:行为的选择 * 封装了一系列策略对象,用户来选择使用哪种策略对象 * 与简单工厂的区别: * 策略模式,传入策略对象给Context,由Context封装策略对象的方法调用,对外公开Context的方法接口 * 简单工厂模式,传入一个简单参数,创建对象,然后调用出厂对象的方法 * 与装饰模式的区别: * 很明显,Context无需实现(implements)业务接口,不需要增强已有的策略对象的功能 * 策略模式多用在算法决策系统中, 比如工资结算 */ public class Test { public static void main(String[] args) { double money = 998; //原价 CashContext cashContext = new CashContext(new CashNormal()); System.out.println("原价:" + cashContext.acceptCash(money)); //通常 策略 cashContext.setCasher(new CashRebate(8.5)); System.out.println("打85折:" + cashContext.acceptCash(money)); //折扣 策略 85折 cashContext.setCasher(new CashReturn(300, 50)); System.out.println("满300 返50:" + cashContext.acceptCash(money)); //返现 策略 满300 返50 } }Print
原价:998.0 打85折:848.3 满300 返50:848.0
The above is the detailed content of A detailed introduction to the Java implementation strategy (Strategy) pattern. For more information, please follow other related articles on the PHP Chinese website!

Java is platform-independent because of its "write once, run everywhere" design philosophy, which relies on Java virtual machines (JVMs) and bytecode. 1) Java code is compiled into bytecode, interpreted by the JVM or compiled on the fly locally. 2) Pay attention to library dependencies, performance differences and environment configuration. 3) Using standard libraries, cross-platform testing and version management is the best practice to ensure platform independence.

Java'splatformindependenceisnotsimple;itinvolvescomplexities.1)JVMcompatibilitymustbeensuredacrossplatforms.2)Nativelibrariesandsystemcallsneedcarefulhandling.3)Dependenciesandlibrariesrequirecross-platformcompatibility.4)Performanceoptimizationacros

Java'splatformindependencebenefitswebapplicationsbyallowingcodetorunonanysystemwithaJVM,simplifyingdeploymentandscaling.Itenables:1)easydeploymentacrossdifferentservers,2)seamlessscalingacrosscloudplatforms,and3)consistentdevelopmenttodeploymentproce

TheJVMistheruntimeenvironmentforexecutingJavabytecode,crucialforJava's"writeonce,runanywhere"capability.Itmanagesmemory,executesthreads,andensuressecurity,makingitessentialforJavadeveloperstounderstandforefficientandrobustapplicationdevelop

Javaremainsatopchoicefordevelopersduetoitsplatformindependence,object-orienteddesign,strongtyping,automaticmemorymanagement,andcomprehensivestandardlibrary.ThesefeaturesmakeJavaversatileandpowerful,suitableforawiderangeofapplications,despitesomechall

Java'splatformindependencemeansdeveloperscanwritecodeonceandrunitonanydevicewithoutrecompiling.ThisisachievedthroughtheJavaVirtualMachine(JVM),whichtranslatesbytecodeintomachine-specificinstructions,allowinguniversalcompatibilityacrossplatforms.Howev

To set up the JVM, you need to follow the following steps: 1) Download and install the JDK, 2) Set environment variables, 3) Verify the installation, 4) Set the IDE, 5) Test the runner program. Setting up a JVM is not just about making it work, it also involves optimizing memory allocation, garbage collection, performance tuning, and error handling to ensure optimal operation.

ToensureJavaplatformindependence,followthesesteps:1)CompileandrunyourapplicationonmultipleplatformsusingdifferentOSandJVMversions.2)UtilizeCI/CDpipelineslikeJenkinsorGitHubActionsforautomatedcross-platformtesting.3)Usecross-platformtestingframeworkss


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Dreamweaver Mac version
Visual web development tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 Chinese version
Chinese version, very easy to use

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software
