设计模式之策略模式简介说明

欣喜 Java教程 发布时间:2025-02-24 15:28:53 阅读数:11443 1
下文笔者讲述,我们日常开发常用的一种设计模式---策略模式,如下所示

策略模式简介

 策略模式是一种面向对象设计模式
   它允许程序在运行时选择算法的行为
     这种模式使得可以定义一系列算法,并将每种算法封装起来
	   使它们可以相互替换,而不会影响到使用这些算法的客户端

策略模式中主要角色

抽象策略(Strategy)类:
   定义一个公共接口
    各种不同的算法以不同的方式实现这个接口
	 环境角色使用这个接口调用不同的算法
	 一般使用接口或抽象类实现。

具体策略(Concrete Strategy)类:
    实现抽象策略定义的接口
	 提供具体的算法实现

环境(Context)类:
    持有一个策略类的引用
	 最终给客户端调用。

策略模式的应用场景

1.支付系统:
   如上面的示例所示
     不同的支付方式可以作为不同的策略
2.排序算法:
   根据不同的需求选择不同的排序算法
     如
	   快速排序、归并排序等
3.游戏AI:
   不同的AI行为可以作为不同的策略
     如:
	  攻击策略、防守策略等。
4.文件压缩:
    不同的压缩算法可以作为不同的策略,如ZIP、RAR等。

策略模式经常用于替换复杂的if else 语句
    在日常开发中,被大量的使用
例:为系统定义不同的支付方式
1.定义策略接口
 
public interface PaymentStrategy {
    void pay(int amount);
} 

2.实现具体的策略类
public class CreditCardPayment implements PaymentStrategy {
    private String cardNumber;
    private String name;
    private String cvv;
    private String dateOfExpiry;

    public CreditCardPayment(String nm, String ccNum, String cvv, String expiryDate){
        this.cardNumber = ccNum;
        this.name = nm;
        this.cvv = cvv;
        this.dateOfExpiry = expiryDate;
    }

    @Override
    public void pay(int amount) {
        System.out.println(amount + " paid with credit/debit card");
    }
}

public class PayPalPayment implements PaymentStrategy {
    private String emailId;
    private String password;

    public PayPalPayment(String email, String pwd){
        this.emailId = email;
        this.password = pwd;
    }

    @Override
    public void pay(int amount) {
        System.out.println(amount + " paid using PayPal.");
    }
}

3.创建上下文类

public class ShoppingCart {
    private list<Item> items;

    public ShoppingCart(){
        this.items = new ArrayList<Item>();
    }

    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);
    }
}

4.使用策略模式

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 credit card
        cart.pay(new CreditCardPayment("maomao", "8232324242", "6666", "02/24"));

        // Pay by PayPal
        cart.pay(new PayPalPayment("admin@java265.com", "232323"));
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202502/8328.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者