定義:使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈。並沿著這條鏈傳遞該請求,直到有物件處理它為止。
責任鏈模式的通用**
public
abstract
class
handlerelseesle
}return response;
}//設定下乙個處理者是誰
public
void
setnext(handler _handler)
//每個處理者都有乙個處理級別
protected
abstract level gethandlerlevel();
//每個處理者都必須實現處理任務
protected
abstract response echo(request request);
}public
class
concretehandler1
extends
handler
protected level gethandlerlevel()
}public
class
concretehandler2
extends
handler
protected level gethandlerlevel()
}public
class
concretehandler3
extends
handler
protected level gethandlerlevel()
}public
class
level
public
class
response
public
class
request
}
在實際應用中,一般有乙個封裝類對責任模式進行封裝,也就是替代client類。直接返回鏈中第乙個處理者。具體鏈的設定不需要高層次模組關係。定義:動態的給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式相比生成子類更為靈活。
有四個角色需要說明:
1. component:是乙個介面或者是抽象類。就是定義我們最核心的物件,也就是我們最原始的物件。
2.concretecomponent:具體構件。是component的實現類。要裝飾的就是他。
3. decorator:裝飾角色。一般是乙個抽象類。他不一定有抽象方法,在他的屬性裡必須有個private變數指向component抽象構件。
4. 具體抽象角色:把最核心的、最基本的東西裝飾成其他東西。
通用**如下:
public
abstract
class
component
public
class
concretecomponent
extends
component
}public
abstract
class
decorator
extends
component
//委託給被修飾者執行
@override
public
void
operate()
}public
class
concretedecorator1
extends
decorator
//定義自己的修飾方法
private
void
method1()
//重寫父類的operate方法
public
void
operate()
}public
class
concretedecorator2
extends
decorator
private
void
method2()
public
void
operate()
}//原始方發和修飾方法的執行順序在具體的裝飾類是固定的。可以通過方法過載實現多種執行順序。
public
class
client
}
定義:定義一組演算法,將每個演算法都封裝起來,並且使他們之間可以互換。
三個角色:
1. context封裝角色:上下文角色,起承上啟下封裝作用,遮蔽高層模組對策略、演算法的直接訪問,封裝可能存在的變化。
2. strategy抽象策略角色
3. concretestrategy:具體策略角色。
通用原始碼:
public
inte***ce
strategy
public
class
concretestrategy1
implements
strategy
}public
class
concretestrategy2
implements
strategy
}public
class
context
//封裝後的策略方法
public
void
doanythinig()
}public
class
client
}
策略模式的擴充套件:策略列舉定義:它是乙個濃縮了策略模式的列舉。
public
enum calculator
},sub("-")
};string value = "";
private
calculator(string _value)
public string getvalue()
public
abstract
intexec(int a,int b);
}public
class client
}
注意:策略列舉模式受列舉型別的限制,每個列舉值都是pulic static final,擴充套件性受到了一定的約束。因此策略列舉一般擔當不起經常變化的角色。 設計模式之禪
設計模式之禪 大話面向初學者 禪面向有了一定基礎後提公升能力的讀者 看大話,只是看故事,只是感性認識,對於很多初學者而又沒專案經驗 或 閱讀 編寫量 的人來說,比較適合用於入門 看禪 主要是有一定的專案經驗 或 閱讀 編寫量 基礎上,而又大致閱讀過23種設計模式中的20種以上基本概念後,再深化提公升...
設計模式之禪之設計模式 門面模式
1 package com.yeepay.sxf.template18 2 3 寫信的業務類 4 隱藏在門面角色裡邊,不需要暴露太多5 author sxf6 7 8public inte ce iletterprocess view code 寫信的業務類的實現 1 package com.yee...
設計模式之禪之設計模式 橋梁模式
1 package com.yeepay.sxf.template24 2 3 實現化角色 4 相當於不同的業務邏輯,抽象出共有行為5 6 產品類7 author sxf8 9 10 public abstract class product view code 房子產品實現 1 package c...