1. 程式人生 > >設計模式(二)策略模式(Strategy)

設計模式(二)策略模式(Strategy)

1.分析專案中變化部分與不變部分

2.多用組合,少用繼承;用行為類組合,而不是行為的繼承

案例:

第一步,把行為抽象為介面

package top.littlepage.designPattern.Strategy;

public interface FlyBehavior {
    void fly();
}

第二步,把具體行為用實體類實現

package top.littlepage.designPattern.Strategy;

public class BadFly implements FlyBehavior{

    @Override
    
public 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)利用介面進行抽象,利用實體進行實現抽象,再做出環境進行實現具體的實體

在我們面向物件後,經常利用這種設計模式進行程式設計,應該是比較簡單的一種模式