Java设计模式之策略模式

本文通过策略模式解释了鸣人在不同情境下使用不同忍术的机制,包括色诱术、多重影分身术和螺旋丸,强调了模式在避免代码冗余和提高代码复用性方面的优势。

一、引入

上一篇简单工厂模式,理应能多次调用同一方法,这就与秽土转生好像矛盾了,毕竟一个人只有一个灵魂,无法持续对一个人多次转生,既然这样的话,那笔就是设计模式之单例模式吗?有点道理,下次整理整理写吧

上一篇写到秽土转生,其实还有个缺点,就是违反了高内聚低耦合的原则,要拓展秽土转生术的范围,必须对工厂类进行改变,即对大蛇丸类里的秽土转生方法进行改变,这明显是一个不好的方法。因此就想到了策略模式,那么换个例子来写策略模式,就写鸣人,鸣人遇到不同的人就使用不同的忍术,遇到三代老头色诱术,遇到水木要杀伊鲁卡多重影分身,遇到药师兜来个螺旋丸,不同的情况使用不同的术,我想应该是这个策略模式,那么来先看下结构图理解下

二、模式结构


解释下UML图,这里同样是有三个角色分别是:

1、抽象策略类,描述鸣人遇到各种情况应对的策略,即使用的忍术 。 对应Strategy(抽象策略类)

2、SeYouShu,LuoXuanWan,DuoChongYingFenShen类,描述鸣人会的各种忍术并用这些忍术处理突发情况 。对应ConcreteStrategy(具体策略类)

3、MinRen类,描述鸣人遇到各种场景释放不同忍术。对应Context(应用场景)

三、源代码-模式实现

package strategyPattern;

/**
 * @author hanhexin
 * 
 */
public interface IStrategy {
	//定义个接口,描述鸣人会的忍术
	public void renshu();
}

package strategyPattern;

/**
 * @author hanhexin
 *色诱术
 */
public class SeYouShu implements IStrategy {

	/* (non-Javadoc)
	 * @see strategyPattern.Strategy#renshu()
	 */
	public void renshu() {
		// TODO Auto-generated method stub
		System.out.println("鸣人遇到三代老头,使用色诱术成功逃脱");
	}

}

package strategyPattern;

/**
 * @author hanhexin
 *多重影分身术
 */
public class DuoChongYingFenShen implements IStrategy {

	/* (non-Javadoc)
	 * @see strategyPattern.IStrategy#renshu()
	 */
	public void renshu() {
		// TODO Auto-generated method stub
		System.out.println("鸣人保护伊鲁卡,使出多重影分身术");
	}

}

package strategyPattern;

/**
 * @author hanhexin
 *螺旋丸
 */
public class LuoXuanWan implements IStrategy{

	/* (non-Javadoc)
	 * @see strategyPattern.Strategy#renshu()
	 */
	public void renshu() {
		// TODO Auto-generated method stub
		System.out.println("鸣人学会螺旋丸,击败药师兜");
	}

}

package strategyPattern;

/**
 * @author hanhexin
 * 
 */
public class MingRen {
	private IStrategy strategy;

	public MingRen(IStrategy strategy) {
		this.strategy = strategy;
	}
	
	//肯据具体的策略对象,调用其忍术的方法
	public void renshuInterface() {
		strategy.renshu();
	}
}

package strategyPattern;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MingRen mRen;
		
		//前几集小时候的鸣人在历代火影头像上被三代老头逮住了
		//鸣人使用色诱术成功逃脱
		mRen = new MingRen(new SeYouShu());
		mRen.renshuInterface();
		
		//鸣人为救伊鲁卡,使用多重影分身教训水树(注水树就是唆使鸣
		//人去偷的多重影分身那个人)
		mRen = new MingRen(new DuoChongYingFenShen());
		mRen.renshuInterface();
		
		//传说中三忍那集中,鸣人遇到药师兜用螺旋丸将其击败
		mRen = new MingRen(new LuoXuanWan());
		mRen.renshuInterface();
	}

}

四、模式简介

来源:http://baike.baidu.com/view/2141079.htm

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

组成:
—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
—具体策略角色:包装了相关的算法和行为。
—环境角色:持有一个策略类的引用,最终给客户端\调用。


Context(应用场景):

1、需要使用ConcreteStrategy提供的算法。
2、 内部维护一个Strategy的实例。
3、 负责动态设置运行时Strategy具体的实现算法。
4、负责跟Strategy之间的交互和数据传递。


Strategy(抽象策略类):

1、 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象类实现。


ConcreteStrategy(具体策略类):

2、 实现了Strategy定义的接口,提供具体的算法实现。


五、模式优缺点


优点:
1、 提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。
2、 避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。
3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。


缺点:

1、 因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。
解决方案:工厂方法


六、使用场景
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

----------欢迎转载  原文链接:http://blog.youkuaiyun.com/hhxin635612026/article/details/9016345-------------------------------------------------------


标题基于SpringBoot的马术俱乐部管理系统设计与实现AI更换标题第1章引言介绍马术俱乐部管理系统的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义阐述马术俱乐部管理系统对提升俱乐部管理效率的重要性。1.2国内外研究现状分析国内外马术俱乐部管理系统的发展现状及存在的问题。1.3研究方法以及创新点概述本文采用的研究方法,包括SpringBoot框架的应用,以及系统的创新点。第2章相关理论总结和评述与马术俱乐部管理系统相关的现有理论。2.1SpringBoot框架理论介绍SpringBoot框架的基本原理、特点及其在Web开发中的应用。2.2数据库设计理论阐述数据库设计的基本原则、方法以及在管理系统中的应用。2.3马术俱乐部管理理论概述马术俱乐部管理的基本理论,包括会员管理、课程安排等。第3章系统设计详细描述马术俱乐部管理系统的设计方案,包括架构设计、功能模块设计等。3.1系统架构设计给出系统的整体架构,包括前端、后端和数据库的交互方式。3.2功能模块设计详细介绍系统的各个功能模块,如会员管理、课程管理、预约管理等。3.3数据库设计阐述数据库的设计方案,包括表结构、字段设计以及数据关系。第4章系统实现介绍马术俱乐部管理系统的实现过程,包括开发环境、编码实现等。4.1开发环境搭建介绍系统开发所需的环境,包括操作系统、开发工具等。4.2编码实现详细介绍系统各个功能模块的编码实现过程。4.3系统测试与调试阐述系统的测试方法、测试用例以及调试过程。第5章系统应用与分析呈现马术俱乐部管理系统的应用效果,并进行性能分析。5.1系统应用情况介绍系统在马术俱乐部中的实际应用情况。5.2系统性能分析从响应时间、并发处理能力等方面对系统性能进行分析。5.3用户反馈与改进收集用户反馈,提出系统改进建议。第6章结论与展望总结马术俱乐部管理系统的设计与实现成果,并展望未来的研究
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值