摘要:適配器模式的結構通過繼承實現(xiàn)通過委讓實現(xiàn)代碼實現(xiàn)目標類使用數(shù)據(jù)線適配類使用轉(zhuǎn)適配線主函數(shù)與在適配器模式中的應用當前,不少公司使用整合進行系統(tǒng)開發(fā)。
Java 23種設計模式----適配器模式
1、面向?qū)ο驩O = 面向?qū)ο蠓治鯫OA + 面向?qū)ο笤O計OOD + 面向?qū)ο缶幊蘋OP
2、編程是一門技術、同時也是一門藝術
3、應該面向接口編程,而不是面向?qū)崿F(xiàn)編程
什么是設計模式設計模式是一種被反復使用、多數(shù)人知曉的、代碼設計經(jīng)驗的總結。使用設計模式是為了可重用代碼,讓代碼更容易被別人理解、保證代碼的可靠性。
設計模式原則1、開閉原則(Open Closed Principle,OCP)是指:軟件實體應當對擴展開放,對修改關閉。這個概念是大師Bertrand Meyer在1988年提出的,我們可以把開閉原則理解成----可以根據(jù)需求隨意增加新的類,但不要修改原來的類
2、單一職責原則(Single Responsibility Principle,SRP)是指:就一個類而言,應該僅有一個引起它變化的原因。換言之,一個類,只需按職責進行功能設計。此原則從軟件工程師角度分析,符合“高內(nèi)聚,低耦合”的標準。并且,我們在接口設計及方面也同樣符合單一職責的設計原則
3、里氏替換原則(Liskov Substitution Principle,LSP)它的完整表達是:若對每個類型S的對象o1,都存在一個類型T的對象o2,使得在所有針對編寫的程序P中用o1替換o2后,程序P的行為功能不變,則S是T的子類型。
4、依賴倒轉(zhuǎn)(Dependence Inversion Principle DIP)定義一:高層模塊不應該依賴低層模塊,二著都應該依賴于抽象。抽象不應該依賴于細節(jié),細節(jié)應當依賴于抽象。定義二: 要針對接口編程,不要針對實現(xiàn)編程
5、接口隔離原則簡稱ISP(Interface Segregation Principle)。定義一:不應該強迫客戶依賴于他們不用的方法,定義二:一個類對另一個類的依賴性應當是建立在最小的接口上。
6、迪米特法則(Law of Demeter)又叫最少知識原則,它是指一個對象應當由其他對象有盡可能少的了解,不必與不相識的人直接聯(lián)系。
適配器模式簡單來說就是把一個類的接口轉(zhuǎn)換成我們所希望的接口,使原來不能一起工作的兩個類能在一起工作。比如生活中的電源適配器,DP轉(zhuǎn)HDMI線、Type-C轉(zhuǎn)USB。
1、適配器種類1、類適配器是通過繼承類適配來實現(xiàn)的,另外類適配器實現(xiàn)客戶類所需的接口。當客戶端調(diào)用適配器類方法時,適配器內(nèi)部調(diào)用它所繼承的適配者的方法。
public class Adapter extends Adapteree implements Target { public void request() { this.doXxx(); } }
2、對象設配器包含一個適配器者的引用,與類適配器相同,對象適配器也實現(xiàn)了客戶端所需的接口,當客戶對象調(diào)用對象適配器的方法時,對象適配器調(diào)它所包含的適配器者實例的方法。
public class Adapter implements Target { Adapteree adapteree = new Adapteree(); public void request() { adapteree.doXxx(); } }
對于兩種不同的適配客戶端代碼其實是一樣的,
public class Client { public static void main(String ... args) { Target t = new Adapter(); t.doXxx(); } }2、適配器模式應用場景
我們需要實現(xiàn)某些功能,這些功能已有還不太成熟的一個或多個外部組件,如果我們自己重新開發(fā)這些功能會花費大量時間;所以很多情況下會選擇先暫時使用外部組件,以后再考慮隨時替換。但這樣一來,會帶來一個問題,隨著對外部組件庫的替換,可能需要對引用該外部組件的源代碼進行大面積的修改,因此也極可能引入新的問題等等。如何最大限度的降低修改面呢
?
Adapter模式就是針對這種類似需求而提出來的。
Adapter模式通過定義一個新的接口(對要實現(xiàn)的功能加以抽象),和一個實現(xiàn)該接口的Adapter(適配器)類來透明地調(diào)用外部組件。這樣替換外部組件時,最多只要修改幾個Adapter類就可以了,其他源代碼都不會受到影響。
3、適配器模式的結構1、通過繼承實現(xiàn)Adapter
2、通過委讓實現(xiàn)Adapter
4、代碼實現(xiàn)目標類
public class Target { public void useTyper_C() { System.out.println("使用Type-C數(shù)據(jù)線"); } }
適配類
/** * Created by guo on 19/2/2018. * */ public class Adapter extends Target { private Target target; public Adapter(Target target) { this.target = target; } public void useUSB() { System.out.println("使用Type-C轉(zhuǎn)USB適配線"); this.target.useTyper_C(); } }
主函數(shù)
/** * Created by guo on 19/2/2018. */ public class MainClass { public static void main(String[] args) { Adapter adapter = new Adapter(new Target()); adapter.useUSB(); } }5、Spring與Hibernate在適配器模式中的應用
當前,不少公司使用Spring整合Hibernate進行系統(tǒng)開發(fā)。對于Spring而言,它提供了HibernateDaoSupport、HibernaterTemplate、HibernateCallBack等工具類或接口來支持DAO組件的實現(xiàn)。
1、父DAO接口
import java.util.List; public interface FatherDAO { void saveInfo(Object obj1); void delInfo(Object obj2); Object findByNo(String no); List findAll(); }
2、通用DAO適配器
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import java.util.List; /** * Created by guo on 19/2/2018. * 通用DAO適配器 */ public abstract class FatherDaoAdapter extends HibernateDaoSupport implements FatherDAO { protected FatherDaoAdapter() { } public void saveInfo(Object obj1) { getHibernateTemplate().saveOrUpdate(obj1); } public void delInfo(Object obj2) { getHibernateTemplate().delete(obj2 ); } public List findAll(String objName) { String Searching = "from" + objName; return getHibernateTemplate().find(Searching); } }
3、登錄DAO接口
/** * Created by guo on 19/2/2018. * 登錄Dao接口 */ public interface LoginDao extends FatherDAO { List findByName(String name); List findByPassWord(String password); }
4、登錄DAO實現(xiàn)類
import java.util.List; /** * Created by guo on 19/2/2018. */ public abstract class LoginDaoLmpl extends FatherDaoAdapter implements LoginDao { public static final String LOGIN = "Spring.adaper.Login"; public static final String NAME = "guo"; public static final String PASSWORD = "admin"; @Override public List findAll() { return super.findAll(NAME); } }說明
1、本文參考大話設計模式、北風網(wǎng)教程。推薦大家看Java Web設計模式之道。
2、新手學習語言最好的方法是模仿,思考別人為啥這么寫。
3、希望自己有一天也可以寫出真正屬于自己的文章。
4、GitHub 歡迎點贊,算是對我最大的鼓舞。
5、越努力,越幸運。美好的事,總會在不經(jīng)意間發(fā)生。2018 加油。
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68505.html
摘要:這個模式感覺一一般和工廠模式一起使用的比較多比較方便結構型模式這些設計模式關注類和對象的組合。設計模式這些設計模式特別關注表示層。 設計模式的的六大原則: 學習設計模式之前最好先了解一下設計模式的設計原則: 1. 開閉原則(open close principle) 開放即指對擴展開放,對修改關閉 簡而言之,就是擴展功能的時候應該盡量的不修改原有的代碼。 2. 里氏代換原則(lisko...
摘要:設計模式的類別設計模式一共分為種類型,共種。屬于結構型的設計模式適配器模式橋接模式裝飾模式組合模式外觀模式享元模式代理模式。問題描述了應該在何時使用設計模式。解決方案描述了設計的組成成分,它們之間的相互關系及各自的職責和協(xié)作方式。 設計模式概述 1. 設計模式是什么 我們在平時編寫代碼的過程中,會遇到各種各樣的問題,細想一下很多問題的解決思路大致一樣的,這時候你就可以把解決問題的思路整...
摘要:基礎知識復習后端掘金的作用表示靜態(tài)修飾符,使用修飾的變量,在中分配內(nèi)存后一直存在,直到程序退出才釋放空間。將對象編碼為字節(jié)流稱之為序列化,反之將字節(jié)流重建成對象稱之為反序列化。 Java 學習過程|完整思維導圖 - 后端 - 掘金JVM 1. 內(nèi)存模型( 內(nèi)存分為幾部分? 堆溢出、棧溢出原因及實例?線上如何排查?) 2. 類加載機制 3. 垃圾回收 Java基礎 什么是接口?什么是抽象...
閱讀 777·2023-04-25 15:13
閱讀 1399·2021-11-22 12:03
閱讀 826·2021-11-19 09:40
閱讀 1910·2021-11-17 09:38
閱讀 1714·2021-11-08 13:18
閱讀 655·2021-09-02 15:15
閱讀 1767·2019-08-30 15:54
閱讀 2636·2019-08-30 11:12