設計模式在項目中的應用


常用設計模式:

單例模式:

解決問題:配置類Config的對象只能有一個

解決方案:

Static Config instance

Private Config()

Static Config newInstance(){

  If (instance==null){ Instance=new Config() } Return instance; }

工廠模式:

解決問題:創建對象用new 耦合度高 new JdkDynamicAopProxy()

解決方案:

1,定義接口 AopProxy
2,有默認實現類JdkDynamicAopProxy
3,AopProxy AopProxyFactory.newInstance(){ Return new JdkDynamicAopProxy } 4,創建對象用 aopProxy=AopProxyFactory.newInstance() 以后增加新的實現類,改factory,創建對象的代碼不用改。工廠用在框架中,增加新的實現類CgLib,只需要改框架,不影響使用框架的代碼。框架增加功能了,用框架的代碼不改。 實例源碼: org.springframework.aop.framework.AopProxy org.springframework.aop.framework.DefaultAopProxyFactory

建造者模式:

解決問題:編程原則:單一職責原則,一個類只做一件事情,controller,service,mapper,vo,config,tools,execption,
SqlSessionFactory在創建時要解析配置文件,做2件事
1,在構造方法中解析配置文件
2,創建sqlsession
解決方案:增加SqlSessionFactoryBuilder,解析配置文件
builder=new SqlsessionFactoryBuilder()
sqlsessionFactory=builder.build()

程序員想要的方式new SqlsessionFactory()

適配器模式:

解決問題:接口的抽象方法很多
解決方案:
Springmvc 接口handlerInterceptor有三個抽象方法,
增加HandlerInterceptorAdapter implements Handlerinterceptor{
三個方法(){空實現}
}

判斷用戶是否登錄,extends Adapter只需要重寫preHandle()

org.springframework.web.servlet.HandlerInterceptor
org.springframework.web.servlet.handler.HandlerInterceptorAdapter


java.awt.event.MouseListener
java.awt.event.MouseAdapter
implements 接口,如果抽象方法很多,有3個或5個,框架很有可能寫好了adapter.
應該extends adapter而不是implements 接口

裝飾模式:

解決問題:一個類功能簡單,滿足不了我們的需求
解決方案:單一職責原則,
例子1:
Java.io.inputStream.read()
讀出字符串 DataInputStream(inputstream)
讀出對象 ObjectInputStream(inputstream)
例子2:
org.apache.ibatis.cache.Cache;chche的子類對PerpetualCache進行封裝;

代理模式:

解決問題:controller,servlet有很多公用的代碼,service,dao有公用的代碼,希望公用的代碼能自動執行。
解決方案:讓代理去執行公用代碼

觀察者模式:

解決問題:上層界面層,下層數據層,數據層中的數據發生變化,上層應該知道,知道后顯示最新數據,上層要觀察下層。目標發生變化,觀察者要知道。
解決方案:
回調callback,多態

責任鏈模式:

解決問題:filter,interceptor,plugin寫多個,多個類都要執行
解決方案:
1,    接口handlerInterceptor
2,    多個實現類
3,    HandlerExecutionChain 
HandlerInterceptor[]
for(數組)

實例源碼1:
org.apache.ibatis.plugin.Interceptor
org.apache.ibatis.plugin.InterceptorChain
實例源碼2:
org.springframework.web.servlet.HandlerInterceptor
org.springframework.web.servlet.HandlerExecutionChain

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM