設計模式總結(面試必問二)
1 裝飾設計模式(IO流)
對一組物件的功能進行增強時,就可以使用該模式進行問題的解決
好處:耦合行沒有那麼,被裝飾類的變化裝飾類的變化無關
特點:裝飾類和被裝飾類都必須屬於同一介面或者父類
interface Coder { publicvoid code(); } classStudent implements Coder { @Override publicvoid code() { System.out.println("javase"); System.out.println("javaweb"); } } classItcastStudent implements Coder { privateStudent s; //獲取到被包裝的類的引用 publicItcastStudent(Student s) { //通過建構函式建立物件的時候,傳入被包裝的物件 this.s= s; } @Override publicvoid code() { //對其原有功能進行升級 s.code(); System.out.println("資料庫"); System.out.println("ssh"); System.out.println("安卓"); System.out.println("....."); } }
2 介面卡設計模式(Adapter)
* a.什麼是介面卡
*在使用監聽器的時候, 需要定義一個類事件監聽器介面.
*通常介面中有多個方法, 而程式中不一定所有的都用到, 但又必須重寫, 這很繁瑣.
*介面卡簡化了這些操作, 我們定義監聽器時只要繼承介面卡, 然後重寫需要的方法即可.
* b.介面卡原理
*介面卡就是一個類, 實現了監聽器介面, 所有抽象方法都重寫了, 但是方法全是空的.
*介面卡類需要定義成抽象的,因為建立該類物件,呼叫空方法是沒有意義的
*目的就是為了簡化程式設計師的操作, 定義監聽器時繼承介面卡, 只重寫需要的方法就可以了.
3 模版(Template)設計模式
* A:模版設計模式概述
*模版方法模式就是定義一個演算法的骨架,而將具體的演算法延遲到子類中來實現
* B:優點和缺點
*a:優點
*使用模版方法模式,在定義演算法骨架的同時,可以很靈活的實現具體的演算法,滿足使用者靈活多變的需求
*b:缺點
*如果演算法骨架有修改的話,則需要修改抽象類
例項:DaoSuppourt(JdbcDaoSupport)
public abstract class DaoSupport{ protectedabstract void checkDaoConfig() throws IllegalArgumentException; } public abstract class JdbcDaoSupportextends DaoSupport { protectedvoid checkDaoConfig() { if(this.jdbcTemplate == null) { thrownew IllegalArgumentException("'dataSource' or 'jdbcTemplate' isrequired"); } } public final void setDataSource(DataSourcedataSource) { if(this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()){ this.jdbcTemplate= createJdbcTemplate(dataSource); } } protectedJdbcTemplate createJdbcTemplate(DataSource dataSource) { returnnew JdbcTemplate(dataSource); } publicfinal void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate= jdbcTemplate; initTemplateConfig(); } publicfinal JdbcTemplate getJdbcTemplate() { return this.jdbcTemplate; } }
4 工廠模式
* A:工廠方法模式概述
*工廠方法模式中抽象工廠類負責定義建立物件的介面,具體物件的建立工作由繼承抽象工廠的具體類實現。
* B:優點
*客戶端不需要在負責物件的建立,從而明確了各個類的職責,如果有新的物件增加,只需要增加一個具體的類和具體的工廠類即可,不影響已有的程式碼,後期維護容易,增強了系統的擴充套件性
* C:缺點
*需要額外的編寫程式碼,增加了工作量
* D:案例演示
*
動物抽象類:public abstract Animal { public abstract void eat(); }
工廠介面:public interface Factory {public abstract Animal createAnimal();}
具體狗類:public class Dog extends Animal {}
具體貓類:public class Cat extends Animal {}
開始,在測試類中每個具體的內容自己建立物件,但是,建立物件的工作如果比較麻煩,就需要有人專門做這個事情,所以就知道了一個專門的類來建立物件。發現每次修改程式碼太麻煩,用工廠方法改進,針對每一個具體的實現提供一個具體工廠。
狗工廠:public class DogFactory implements Factory {
publicAnimal createAnimal() {…}
}
貓工廠:public class CatFactory implements Factory {
publicAnimal createAnimal() {…}
}
4.1 簡單工廠模式概述
*又叫靜態工廠方法模式,它定義一個具體的工廠類負責建立一些類的例項
* B:優點
*客戶端不需要在負責物件的建立,從而明確了各個類的職責
* C:缺點
*這個靜態工廠類負責所有物件的建立,如果有新的物件增加,或者某些物件的建立方式不同,就需要不斷的修改工廠類,不利於後期的維護
* D:案例演示
*動物抽象類:public abstract Animal { public abstractvoid eat(); }
*具體狗類:public class Dog extends Animal {}
*具體貓類:public class Cat extends Animal {}
*開始,在測試類中每個具體的內容自己建立物件,但是,建立物件的工作如果比較麻煩,就需要有人專門做這個事情,所以就知道了一個專門的類來建立物件。
例項:org.springframework.beans.factory.FactoryBean