策略模式--心得

策略模式是一种设计模式,它使对象能够在不同的上下文中具有不同的行为实现。通过定义一组可互换的策略类,可以在运行时动态选择执行的算法,从而避免使用复杂的条件语句。这种模式有助于提高代码的可读性和算法的安全性,但可能会导致更多的类产生,增加维护成本。在给定的例子中,展示了如何通过Context类和不同的Strategy实现(如Add和Subtract)来根据用户输入动态执行加法或减法操作。
摘要由CSDN通过智能技术生成

简介

策略模式是指有一定行动内容的相对稳定的策略名称,策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法

策略模式:

  • 定义了一组算法(业务规则)
  • 封装了每个算法
  • 这族的算法可互换代替

应用场景

  1. 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为

  2. 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现

  3. 对客户隐藏具体策略(算法)的实现细节,彼此完全独立

  4. 一个类定义了多种行为,并且这些行为在类的操作中以多个条件语句的形式出现

优点:

  • 策略模式符合开闭原则

  • 避免使用多重条件转移语句,如if...else...语句、switch 语句

  • 使用策略模式可以提高算法的保密性和安全性

缺点:

  • 客户端必须知道所有的策略,并且自行决定使用哪一个策略类

  • 代码中会产生非常多策略类,增加维护难度

实际应用

package designpattern;

 interface Strategy {
	 public int doOperation(int a, int b);  
}
 
 class Add implements Strategy {  
	    @Override  
	    public int doOperation(int a, int b) {  
	        return a + b;  
	    }  
	}

	class Subtract implements Strategy {  
	    @Override  
	    public int doOperation(int a, int b) {  
	        return a - b;  
	    }  
	}

class Context {  
	    private Strategy strategy;  
	    
	    public Context(String mockUserInput) {  
	        if ("Add".equals(mockUserInput)) {  
	            this.strategy = new Add();  
	        } else if ("Subtract".equals(mockUserInput)) {  
	            this.strategy = new Subtract();  
	        }  
	    }  
	    public int doOperation(int a, int b) {  
	    	return this.strategy.doOperation(a, b);  
	        }
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值