Java設計模式之002--策略模式

策略模式Strategy Pattern) :定義了一系列的算法, 將每一種算法封裝起來並能夠相互替換使用, 策略模式讓算法獨立於使用它的客戶應用而獨立變化。 算法

OO設計原則:數據庫

1.面向接口編程(面向抽象編程);編程

2.封裝變化;設計模式

3.多用組合, 少用繼承 ;
微信

 

當一個功能有多種實現方式時, 咱們應該使用策略設計模式, 把功能抽象出來, 而後用不一樣的子類各自提供實現類, 在真正使用時, 根據業務狀況來動態替換 網絡

把可變的行爲抽象出來, 這樣的好處是這些行爲能夠在真正使用時相互替換。ide

 

策略模式的實際應用:工具

1.數據庫操做封裝;性能

2.微信掃碼登陸註冊綁定操做 ;

測試

舉例說明:將數據保存到不一樣的地方,好比文件、網絡、數據庫中。

a.建立接口,以供不一樣方式去實現

public interface ISave {
public void save(String data);
}

b.以供不一樣方式去實現接口中的方法

public class FileSave implements ISave{
@Override
public void save(String data){
System.out.println("把數據["+data+"]存儲到文件中");
}
}
public class DBSave implements ISave{
@Override
public void save(String data) {
System.out.println("把數據["+data+"]存儲到數據庫中");
}
}

public class NetSave implements ISave{
    @Override
public void save(String data) {
System.out.println("把數據["+data+"]存儲到網絡中");
}
}

c.經過類來組合接口和接口的實現類,自上而下地調用具體不一樣對象的相同方法,來實現多態性

public class DataContext {
private ISave iSave; //DataContext只依賴接口,不依賴具體的實現---->面向接口編程

public DataContext(ISave iSave){
this.iSave = iSave;
}

public void save1(String data){
iSave.save(data);  //經過接口來調用具體對象的sava方法(父類調子類方法原理)
}
}

測試對比:

public class Test {    public static void main(String[] args) throws Exception{//1 依賴了具體類 //1        ISave iSave = new FileSave();   //1        iSave.save("苦戰Java一生!!");//2 依賴接口(抽象類),具體的對象建立還要經過代碼來改動//2        DataContext dc = new DataContext(new FileSave());  //2        dc.save1("苦戰Java一生!!");                //3 依賴接口(抽象類),具體的對象類脫離到屬性文件中(config.properties),而不是放在代碼中    //讓軟件更加利於維護(提升程序的可擴張性),犧牲性能           Properties prop = new Properties();     //屬性文件工具類        prop.load(Thread.currentThread().getContextClassLoader()                .getResourceAsStream("config.properties"));        //屬性文件中(config.properties): context.save=NetSave        String className = prop.getProperty("context.save");        ISave iSave = (ISave) Class.forName(className).newInstance();        DataContext dc = new DataContext(iSave);         dc.save1("苦戰Java一生!!");    }}
相關文章
相關標籤/搜索