1. 程式人生 > >設計模式總結(面試必問二)

設計模式總結(面試必問二)

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