GOF 23種設計模式java
分類 | 設計模式 |
建立型 | 工廠方法模式(Factory Method)、抽象工廠模式(Abstract Factory)、原型模式(Prototype)、單例模式(Singleton)、建造者模式(Builder) |
結構型 | 適配器模式(Adapter)、 裝飾器模式(Decorator)、代理模式(Proxy)、橋接模式(Bridge)、組合模式 (Composite)、門面模式(Facade)、享元模式(Flyweight) |
行爲型 | 模板方法模式(Template Method)、策略模式(Strategy)、觀察者模式(Observer)、解釋器模式(Interpreter)、 責任鏈模式(Chain of Responsibility)、命令模(Command)、 迭代器模式(Iterator)、調解者模式(Mediator)、備忘錄模式 (Memento)、狀態模式(State)、 訪問者模式(Visitor) |
單例模式和工廠模式: 工廠類通常就是被設計爲單例 ApplicationContext算法
策略模式和工廠模式: 1 工廠模式包含工廠方法和抽象工廠屬於建立型模式,策略模式屬於行爲型模式編程
2 工廠模式主要目的是封裝好建立邏輯,策略模式接收工廠建立好的對象,從而實現不一樣的行爲設計模式
3 建立:new 行爲:invoke緩存
策略模式和委派模式: 1 策略模式是委派模式內部的一種實現形式,策略模式關注的是結果是否能相互替代。如支付方式:AliPay,WechatPay ...app
2 委派模式更關注分發和調度的過程。有可能採用if...else...條件分支語句來分發,內部也可使用策略模式優化
模板方法模式和工廠方法模式: 工廠方法是模板方法的一種特殊實現ui
模板方法模式和策略模式: 1 模板方法和策略模式都有封裝算法spa
2 策略模式是使不一樣算法能夠相互替換,且不影響客戶端應用層的使用設計
3 模板方法是針對定義一個算法的流程,將一些有細微差別的部分交給子類實現。策略模式算法實現是封閉的
4 模板模式不能改變算法流程,策略模式能夠改變算法流程且可替換。策略模式一般用來代替if...else...等條件分支語句
裝飾者模式和靜態代理模式: 1 裝飾者模式關注點在於給對象動態擴展、添加方法,而代理更加註重控制對對象的訪問
2 代理模式一般會在代理類中建立被代理對象的實例,而裝飾者模式一般把被裝飾者做爲構造參數
裝飾者模式和適配器模式: 1 裝飾者模式和適配器模式都是屬於包裝器模式(Wrapper)
2 裝飾者模式能夠實現被裝飾者與相同的接口或者繼承被裝飾者做爲它的子類,而適配器和被適配者能夠實現不一樣的接口
適配器模式和靜態代理模式: 適配器能夠結合靜態代理來實現,保存被適配對象的引用,但不是惟一的實現方式
適配器模式和策略模式: 在適配業務複雜的狀況下,利用策略模式優化動態適配邏輯
Spring中經常使用的設計模式對比
設計模式 | 概括 | 舉例 |
工廠模式(Factory) | 只對結果負責,封裝建立過程 | BeanFactory、Calendar |
單例模式(Singleton) | 保證獨一無二 | ApplicationContext、Calendar |
原型模式(Prototype) | 拔一根猴毛,吹出千萬個 | ArrayList、PrototypeBean |
代理模式(Proxy) | 找人辦事,加強職責 | ProxyFactoryBean、JdkDynamicAopProxy、CglibAopProxy |
委派模式(Delegate) | 幹活算你的(普通員工),功勞 算個人(項目經理) |
DispatcherServlet、BeanDefinitionParserDelegate |
策略模式(Strategy) | 用戶選擇,結果統一 | InstantiationStrategy |
模板模式(Template) | 流程標準化,本身實現定製 | JdbcTemplate、HttpServlet |
適配器模式(Adapter) | 兼容轉換頭 | AdvisorAdapter、HandlerAdapter |
裝飾器模式(Decorator) | 包裝,同宗同源 | BufferedReader、InputStream、OutputStream、 HttpHeadResponseDecorator |
觀察者模式(Observer) | 任務完成時通知 | ContextLoaderListener |
Spring中的編程思想總結
思想 | 應用場景(特色) | 概括 |
OOP | Object Oriented Programming(面向對象編程)用程序概括總結生活中一切事物 | 封裝、繼承多態 |
BOP | Bean Oriented Programming(面向Bean編程)面向Bean(普通的java類)設計程序 | 一切從Bean開始 |
AOP | Aspect Oriented Programming(面向切面編程)找出多個類中有必定規律的代碼,開發時拆開,運行時再合併。面向切面編程,即面向規則編程。 | 解耦、專人作專事 |
IOC | Inversion of Control(控制反轉)將new對象的動做交給Spring管理,並由Spring保存已建立的對象(IOC容器) | 轉交控制權(即控制權反轉) |
DI/DL | Dependency Injection(依賴注入)或者DependencyLookup(依賴查找)依賴注入、依賴查找,Spring不只保存本身建立的對象,並且保存對象與對象之間的關係。注入即賦值,主要三種方式構造方法、set方法、直接賦值 | 賦值 |
AOP的應用場景
1 Authentication(權限認證)2 Auto Caching(自動緩存處理) 3 Error Handling(統一錯誤處理)
4 Debugging(調試信息輸出)5 Logging(日誌記錄) 6 Transactions(事務處理)
SpringAOP
1 Aspect(切面):一般是一個類,裏面能夠定義切入點和通知
2 JointPoint(鏈接點):程序執行過程當中明確的點,通常是方法的調用
3 Advice(通知):AOP在特定的切入點上執行的加強處理,有before、after、afterReturning、afterThrowing、around
4 Pointcut(切入點):就是帶有通知的鏈接點,在程序中主要體現爲書寫切入點表達式
SpringAOP之Execution表達式
execution(modifiers-pattern? ret-type-pattern declaringtype-pattern? name-pattern(param-pattern) throws-pattern?)
modifiers-pattern:方法的操做權限
ret-type-pattern:返回值【必填】
declaring-type-pattern:方法所在的包
name-pattern:方法名 【必填】
parm-pattern:參數名
throws-pattern:異常