定义:
定义了算法族,分别封装起来,让它们之间可以相互替代,此模式让算法的变化独立于使用算法的客户。
实现:
UML图
代码:
Duck.java
package com.zjm.duck;
import com.zjm.fly.FlyBehavior;
import com.zjm.quack.QuackBehavior;
public abstract class Duck {
FlyBehavior mFly;
QuackBehavior mQuack;
public void swim() {
};
public abstract void display();
public void performFly() {
mFly.fly();
};
public void performQuack() {
mQuack.quack();
};
}
MallerdDuck.java
package com.zjm.duck;
import com.zjm.fly.FlyWithWings;
import com.zjm.quack.Quack;
public class MallerdDuck extends Duck {
public MallerdDuck() {
mFly = new FlyWithWings();
mQuack = new Quack();
}
@Override
public void display() {
// TODO Auto-generated method stub
System.out.println("MallerdDuck");
}
}
RedHead.java
package com.zjm.duck;
import com.zjm.fly.FlyWithWings;
import com.zjm.quack.Squeak;
public class RedHeadDock extends Duck {
public ReaHeadDock() {
mFly = new FlyWithWings();
mQuack = new Squeak();
}
@Override
public void display() {
// TODO Auto-generated method stub
System.out.println("RedHeadDock");
}
}
RubberDuck.java
package com.zjm.duck;
import com.zjm.fly.FlyNoWay;
import com.zjm.quack.MuteQuack;
public class RubberDuck extends Duck {
public RubberDuck() {
mFly = new FlyNoWay();
mQuack = new MuteQuack();
}
@Override
public void display() {
// TODO Auto-generated method stub
System.out.println("RubberDuck");
}
}
FlyBehavior.java
package com.zjm.fly;
public interface FlyBehavior {
public void fly();
}
FlyNoWay.java
package com.zjm.fly;
public class FlyNoWay implements FlyBehavior {
@Override
public void fly() {
// TODO Auto-generated method stub
System.out.println(" I can't fly!");
}
}
...
第二个小例子:
代码链接2
OO基础
抽象
封装
多态
继承
OO原则
封装变化
多用组合,少用继承
针对接口编程,不针对实现编程
OO设计必须具备可复用、可扩充、可维护三个特性
设计原则:
找出应用中可能需要变化之处,把它们独立出来,不需要和那些不变化的代码混在一起,
针对接口编程,而不是针对实现编程。
多用组合,少用继承
要点:
模式不是代码,而是针对设计问题的通用解决方案,你可以把它们应用到特定的应用中。
大多数模式和原则,都着眼于软件变化的主题,都允许系统局部改变独立于其他部分。