做毕设最常去的几个网站,汉口网站制作设计,天津网站建设服务电话,千万不要进住建局java 设计模式 示例策略模式是行为设计模式之一 。 当我们对一个特定的任务有多种算法并且客户决定在运行时使用的实际实现时#xff0c;将使用策略模式。 策略模式也称为策略模式 。 我们定义了多种算法#xff0c;并让客户端应用程序将算法用作参数。 此模式的最佳示例之一… java 设计模式 示例 策略模式是行为设计模式之一 。 当我们对一个特定的任务有多种算法并且客户决定在运行时使用的实际实现时将使用策略模式。 策略模式也称为策略模式 。 我们定义了多种算法并让客户端应用程序将算法用作参数。 此模式的最佳示例之一是采用Comparator参数的Collections.sort()方法。 根据Comparator接口的不同实现将以不同的方式对对象进行排序请查看此文章以使用Java Comparable和Comparator在Java中对对象进行排序。 对于我们的示例我们将尝试实现一个简单的购物车其中我们有两种付款策略-使用信用卡或使用PayPal。 首先我们将为我们的策略创建接口在本例中我们将支付作为参数传递的金额。 package com.journaldev.design.strategy;public interface PaymentStrategy {public void pay(int amount);
} 现在我们将不得不创建使用信用卡/借记卡或通过Paypal付款的算法的具体实现。 package com.journaldev.design.strategy;public class CreditCardStrategy implements PaymentStrategy {private String name;private String cardNumber;private String cvv;private String dateOfExpiry;public CreditCardStrategy(String nm, String ccNum, String cvv, String expiryDate){this.namenm;this.cardNumberccNum;this.cvvcvv;this.dateOfExpiryexpiryDate;}Overridepublic void pay(int amount) {System.out.println(amount paid with credit/debit card);}}package com.journaldev.design.strategy;public class PaypalStrategy implements PaymentStrategy {private String emailId;private String password;public PaypalStrategy(String email, String pwd){this.emailIdemail;this.passwordpwd;}Overridepublic void pay(int amount) {System.out.println(amount paid using Paypal.);}} 现在我们的算法已经准备就绪我们可以实现购物车并且付款方式将需要输入作为付款策略。 package com.journaldev.design.strategy;public class Item {private String upcCode;private int price;public Item(String upc, int cost){this.upcCodeupc;this.pricecost;}public String getUpcCode() {return upcCode;}public int getPrice() {return price;}}package com.journaldev.design.strategy;import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;public class ShoppingCart {//List of itemsListItem items;public ShoppingCart(){this.itemsnew ArrayListItem();}public void addItem(Item item){this.items.add(item);}public void removeItem(Item item){this.items.remove(item);}public int calculateTotal(){int sum 0;for(Item item : items){sum item.getPrice();}return sum;}public void pay(PaymentStrategy paymentMethod){int amount calculateTotal();paymentMethod.pay(amount);}
} 请注意购物车的付款方式需要付款算法作为参数而不是将其存储为实例变量。 让我们用一个简单的程序测试我们的设置。 package com.journaldev.design.strategy;public class ShoppingCartTest {public static void main(String[] args) {ShoppingCart cart new ShoppingCart();Item item1 new Item(1234,10);Item item2 new Item(5678,40);cart.addItem(item1);cart.addItem(item2);//pay by paypalcart.pay(new PaypalStrategy(myemailexample.com, mypwd));//pay by credit cardcart.pay(new CreditCardStrategy(Pankaj Kumar, 1234567890123456, 786, 12/15));}} 上面程序的输出是 50 paid using Paypal.
50 paid with credit/debit card策略模式类图 重要事项 我们本可以使用组合来创建策略的实例变量但应避免这种情况因为我们希望将特定策略应用于特定任务因此在Collections.sort和Arrays.sort方法中也遵循相同的方法将比较器用作论据。 策略模式与状态模式非常相似。 区别之一是Context包含状态作为实例变量并且可以有多个任务的执行可以依赖于状态而在策略模式中strategy作为参数传递给方法而上下文对象没有任何变量来存储它。 当我们有多个用于特定任务的算法并且希望我们的应用程序灵活地在运行时为特定任务选择任何算法时策略模式很有用。 这就是Java中的Strategy Pattern的全部内容希望您喜欢它。 参考 Java中的策略设计模式- 开发人员博客上来自我们JCG合作伙伴 Pankaj Kumar的示例教程 。 翻译自: https://www.javacodegeeks.com/2013/08/strategy-design-pattern-in-java-example-tutorial.htmljava 设计模式 示例