设计模式之策略模式

原创 2016年05月31日 16:43:38

今天,我们来介绍一下设计模式中的策略模式。

一、策略模式的概念

策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法独立于使用算法的客户。

二、策略模式的原理

针对接口编程,而不是针对实现编程。

三、案例分析

鸭子有各种各样的行为,例如飞行或者鸣叫,同时,鸭子也可以分为各种各样的品种,有一些品种的鸭子会飞会叫,有一些鸭子会叫不会飞。用一个设计模式能够更好地满足以下条件:

1、鸭子的各种行为能够被其他对象复用。

2、可以新增一些行为,可以不用影响既有的行为类与使用该行为的对象类。

3、对象类能够对动态地设定行为。

四、类图关系

首先,不再把鸭子的各种行为说成是“一组行为”,我们开始把行为想成是“一簇算法”,算法代表了鸭子能干的各种事(包括飞行与鸣叫)。以下是该模式的类图


五、个人见解

策略模式主要是将变化的行为从实体类分离出来,将会变化的行为封装起来,实现了面向接口的编程,而不是面向实现编程的设计原则,大大提高了代码的复用性,也具有继承的优点,避免了继承被滥用所造成的代码在多个子类中重用,运行时不容易改变行为,很难知道所有实体类的全部行为以及牵一发而动全身等等弊端。

六、模式优点

使用策略模式可以让鸭子实体与鸭子的呱呱叫以及飞行动作分离出来,使这些行为能够被其他对象复用,因为这些行为已经和鸭子类没有什么关系了。而且,我们还可以新增一些行为,不会影响到现有的行为类以及使用该行为的鸭子类。

七、应用场景

主要适用于需要把行为从主体类中分离出来的场景,例如:一款射击类游戏,玩家可以具有射击的动作,而射击动作又可以分为用石头射击,用子弹射击,用大炮射击等等,这些就构成了一组算法簇,这些行为是可以相互替换的。实现大致代码如下:

class Player{
		private Shoot shoot;
		
		public Player(Shoot shoot){
			this.shoot=shoot;
		}
		
		public shooting(){
			shoot.shooting();
		}

		private setShoot(Shoot shoot){
			this.shoot=shoot;
		}
}
//射击行为
public Interface Shoot(){
	public shooting();
}
class ShootWithStone implements Shoot{
	public shooting(){
		//	具体实现用石头射击的行为
	}
}
class ShootWithGum implements Shoot{
	public shooting(){
		//具体实现用枪射击的行为
	}
}
class ShootWithCannon implements Shoot{
	public shooting(){
		//具体实现用大炮射击的行为
	}
}






版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计模式—策略模式

  • 2015-12-31 00:08
  • 1.43MB
  • 下载

Java 设计模式 策略模式

  • 2014-04-19 17:16
  • 11KB
  • 下载

JAVA设计模式之策略模式的使用分析

策略模式是面向对象行为模式中的一种简单常用的设计模式。 首先看下GOF对策略模式的定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客...

Java设计模式-策略模式

设计模式笔记--策略模式

设计模式笔记--策略模式

设计模式-策略模式

在软件开发中,我们经常遇到针对不同情况使用不同的算法或者逻辑,然后用if/else来控制起来,我们来看个例子,比如说国足要征战世界杯亚洲区12强赛,那么针对不同对手,需要有不同的打法和战术public...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)