設計模式(二)策略模式(Strategy)
阿新 • • 發佈:2018-11-09
1.分析專案中變化部分與不變部分
2.多用組合,少用繼承;用行為類組合,而不是行為的繼承
案例:
第一步,把行為抽象為介面
package top.littlepage.designPattern.Strategy; public interface FlyBehavior { void fly(); }
第二步,把具體行為用實體類實現
package top.littlepage.designPattern.Strategy; public class BadFly implements FlyBehavior{ @Overridepublic void fly() { System.out.println("--bad fly--"); } }
package top.littlepage.designPattern.Strategy; public class NotFly implements FlyBehavior{ @Override public void fly() { System.out.println("--not fly--"); } }
package top.littlepage.designPattern.Strategy;public class GoodFly implements FlyBehavior{ @Override public void fly() { System.out.println("--good fly--"); } }
第三步,做出具體的環境進行實現該實體
package top.littlepage.designPattern.Strategy; public class Bird { private String name; private int age; private GoodFly goodfly;private BadFly badfly; private NotFly notfly; public Bird() { name=""; age=0; goodfly=new GoodFly(); badfly=new BadFly(); notfly=new NotFly(); } public GoodFly getGoodfly() { return goodfly; } public void setGoodfly(GoodFly goodfly) { this.goodfly = goodfly; } public BadFly getBadfly() { return badfly; } public void setBadfly(BadFly badfly) { this.badfly = badfly; } public NotFly getNotfly() { return notfly; } public void setNotfly(NotFly notfly) { this.notfly = notfly; } public Bird(String name, int age) { this.name = name; this.age = age; goodfly=new GoodFly(); badfly=new BadFly(); notfly=new NotFly(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
測試:
package top.littlepage.designPattern.Strategy; public class Test { public static void main(String[] args) { Bird b=new Bird("小鳥",2); System.out.print(b.getName()); b.getGoodfly().fly(); System.out.print(b.getName()); b.getBadfly().fly(); System.out.print(b.getName()); b.getNotfly().fly(); } }
控制檯截圖
策略模式(strategy)利用介面進行抽象,利用實體進行實現抽象,再做出環境進行實現具體的實體
在我們面向物件後,經常利用這種設計模式進行程式設計,應該是比較簡單的一種模式