设计汇总

来源:互联网 发布:打印机usb选什么端口 编辑:程序博客网 时间:2024/04/27 22:03

java設計模式----abstract Factory模式與Factory method模式:
任何多態的實現都離不開Factory方法.
----------------------------------------

java設計模式---bridge模式:
1 bridge模式
    要解決的一個問題是:接口與平臺的無關性.將接口與實現分離,然後具體的實現與平臺相關從而實現接口與實現分離,
    接口與實現並不存在著任何的extends或是implements意義上的實現.它們只是通過在接口中引用實現類來建立一種關係.這正是橋模式的字面意義.它們有各自的對象體系.
    接口中包含有一個實現的引用.所有在接口中的操作都委託給實現引用來完成.實現的具體賦值則由Factory模式來決定.
    這里的接口是指抽象類,允許它有方法體,但不允許實例化.
2 各自的對象體系:
    接口的對象體系:在這個體系中,任何接口的子類,也全部包含有一個對實現對象體系中頂級類的引用.任何的子類,都與平臺無關,代表著著不變的部分.例如:人是一個頂級接口.具備吃飯 工作的接口.而警察 公務員都是人的一個字類,它們也都具有同樣的接口.但是中國警察和美國的警察在吃飯和工作上的實現是不同的.是變化的.
    實現的對象體系:在這個體系中,任何接口的子類,才真正跟平臺(實際的規則)有關.結合上面的中國警察和美國警察,中國警察吃米飯,美國警察吃漢堡.中國警察工作就是泡茶,美國警察是巡邏.
    對於客戶端而言,只需要說聲"工作",那麼在實際的使用中,傳入具體的實現體系中的子類,那麼就可以實現動態的變化了.
3 其實也相當於代理模式.只是各自的側重點不同,于是使用的方式也不同.

--------------------------------------------------

java模式------decorator模式
1  装饰模式:一般情况中,我们只能控制类的接口,而无法控制一个对象的接口。也即是说,我们可以很好地控制一个类的接口,于是这个类的实例只能提供类所定义的接口功能。无法提供一些增加额外的功能,但这个功能又不是每个实例都需要。我们需要精确到实例的接口控制。
2 我们可以定义一个超级(类)接口,它定义一切基本的功能,任何一个实例都包含的功能。例如定义一个超级经理类,都会具有管理本部门的接口,但是人事部经理有招聘的接口,而技术部经理可能有领导团队开发的接口,销售经理有接见客户的接口,管理部经理有厂区绿化的功能,我们可以针对每个部门经理定义一个经理类的子类来实现各自的功能,而小公司的经理,经常是人事经理也是技术部经理。那我们是否还要定义一个继承人事经理和技术经理的子类。那如果一个经理是技术部经理又是管理经理呢,再定义一个继承自技术经理和管理经理的经理类。这样下去,只要一个公司有多个部门经理,就可能需要定义!n个类。当n=10时,那么理论是要定义的类就是100个。
3 我们只定义一个超级经理类,它具有所有经理的共同接口。再将每个部门经理特有的功能也作成一个“功能经理”类,它也具有和超级经理类一样的接口。当某个经理需要某种功能的时候,我们定义一个以基本经理为构造参数的“功能经理”实例,这个经理就具有了除基本经理的功能外附加的功能,如果这个经理还需要增加功能,那么将这个经理作为所加“功能经理”类的构造参数,那么它例增加了这个功能。于此下去,任何的经理需要增加一项新功能时,就不需要再定义一个新类。
---------------------------------------

java设计模式----proxy模式:
1 代理模式:主要是为了实现对对象访问的控制。至于为什么要对对象的访问进行控制,可以为了是让代码更为简洁,也可以是为了节省资源开销,等等一切值得这么做的原因。
2 角色:客户对象/实际对象/代理对象。代理对象必须与实际对象具有相同的接口,这样才能去代理。
3 环节:客户的操作中可能需要访问实际对象的一个接口,但也有可能不访问。创建这样一个实际对象花销很大,当然不能在客户类实例化的时候就实例化实际对象,而是提供一个代理对象。只有在实际需要访问的时候,通过代理对象来访问实际对象提供的功能。

------------------------------------------------

java設計模式----factory模式:
1  factory模式:固名思義,它是一種工廠,用來創建產品.
    產品:------>具體產品
    工廠:------->具體工廠
    客戶:在使用factory模式中,要將客戶獨立出來.想想如果沒有客戶對工廠說,我要某某類型的產品,工廠怎麼知道生產哪種產品.
客戶向工廠下訂單,說要生產某種類型的產品.工廠就指將訂單指向具體的工廠,生產出具體的產品.交互給客戶.
3  說明:
    其實這個並不是在運行時期進行限定的.也是在開發的時候就已經限定.只是在擴展上有優勢.

--------------------------------------------

java基礎----接口(多態)與繼承
多態:接口是操作的集合,這些操作代表著一個抽象物體的操作集合.具體的實現是在不同的狀態下是以不同的方式來響應請求.描述的是同一個對象在不同的狀態下對相同的請求所作出的不同的反應.例如:燈的開操作,在充電的情況下,它是會亮的.而在斷電的情況下,它是不會亮的.所有的燈都具有這樣的特性.
繼承:這涉及到多個抽象物體,只是這些物體之間存在著層次上的關聯,而且具有一些共性.是為了代碼復用
多態強調的是一個對象不同的狀態下的不同響應.而繼承強調的是存在父子關係的類相同或是特有的行為響應.
多態與繼承也無法絕對.
------------------------------------------

java設計模式-----state模式與Strategy模式
1 state模式與接口編程的區別:
    接口編程: 是state模式使用的基礎.
    state模式:將一個對象中和狀態有關的操作通過封裝成接口來實現,將狀態的判斷從在對象中轉移到對象外.所有與狀態相關的動作都交由接口來處理.這里體現了將變化的部分與不變的部分分隔開來的思想.
    對象中,對接口的引用其實例化是通過動態加載機制來實現的.
    state模式適用於多個狀態下的情況.
2 對象狀態改變:
    由誰來改變
3 Strategy模式與State模式的思想是一致的.將對象變化的部分分離,封裝成一個接口,具體的實現由接口的子類來完成.在對象中,所有要使用到變化部分的操作,都交由接口來實現.
4 strategy模式與State模式的區別:它們所針對的變化部分,Strategy模式是在項目運行期間發生變化.而State模式是在不同的外在環境下而變化.(有點遷強)
-----------------------------------------

java設計模式----single call模式
single Call模式:當一個類沒有單獨存在的必要,而且也不允許單獨存在,只能於依附於另外一個類才存在的情況下.應當使用single call模式.通過將類的構造函數私有化和調用類的可否實例組成類的變量來進行判定.組成類的實例通過靜態方式來實現,靜態方法中需要傳入整體類的實例參數.
sington 模式:表明一個類只能被實例化一次,但不限定使用者是誰.所有的使用者只能使用這一個實例.
------------------------------------------

java---動態加載與反射機制
1 java中設計模式,很大一部分離不開多態,而多態離不開動態加載及反射機制.

-------------------------------------------

java---jdbc调用数据库存储过程
调用存储过程,可以利用数据库本身和自定义的存储过程来获得我们所要的数据。
返回的数据根据存储过程本身来决定。存储过程的有无带参数及有无返回变量的值。 将影响jdbc调用存储过程的形式。
1 如果存储过程没有参数,可以使用普通的statement.executeQuery("{call proc_xx}")来执行。并获得ResultSet。任何有参数的存储过程调用,必须调用preparedCall来执行。
2 如果存储过程有参数,但是没有通过return xxx 的形式返回。直接用prepareCall.executeQuery("{ call proc_aaa(?,?...)}") prepareCall.getType(index)就可以得到返回值了。如果有return xxx形式的返回,则用preparedCall.executeQuery("{? = call proc_xxx(?,?...)}"). 也是通过prepareCall.getType(index);
不论是以return 形式返回的,还是以参数形式返回的。都必须注册返回类型。prepareCall.registerOutParameter(index,Types.xxx);
3 说明:prepareCall.getType(index) 实例是:prepareCall.getInt(1)形式。jdbc调用存储过程与一般的增删改查相比,以"{[?=] call"开始,以"}'结束。
-----------------------------------------

數據庫連接:
其實是數據庫服務器與應用服務器之間的一個socket connection. 兩個服務器之間交換登入信息,然後記錄聯機日志,再為些連接分配進程和系統資源.
------------------------------------------

影響系統性能可能有複雜的業務邏輯及對資源的管理.如果一個資源需要頻繁的使用而且,讀寫它所耗費的系統資源羅多的話,它比較適合用緩衝的形式保存在系統中.而緩衝的形式,就是用靜態.
1 不僅一個數據庫連接會佔用內存資源.而一次對數據庫的連接和關閉也會佔用系統的cpu資源.這就是數據庫連接彩連接池管理的目的所在.
-----------------------------------

使用設計模式開發原則及解耦合.它們的目的就是實現:
1 業務層清晰明了.
2 各個層之間解耦合.及廣泛的適用性.
------------------------

java設計模式:
總綱:設計模式的目的是解耦合和適應多變.所有的設計模式都屬於三類:創建型設計模式 組合型設計模式 行為型設計模式.我們是這樣分類的學習,當然就應當避免在使用的時候亂了.例如在行為型的時候,我們來使用factory method模式.
必須明白的一點是:所有的設計模式都是基於java的三個特性.封裝 繼承 多態這三種技術.
一個系統(項目),各個之間的性能指標是相互影響的.例如:為了獲得更大的擴展性而使用factory method模式,會使系統中的類變多.代碼也將變多.主要是看系統的實際情況在各個性能之間進行取捨.
1 factory method模式:為接口和實現提供橋接.

---------------------------

java開發原則:
1 開閉原則:對擴展開放,對修改關閉.

-------------------------------

高內聚與低耦合:
高內聚應當是指單個的一個實體,它的功能很專一而全面.
耦合是指多個實體之間,減少因為一個實體變化而引起另外的實體也不得不變化的程度.
解耦合:即包括系統架構上的解耦合也技術層面上的耦合.當然也有其它的領域中的解耦合.

----------------------

在java編程中,創建一個新對象,需要處理器時間.創建好後需要佔用一定的內在空間.優秀的程序員應當在這兩者之間來取捨.決定是頻繁創建和銷毀對象還是將創建好的一個對象保存在內存中.以取得一個最好的綜合效果.

------------------------------------------------

靜態類只能是內部類,不能是外部類

------------------------------

運行java的程序中,往往需要設置各種環境變量.在環境變量的設置中,請注意空格所帶來的影響.
曾經在設置catalina_home時,值的最後包含有一個空格.一直無法通過程序的運行.
-----------------------------------------

面對對象設計的基本原則:
封裝:通過權限的控制,將一個接口或是類的內部實現完全隱藏起來,只需要向外部提供信息表明,接口和類能實現哪些功能.而不用將具體的實現暴露.
        通過這個特性,面對接口編程就變得非常之有用.任何實現都可以由子類來實現.
                如果一個類或是接口,它本身變化的部分很少.就沒有必要使用接口.而應當視為一個實體類.類和接口真正強大的地方在於業務邏輯的處理.因為業務邏輯發生                    變化的可能性比較高也比較頻繁.而一個實體類的變化則比較小.這也符合"將變化的與不變的分開來"的原則.
繼承:為了提高代碼的復用率.
多態:為了使應用程序更具備擴展性和靈活性.