定义了算法族,封装起来,让它们可以相互替换,让算法的变化独立于使用算法的客户。
下面的例子分离了鸟类的fly()方法.
Bird抽象类及其子类Eagle,Penguin
public abstract class Bird {
private Flyable flyable;
private String name;
public Bird(String name) {
this.name = name;
}
public void setFlyable(Flyable flyable) {
this.flyable = flyable;
}
public void fly() {
flyable.fly();
}
}
class Eagle extends Bird {
public Eagle() {
super("eagle");
}
}
class Penguin extends Bird {
public Penguin() {
super("eagle");
}
}
Flyable接口及其实现类
public interface Flyable {
void fly();
}
class HighAndFast implements Flyable {
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("Fly high and fast");
}
}
class CannotFly implements Flyable {
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println("Can not fly ");
}
}
测试代码
public class TestClass {
public static void main(String[] args) {
Eagle eagle = new Eagle();
eagle.setFlyable(new HighAndFast());
Penguin penguin = new Penguin();
penguin.setFlyable(new CannotFly());
eagle.fly();
penguin.fly();
}
}