設計模式真香筆記-策略模式
阿新 • • 發佈:2018-11-09
策略模式的定義
定義了一系列演算法,分別封裝起來,讓它們之間可以互相替換,讓演算法的變化獨立於使用他們的客戶
利用到的設計模式原則
- 找出應用中可能需要變化之處,把他們獨立出來,不要和那些不需要變化的程式碼混在一起
- 針對介面程式設計,而不是針對實現程式設計
- 多用組合少用繼承
UML類圖
實現程式碼
- Duck.java (鴨子抽象類)
package duck;
/**
* 鴨子論之實現
*
* @author hjsjy
* @create 2018/10/9
* @since 1.0.0
*/
public abstract class Duck {
Flybehavior flybehavior;
Quackbehavior quackbehavior;
public void setQuackbehavior(Quackbehavior quackbehavior) {
this.quackbehavior = quackbehavior;
}
public void setFlybehavior(Flybehavior flybehavior) {
this.flybehavior = flybehavior;
}
public void PeformFly(){
flybehavior.fly();
}
public void PerformQuack(){
quackbehavior.quack();
}
public void swim(){
System.out.println("我可以游泳!");
}
public abstract void display();
}
- Flybehavior.java (飛行行為介面)
public interface Flybehavior {
void fly();
}
- 飛行行為介面實現
public class FlyNoWay implements Flybehavior {
@Override
public void fly() {
System.out.println("不能飛!!!!!!");
}
}
- 飛行行為介面實現
*/
public class FlyOnSky implements Flybehavior {
@Override
public void fly() {
System.out.println("在天上飛!!!!!!!");
}
}
- Quackbehavior.java (鴨叫行為介面)
public interface Quackbehavior {
void quack();
}
- AQuack.java(鴨叫行為實現)
public class AQuack implements Quackbehavior {
@Override
public void quack() {
System.out.println("嘎嘎嘎!!!!!!!!!");
}
}
- NoQuack(鴨叫行為實現)
public class NoQuack implements Quackbehavior {
@Override
public void quack() {
System.out.println("沒有聲音!!!!!!!!");
}
}
- HjsjyDuck.java(實現鴨子抽象類)
public class HjsjyDuck extends Duck {
public HjsjyDuck(){
flybehavior=new FlyOnSky();
quackbehavior=new AQuack();
}
@Override
public void display() {
System.out.println("我是一直會游泳,會飛並且會嘎嘎嘎的鴨子!!!!!!!!!");
}
}
- DuckTest.java(鴨子測試類)
public class DuckTest {
public static void main(String[] args) {
Duck hjsjyDuck = new HjsjyDuck();
hjsjyDuck.display();
hjsjyDuck.swim();
hjsjyDuck.PeformFly();
hjsjyDuck.PerformQuack();
hjsjyDuck.setFlybehavior(new FlyNoWay());
hjsjyDuck.PeformFly();
}
}
輸出結果
本文參考 :《Head First 設計模式》