大话设计模式(二)策略模式+简单工厂

本文深入解析策略模式,一种允许算法在运行时互换的设计模式。通过将算法封装在独立的类中,策略模式使得算法的选择和变化对客户端透明,降低算法间的耦合度,提高代码的灵活性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略模式

定义了算法,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户

/**
*定义一个抽象的父类,包含一个抽象的算法Amethod
*
/
public abstract class Strategy {
	
	public abstract void Amethod();
	
}

/**
*A类用A的实现去实现算法A
*
/
public class ConcreteStrategyA extends Strategy{
	
	/**
	 * 算法A的具体实现
	 */
	@Override
	public void Amethod() {
		// TODO Auto-generated method stub
			
	}
}

/**
*同样的可以有B或者C,D算法
*
/

配置一个Context来维护Strategy的引用

public class Context {

	Strategy strategy;
	
	public Context(Strategy strategy) {
		// TODO Auto-generated constructor stub
		this.strategy = strategy;
	}
	/**
	 * 上下文接口,根据具体的策略对象,调用其算法的方法
	 */
	public void ContextInterface() {
		
		strategy.Amethod();
		
	}
	
}
		/**
		 * 根据不同的需求去实例化不同的算法
		 */
		Context context = new Context(new ConcreteStrategyA());
		Context contextB = new Context(new ConcreteStrategyB());
		//实例化对象不同,所以调用的算法就不同

策略模式+简单工厂


  • 加上简单工厂的话,就是在上下文管理类的地方使用上工厂类,传入不同的值,就实例化不同的对象。
	Strategy strategy;
	
	public Context(String type) {
		// TODO Auto-generated constructor stub
		switch (type) {
		case "A":
			this.strategy = new ConcreteStrategyA();
			break;
		case "B":
			this.strategy = new ConcreteStrategyB();
		default:
			break;
		}
		
	}
	/**
	 * 上下文接口,根据具体的策略对象,调用其算法的方法
	 */
	public void ContextInterface() {
		
		strategy.Amethod();
		
	}
		/**
		 * 根据不同的需求去实例化不同的算法
		 */
		Context contextA = new Context("A");
		contextA.ContextInterface();
		Context contextB = new Context("B");
		contextB.ContextInterface();
策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助析取出这些算法的公共功能。可以以相同的方式调用所有的算法,并针对不同的算法做专门的单元测试,降低了算法类之间的耦合度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值