日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java設(shè)計模式之002--策略模式

 Coder編程 2021-07-11

策略模式Strategy Pattern) :定義了一系列的算法, 將每一種算法封裝起來并可以相互替換使用, 策略模式讓算法獨立于使用它的客戶應(yīng)用而獨立變化。 

OO設(shè)計原則:

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

2.封裝變化;

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

 

當(dāng)一個功能有多種實現(xiàn)方式時, 我們應(yīng)該使用策略設(shè)計模式, 把功能抽象出來, 然后用不同的子類各自提供實現(xiàn)類, 在真正使用時, 根據(jù)業(yè)務(wù)情況來動態(tài)替換 

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

 

策略模式的實際應(yīng)用:

1.數(shù)據(jù)庫操作封裝;

2.微信掃碼登錄注冊綁定操作 ;

舉例說明:將數(shù)據(jù)保存到不同的地方,比如文件、網(wǎng)絡(luò)、數(shù)據(jù)庫中。

a.創(chuàng)建接口,以供不同方式去實現(xiàn)

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

b.以供不同方式去實現(xiàn)接口中的方法

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

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

c.通過類來組合接口和接口的實現(xiàn)類,自上而下地調(diào)用具體不同對象的相同方法,來實現(xiàn)多態(tài)性

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

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

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

測試對比:

public class Test {
public static void main(String[] args) throws Exception{
//1 依賴了具體類
//1 ISave iSave = new FileSave();
//1 iSave.save("苦戰(zhàn)Java一輩子?。?);

//2 依賴接口(抽象類),具體的對象創(chuàng)建還要通過代碼來改動
//2 DataContext dc = new DataContext(new FileSave());
//2 dc.save1("苦戰(zhàn)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("苦戰(zhàn)Java一輩子??!");
}
}


 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多