策略模式(Strategy Pattern),定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化。
OO设计原则:
面向接口编程(面向抽象编程)
封装变化
多用组合,少用继承
package com.main;
//策略设计模式
public class StrategyPattern {
public static void main(String[] args) {
Duck trueDuck = new TrueDuck("真鸭子");
trueDuck.setSwim(new SwimImpl());// 设置游泳的具体实现
trueDuck.swim();
System.out.println("--------------");
Duck modelDuck = new ModelDuck("模型鸭子");
modelDuck.setSwim(new NotSwimImpl());// 设置游泳的具体实现
modelDuck.swim();
}
}
// 是否会游泳的接口(将游泳这一种能力抽象出来)
interface Swimable {
public void swim();
}
// Swimable接口的实现类1
class SwimImpl implements Swimable {
@Override
public void swim() {
System.out.println("会游泳");
}
}
// Swimable接口的实现类2
class NotSwimImpl implements Swimable {
@Override
public void swim() {
System.out.println("不会游泳");
}
}
class Duck {
private String name;
// 只说明有游泳这个属性,并不去确定是否会游泳
private Swimable swim;
public void setSwim(Swimable swim) {
this.swim = swim;
}
public Duck(String name) {
this.name = name;
}
public void swim() {
System.out.print("我是" + name + ",");
swim.swim();
}
}
// 真鸭子具体类
class TrueDuck extends Duck {
public TrueDuck(String name) {
super(name);
}
}
// 模型鸭子具体类
class ModelDuck extends Duck {
public ModelDuck(String name) {
super(name);
}
}