設計模式1-》 策略模式

分別封裝行爲接口實現算法族超類裏放行爲接口對象在子類裏具體設
定行爲對象原則就是分離變化部分封裝接口基於接口編程各種功能此模式讓行爲
算法的變化獨立於算法的使用者
 
 

 

 
 
 
 
 
代碼講解
 
1:定義行爲並進行抽象
 
 
 
 
1.1同一類型行爲進行抽象後的不用實現方式
 
 
 
 
 
 
 
 
 
 
 
 
 
2:定義對象模型,並確定對象所承載的行爲和對象的特有行爲和熟悉
package designmode.mycelve.Behavi;

import designmode.mycelve.bo1.Sleep;
import designmode.mycelve.bo2.Talk;

/**
 * * *  GOOK LUCK  * *
 *
 * @Author: wkn,
 * @Date: 2020/2/16.
 * @DESC: 定義一個能承載說話和睡覺的動物模型,這個模型不是具體的對象,
 */
public abstract class AnimalMode {

   public Sleep sleep;
   public Talk talk;


    public AnimalMode() {
    }



    public void setSleep(Sleep sleep) {
        this.sleep = sleep;
    }

    public void setTalk(Talk talk) {
        this.talk = talk;
    }


    /**
     * 內部對象的睡覺方法
     */
    public void slee() {
        sleep.slee();
    }


    /**
     * 內部對象的說話方法
     */
    public void tal() {
        talk.tal();
    }



    /**
     * 動物模型固有的方法1
     */
    public void eat() {
        System.out.println("喫飯");
    }


    /**
     * 動物模型固有的方法1
     */
    public void swim() {
        System.out.println("洗澡");
    }

    public abstract void display();
}

2.1:對象模型定義好之後,確定具體的對象模型和領域行爲

 


/**
 * * *  GOOK LUCK  * *
 *
 * @Author: wkn,
 * @Date: 2020/2/16.
 * @DESC:
 */
public class Cat extends AnimalMode {


    @Override
    public void display() {
        System.out.println("貓實體");
    }
}











/**
 * * *  GOOK LUCK  * *
 *
 * @Author: wkn,
 * @Date: 2020/2/16.
 * @DESC:
 */
public class Dog extends AnimalMode {


//    public Dog() {
//        sleep = new SideSleep();
//        talk = new GuguTalk();
//    }


    @Override
    public void display() {
        System.out.println("狗實體");
    }



}










 

 
 
 
 
 
 
3:測試
package designmode.mycelve;

import designmode.mycelve.Behavi.AnimalMode;
import designmode.mycelve.animal.Cat;
import designmode.mycelve.animal.Dog;
import designmode.mycelve.bo1.LieSleep;
import designmode.mycelve.bo1.SideSleep;
import designmode.mycelve.bo2.GuguTalk;
import designmode.mycelve.bo2.JijiTalk;
import org.junit.Test;

/**
 * * *  GOOK LUCK  * *
 *
 * @Author: wkn,
 * @Date: 2020/2/16.
 * @DESC: 策略模式測試類
 */
public class MyCeleTest {



    @Test
    public void test12() {
        AnimalMode dog = new Dog();
        AnimalMode cat = new Cat();

        dog.display();
        dog.eat();
        dog.setSleep(new SideSleep());
        dog.slee();
        dog.setTalk(new JijiTalk());
        dog.tal();

System.out.println("------------------------------------------");

        cat.display();
        cat.eat();
        cat.setSleep(new LieSleep());
        cat.slee();
        cat.setTalk(new GuguTalk());
        cat.tal();


    }
}

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
注意點:
1、分析項目中變化部分與不變部分
2、多用組合少用繼承;用行爲類組合,而不是行爲的繼承。更有彈性
3、設計模式有沒有相應的庫直接使用?有些庫或框架本身就用某種設計模式設計的
4、如果找不到適用的模式怎麼辦
 
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章