您的位置:首页 > 其它

设计模式(策略模式)

2017-10-24 12:34 204 查看
妈妈有3个孩子一个叫小明一个叫小芳,一个叫小红,有一天妈妈要求他们去买东西

首先定义一个接口

package 策略模式;

public interface IStrategy {
//这是一个买东西方法
public void operate();
}


这是一个通用的买东西接口

package 策略模式;

public interface IStrategy {
//这是一个买东西方法
public void operate();
}


看看实现类小芳继承IStrategy

package 策略模式;

public class xiaofang implements IStrategy{
@Override
public void operate() {
System.out.println("小芳买了个玩具");
}
}


看看实现类小明继承IStrategy

package 策略模式;

public class  xiaoming implements IStrategy{
//继承买东西的方法
@Override
public void operate() {
System.out.println("小明买了个棒槌");
}
}


看看实现类小红继承IStrategy

package 策略模式;

public class  xiaohong implements IStrategy{
//继承买东西的方法
@Override
public void operate() {
System.out.println("小红买了个棒棒糖");
}
}


再看看通用的调用类

package 策略模式;
public class Context {
//构造函数,小明,小芳,小红买东西时候通用调用,
//IStrategy定义一个变量,因为小明,小芳,小红都实现了IStrategy类
//那么就可以把小明,小芳,小红对象传递到构造参数中
private IStrategy straegy;
public Context(IStrategy strategy){
this.straegy = strategy;
}

//买东西了
public void operate(){
this.straegy.operate();
}
}


再看看测试方法

package 策略模式;

public class Test {
public static void main(String[] args) {
//原始调用方法
/*      IStrategy IStrategy=new xiaofang();
xiaofang.operate();
这样方法是不是很不舒服总是要实例化自己才能调用
那么有了下面这个类再看我将小明作为对象传递到通用的Context构造方法中让Context去实例化是不是就灵活多了
*/      //小芳买东西
IStrategy IStrategy=new xiaofang();
Context context=new Context(IStrategy);
context.operate();
//小明买东西
IStrategy IStrategy1=new xiaoming();
Context Context1=new Context(IStrategy1);
Context1.operate();
//小红买东西
IStrategy IStrategy2=new xiaoming();
Context Context2=new Context(IStrategy2);
Context2.operate();

}

}


输出

小芳买了个玩具

小明买了个棒槌

小明买了个棒槌
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: