設計模式-外觀模式


本文介紹外觀模式,依然通過簡單的代碼實現來介紹外觀模式:
//文件讀取類
public class FilterReader {
public void read(String fileName){
System.out.println("模擬讀取文件的類");
}

}


//文件寫入類

public class FilterWriter {
public String writer(String fileName){
return "模擬把加密後的文件寫操作類!!";
}
}


/**
 * 文件加密類模擬
 * @author 光腚
 *
 */
public class CipherMachine {
public void encrypt(String plainText){
System.out.println("模擬數據加密文件,將文件加密");
}
}


/**
 * 抽象外觀類,針對抽象層編碼
 * 引入外觀的抽象類的好處是,如果哪一天更改了某個具體的實現類,如更改了
 * 加密方法類,我們必須要修改客戶端對於外觀類的調用,同時還需要修改具體的
 * 外觀類,如果引入了抽象層,那麼客戶端針對抽象層編碼,然後把具體的外觀類放入
 * XML,如果增加或者修改一個新的加密文件,那麼只需要重新建立一個外觀類,然後把這個
 * 外觀類,加入XML文件,這樣客戶端就可以不需修改任何代碼,外觀類也可以不需要變動
 * 
 *
 */
public abstract class AbstractEncyptFacade {
public abstract void  fileEncypt(String fileNameSrc,String fileNameDes);
}



/**
 * 具體的外觀類
 * @author 光腚
 * 
 * 
 *
 */
public class NewEncyptFacade extends AbstractEncyptFacade{

FilterWriter fileter = null;
FilterReader fileReader = null;
CipherMachine machine = null;

public NewEncyptFacade(){
fileter = new FilterWriter();
fileReader = new FilterReader();
machine = new CipherMachine();
}


@Override
public void fileEncypt(String fileNameSrc, String fileNameDes) {
String fileStrc = fileter.writer(fileNameSrc);
machine.encrypt(fileStrc);
fileReader.read(fileNameDes);
}
}





public class Client {
public static void main(String[] args) {
AbstractEncyptFacade faca = null;
/*
* 爲了保證系統的可擴展性和滿足開閉原則,則需要吧具體的抽象實現類
* 寫入XML文件,然後通過讀取配置文件的方式然後生成對象,這樣可以在不修改
* 客戶端代碼的情況下,進行擴展。

*/
faca = new NewEncyptFacade();
}


/**
* 總結:
* 此代碼是模擬了外觀模式的簡單實現,不難發現,此模式也主要就是加入了中間層,
* 這樣對於客戶端,就是通過則個外觀類進行和子系統的交互,不需要修改客戶端的
* 代碼,不難發現,所有的設計模式都緊緊把握不修改客戶端代碼的前提下,即符合
* 開閉原則,開始設計的。當然任何一個設計模式
* 都有他的缺點,對於外觀模式,它的缺點就是:
* 第一:由於加入了中間層,所以客戶端不能直接和子系統交互,因爲在外觀裏面已經控制了
* 訪問子系統的個數,所以這樣減少了可變性和靈活性
* 第二:如果涉及不當,那麼增加子系統,則需要修改外觀類


* 應用場景:
* 第一:我們項目中常使用的分層架構,service,dao,Delegate
* 第二:客戶端與子系統有太多的依賴,引入外觀類可以屏蔽子系統的交互,而且只提供一個單一
* 的入口,避免客戶端重複的代碼編寫
*/
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章