设计模式之分组策略

策略(Strategy):一个接口,接口内部定义若干抽象方法;

具体策略(ConcreteStrategy):继承接口的某个类,类重写并具体实现接口定义的方法;

上下文(Context):包含有策略声明的变量。提供一个方法,该方法 委托 策略变量 调用 具体策略所重写的策略借口中的方法。

简单来说,即在上下文中通常做这些事:

a.声明接口变量(声明策略变量) 

b.定义方法1: 用声明的接口变量,接收方法形参传递过来的所需调用的继承接口的类对象,即 接口变量 对 实现接口类对象的引用。(策略变量引用具体策略对象)

c.定义方法2: 用完成对象引用的接口变量调用 实现接口类 中的具体方法。(使用具体策略的方法)

根据策略模式定义的类和接口就是一个开发框架,用户可以使用该框架进行程序设计,策略(框架核心)中的细节和核心部分用户可以不关心并且也无法触及和修改,但用户可以使用这个策略进行具体策略(在框架核心基础上扩展的具体框架)的开发,而不影响到策略。根据策略模式给出的开发框架模式满足“开——闭原则”,当增加新的具体策略时,不需要修改上下文类的代码,上下文就可以引用新的具体策略的实例。



public interface group{//策略(框架核心)
void group();
}
public class groupOne implements group{//具体策略(在框架核心基础上扩展的具体框架)
public void group(){
System.out.println("分组策略一");

}
}
public class groupTwo implements group{
public void group(){
System.out.println("分组策略二");

}
}
public class interGroup{//上下文
group g;
public void setGroup(group g){
this.g=g;
}
public void useGroup(){
g.group();
}
}
public class groupMain{//使用具体策略的应用(使用具体框架的应用)
public static void main(String args[]){
interGroup iG=new interGroup();
iG.setGroup(new groupOne());
iG.useGroup();
iG.setGroup(new groupTwo());
iG.useGroup();
}
}
输出:
分组策略一
分组策略二


参考自 《java面向对象程序设计——实验指导与习题解答(张跃平等 著)》




猜你喜欢

转载自blog.csdn.net/qq_38329988/article/details/80554765