參考設計模式之禪。
策略模式
負責對扣款策略進行封裝,保證兩個策略是可以自由切換的,而且日後增加扣款策略也是非常簡單容易的。
工廠方法模式
<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行。