Java設計模式

參考設計模式之禪。

 策略模式

負責對扣款策略進行封裝,保證兩個策略是可以自由切換的,而且日後增加扣款策略也是非常簡單容易的。


 工廠方法模式
  
<pre name="code" class="java"> 定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。(產品的實例化工作是由類工廠來決定的。)
修正策略模式必須對外暴露具體策略的問題,由工廠方法模式直接產生一個具體策略對象,而其他模塊則不需要依賴具體的策略。(根據傳入的參數,來確定返回的對象。工廠方法模式是對實例化過程進行封裝而形成的,客戶對象無須關心實例化這些類的細節,把它們交給工廠類)門面模式負責對複雜的扣款系統進行封裝,封裝的結果就是避免高層模塊深入子系統內部,同時提供系統的高內聚、低耦合的特性。(封裝得很徹底,不設計到邏輯業務)封裝封裝(高內聚,低耦合的特性,後面改動系統不叫靈活) 魯棒是Robust的音譯,也就是健壯和強壯的意思。它是在異常和危險情況下系統生存的關鍵。


高內聚、低耦合


單一職責原則

里氏替換原則

依賴倒置原則  (依賴的三種寫法  構造函數傳遞依賴對象或者參數、setter方法傳遞依賴對象或者參數、接口聲明依賴對象,也叫接口注入)

接口隔離原則

迪米特法則

開閉原則 



代理模式 包含aop介紹

AOP術語, 在什麼地方(連接點)  執行什麼行爲(通知)

切面 Aspect 切入點 JoinPoint  通知 Advice 織入 Weave


<!-- 配置事務的傳播特性 -->
<tx:advice id="txAdviceMysql" transaction-manager="MysqltxManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />


<!--
將save、delete、modify開頭的事務之外的事務全部設置 爲只讀事務,這樣也可以在一定程序上提高系統性能
-->


<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="search*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>


<!-- 配置那些類的那些方法參與事務 -->
<aop:config>
<aop:pointcut id="allMagangerMethods" expression="execution(* com..service..*(..))" />
<aop:advisor pointcut-ref="allMagangerMethods" advice-ref="txAdviceMysql" />
</aop:config>


在這個 allMagangerMethods地方 ,執行 txAdviceMysql行爲


--2.<bean id="interceptor" class="com.wepull.interceptor.Interceptor"></bean>

<!-- 配置AOP  -->
<!-- 第一個* 代表所有的返回的類型   第二個*代表所有的對象 -->
<aop:config>
<aop:aspect ref="interceptor">
<aop:before method="beforTime" pointcut="execution(public * com.wepull.printer.*.printer(..))"/>
<aop:after method="afterTime" pointcut="execution(public * com.wepull.printer.*.printer(..))"/>
</aop:aspect>
</aop:config>


在這個 execution(public * com.wepull.printer.*.printer(..))地方 ,執行 interceptor.beforTime等行爲


————————————————————————————————————————————————————

享元模式

內存溢出包括:

1.內存泄漏:無意識的代碼缺陷,導致內存泄漏,jvm不能獲得連續的內存空間。

2.對象太多:代碼寫得太爛,產生的對象太多,內存被耗盡。



毫無影響,java編譯時就會確定方法的偏移量。java會自動裝載,所以方法數量不是問題。

不過過多的方法和行數會對解讀造成影響,造成可讀性差。另外一些計算測試代碼覆蓋率的程序無法處理過多行的代碼。

外界處於可讀性的考慮,要求處理類的代碼不可以超過2000行,一個方法不可以超過500行。

對速度沒有影響,對生成.class文件的大小有影響,對jvm 加載jar的速度有影響
追問
如果最後生成的class不封裝到jar中,那麼class文件的大小,對於調用時的速度就沒有太多影響了?
追答
jvm 加載jar都是預加載,沒必要考慮速度問題。.class文件的大小不影響調用速度

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