策略模式
三种角色:环境,抽象策略,具体策略
使用场景:
1.一个接口有多个实现类,这些实现类各有区别
2.需要封装一组动作或算法
3.将动作和具体的调用者解耦合
/**
* @Author : haojiangt
* @Description : 抽象策略。接口或者抽象类中的抽象方法可以代表一组动作或者是一组算法等等
* 由它的实现类来实现具体的操作。
**/
/**
* 肤色的接口里定义了一个得到肤色的接口
*/
public interface SkinColor {
void getColor();
}
/**
* @Author : haojiangtao
* @Description : 具体的一个实现类,实现了接口的getColor方法
**/
public class WhiteSkin implements SkinColor{
/**
* 实现了getColor()方法
*/
@Override
public void getColor() {
System.out.println("My skin is white");
}
}
/**
* @Author : haojiangt
* @Description :具体的一个实现类,实现了接口的getColor方法
**/
public class YellowSkin implements SkinColor{
/**
* 实现了getColor()方法
*/
@Override
public void getColor() {
System.out.println("My skin is yellow");
}
}
/**
* @Author : haojiangt
* @Description : 环境角色,持有一个策略的引用,实例不同,具体的实现就不同
* 在初始化时,决定注入哪个实例。这样一个算法或动作的不同实现就可以自由切换。
**/
/**
* 使用场景: 一个接口有多个实现类,这些实现类各有区别
* 需要封装一组动作或算法
* 将动作和具体的调用者解耦合
*/
public class People {
private SkinColor skinColor;
/**
* 在构造方法中注入SkinColor
* @param skinColor
*/
public People(SkinColor skinColor) {
this.skinColor = skinColor;
}
public void showColor(){
this.skinColor.getColor();
}
public static void main(String[] args){
//实例化People时,注入skinColor的不同实现类,得到不同结果
People first = new People(new YellowSkin());
first.showColor();
People second = new People(new WhiteSkin());
second.showColor();
}
}
输出:
My skin is yellow
My skin is white