设计模式 - 策略模式(Strategy)

本文详细介绍了设计模式中的策略模式,通过实例展示了如何定义一系列算法并将它们封装为独立的类,以便于互相替换。以求职者投递简历为例,演示了如何根据不同情况选择不同的策略。

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

          Strategy策略模式又名政策(Policy)模式,是属于设计模式中对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类,并且这些类(算法)可以相互替换。Strategy应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用Strategy实现。图象压缩系列算法实现(不同的算法分别对应一个类)也可以采用Strategy模式实现。其结构图如下:

 

 

        

下面以一个求职者投简历为例:

       一个求职者可能投中英文简历,但并不是对所有的公司都投中英文简历,故需要一个策略来判断投什么简历。

简历(Resume)代码:

public interface Resume {

	public void writeResume();
}

 

写中文简历代码:

public class ChineseResume implements Resume {

	public void writeResume() {
		
		System.out.println(" #### 编写中文简历");
		
	}

}

 写英文简历:

 

public class EnglishResume implements Resume {

	public void writeResume() {
		System.out.println(" #### 编写英文简历");
	}

}

 

 

求职者本身:

 

public class JobSeeker {

	private Resume resume;
	
	public JobSeeker(Resume resume){
		this.resume = resume;
	}

	public Resume getResume() {
		return resume;
	}

	public void setResume(Resume resume) {
		this.resume = resume;
	}
	
	public void postResume(){
		resume.writeResume();
	}
	
}

 

模拟求职者行为:

 

public class TestSeeker {

	
	public static void main(String[] args) {
		
		JobSeeker jobSeeker = new JobSeeker(new ChineseResume());
		jobSeeker.postResume();
		
		jobSeeker = new JobSeeker(new EnglishResume());
		jobSeeker.postResume();

	}

}

 

 

策略模式的缺点:

 

     客户必须了解不同的Strategy:这是本模式潜在的一个缺点,其实客户要选择一个合适的Strategy就必须知道这些Strategy有何不同。这不可避免地向客户暴露具体的实现问题。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值