策略模式的经典意义在于各个不同的实现,使用的是相同的接口。也就是网友所说的:策略算法相同的行为的不同实现。
下面举例子
比如要去书店买书,书店的会员分为高级会员、中级会员与初级会员。高级会员打8折、中级会员打9折、初级会员打95折。
再此例子上,我们发现。我们的共同特点都是买书,那我们就可以把买书的这个策略抽象出来,在Java中我们可以用接口来定义此特点
interface commonTedian
public double buyBook(double price);
上面也 说到了、不同的人买书需要不用的价格,所以需要有不同的人的类的行为来实现此买书的动作。确切的来说 应该是买书的价格受到了会员机制的影响。
比如:高级会员实现买书接口,那在实现价格方面。也就是
class GaoJi implements TeDian
override
double buBook(double price){
return price*0.8
}
/**每个会员实现此方法类似**/
大家想,实现了买书的接口、得到了买书的行为。那我们怎么样让客户端知道什么样的会员选择什么样的标准呢?
学过JAVA的人都知道context这个东西,上下文,他的作用就是承上启下的作用。相当于联系两个黑色盒子的中间的部分,他是他是透明的。
既然是做联系用的,那我们在这个class中需要做的就是聚合
class context
TeDian td;
public context(TeDian td){ //此构造是获取客户端选择什么样的会员,为了承上,也就是为了输入
this.td = td;
}
public double quote(double price){ //此方法是做价格动作的引用,为了启下,也就是为了输出
this.td.buBook(price);
}
客户端
TeDian td = new GaoJi();//这个是客户的选择,这里面可以有多种实现。
context ctx = new context(td); //构造函数接收用户输入
double dd= ctx.quote(200);//根据不同的会员选择不同的价格
有些描述不是很准确,大家理解就好。