策略模式
2016-05-15 本文已影响4人
keith666
Intent
- Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from the clients that use it.
- Capture the abstraction in an interface, bury implementation details in derived classes.
结构图
duck by keith代码实现:
//behavior interface
interface QuackBehavior {
void quack();
}
//quack
class Quack implements QuackBehavior {
@Override
public void quack() {
System.out.println("Quack");
}
}
// muteQuack
class MuteQuack implements QuackBehavior {
@Override
public void quack() {
System.out.println("Silence");
}
}
//Squeak
class Squeak implements QuackBehavior {
@Override
public void quack() {
System.out.println("Squeak");
}
}
//client
abstract class Duck {
private QuackBehavior quackBehavior;
public Duck() {
}
abstract void display();
public void performQuack() {
quackBehavior.quack();
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
}
//ModelDuck
class ModelDuck extends Duck {
@Override
void display() {
System.out.println("I am a model duck.");
}
}
//test
public class Strategy {
public static void main(String[] args) {
Duck duck = new ModelDuck();
//对方法的抽象(也就是algorithm)之后,可以独立的按需调用相应的实现,更加灵活。
duck.setQuackBehavior(new Quack());
duck.performQuack();
}
}