JAVA中使用設(shè)計(jì)模式寫代碼能使代碼重用、直觀、可靠,共有23種設(shè)計(jì)模式,分別是:

我們提供的服務(wù)有:網(wǎng)站制作、做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、南城ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的南城網(wǎng)站制作公司
創(chuàng)建型模式:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式;
結(jié)構(gòu)型模式:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式;
行為型模式:策略模式、模板方法模式、觀察者模式、迭代子模式、責(zé)任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪問者模式、中介者模式、解釋器模式,
一共23種設(shè)計(jì)模式!
按照目的來分,設(shè)計(jì)模式可以分為創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式。
創(chuàng)建型模式用來處理對(duì)象的創(chuàng)建過程;結(jié)構(gòu)型模式用來處理類或者對(duì)象的組合;行為型模式用來對(duì)類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)進(jìn)行描述。
創(chuàng)建型模式用來處理對(duì)象的創(chuàng)建過程,主要包含以下5種設(shè)計(jì)模式:
? 工廠方法模式(Factory Method Pattern)
? 抽象工廠模式(Abstract Factory Pattern)
? 建造者模式(Builder Pattern)
? 原型模式(Prototype Pattern)
? 單例模式(Singleton Pattern)
結(jié)構(gòu)型模式用來處理類或者對(duì)象的組合,主要包含以下7種設(shè)計(jì)模式:
? 適配器模式(Adapter Pattern)
? 橋接模式(Bridge Pattern)
? 組合模式(Composite Pattern)
? 裝飾者模式(Decorator Pattern)
? 外觀模式(Facade Pattern)
? 享元模式(Flyweight Pattern)
? 代理模式(Proxy Pattern)
行為型模式用來對(duì)類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)進(jìn)行描述,主要包含以下11種設(shè)計(jì)模式:
? 責(zé)任鏈模式(Chain of Responsibility Pattern)
? 命令模式(Command Pattern)
? 解釋器模式(Interpreter Pattern)
? 迭代器模式(Iterator Pattern)
? 中介者模式(Mediator Pattern)
? 備忘錄模式(Memento Pattern)
? 觀察者模式(Observer Pattern)
? 狀態(tài)模式(State Pattern)
? 策略模式(Strategy Pattern)
? 模板方法模式(Template Method Pattern)
? 訪問者模式(Visitor Pattern)
推薦你一本好書:《軟件秘笈:設(shè)計(jì)模式那點(diǎn)事》,里面講解的23中設(shè)計(jì)模式例子很生動(dòng),容易理解,還有JDK中設(shè)計(jì)模式應(yīng)用情況,看了收獲挺大的!百度里面搜“設(shè)計(jì)模式”,第一條中設(shè)計(jì)模式百度百科中就有首推該圖書,瀏覽量在20幾萬以上的,不會(huì)錯(cuò)的。好東西大家一起分享!
祝你早日學(xué)會(huì)設(shè)計(jì)模式!
描述 責(zé)任鏈模式(CoR)建議發(fā)出請(qǐng)求的對(duì)象與可能處理這個(gè)請(qǐng)求的對(duì)象集合之間是低耦合的(set of potential request handler objects) 在有不止一個(gè)對(duì)象可以處理或?qū)崿F(xiàn)(fulfill)客戶請(qǐng)求的時(shí)候 責(zé)任鏈模式(CoR)認(rèn)為順序地給每一個(gè)對(duì)象一次處理請(qǐng)求的機(jī)會(huì) 在這種情況下應(yīng)用責(zé)任鏈模式(CoR) 把每一個(gè)可能處理請(qǐng)求的對(duì)象以鏈表的形式組織起來 在鏈表中 每一個(gè)對(duì)象有一個(gè)指向下一個(gè)對(duì)象的指針(Pointer) 在鏈表中的第一個(gè)對(duì)象接受請(qǐng)求并且決定是否處理它 或者把它傳遞給下一個(gè)對(duì)象 請(qǐng)求一個(gè)接一個(gè)地遍歷(flow through)鏈表中的所有對(duì)象 直到請(qǐng)求被其中的一個(gè)對(duì)象處理或者因到達(dá)鏈表尾而沒有被處理 例如 如果A?〉B?〉C都可以處理請(qǐng)求 按照這個(gè)順序 A處理請(qǐng)求或者在不知B是否可以處理這個(gè)請(qǐng)求的情況下遞給B 接受到請(qǐng)求的B可以處理這個(gè)請(qǐng)求或者傳遞給C 當(dāng)C收到請(qǐng)求時(shí) 這個(gè)請(qǐng)求可以被C處理或者沒有經(jīng)過任何處理而結(jié)束 換句話說 提交的處理鏈表中的請(qǐng)求在到達(dá)鏈表尾前 可以不被任何處理 下面是責(zé)任鏈模式(CoR)一些重要的特征 ( )可能處理請(qǐng)求的對(duì)象集合(set of potential request handler objects)以及它們?cè)阪湵碇械捻樞蚴怯煽蛻舳烁鶕?jù)現(xiàn)應(yīng)用的狀態(tài)在運(yùn)行時(shí)動(dòng)態(tài)決定的 ( )客戶端根據(jù)現(xiàn)在的狀態(tài) 對(duì)于不同的請(qǐng)求類型 可以擁有不同的可能處理請(qǐng)求的對(duì)象集合(set of potential request handler objects) 一個(gè)處理請(qǐng)求的對(duì)象也可以根據(jù)客戶應(yīng)用的狀態(tài)和請(qǐng)求類型 把請(qǐng)求傳遞給不同的處理對(duì)象 為了使這些交互簡(jiǎn)單 所有的可能處理請(qǐng)求的對(duì)象應(yīng)提供一致的接口 在JAVA中 不同處理對(duì)象可以實(shí)現(xiàn)一個(gè)共同的接口或者繼承同一個(gè)抽象的父類來實(shí)現(xiàn) ( )客戶對(duì)象初始化請(qǐng)求 或者在不知道這些對(duì)象是否能處理這個(gè)請(qǐng)求的情況下初始化任何可能處理請(qǐng)求的對(duì)象 也就是說 客戶對(duì)象和在處理鏈表中的處理對(duì)象都不需要知道到底哪個(gè)對(duì)象去處理這個(gè)請(qǐng)求 ( )請(qǐng)求不能保證被處理 也就是 在沒有處理的情況下 請(qǐng)求已經(jīng)到達(dá)了處理鏈表尾 下面的這個(gè)情景展示了一個(gè)購(gòu)買請(qǐng)求傳遞到處理鏈表中 但是在到達(dá)鏈表尾時(shí) 并沒有被接受 例子 讓我們模擬一個(gè)在特定組織里的購(gòu)買請(qǐng)求(PR)授權(quán)過程的應(yīng)用 通常 在確立訂單并發(fā)到賣方前 一個(gè)購(gòu)買請(qǐng)求是需要不同的管理代表授權(quán)的 我們假定一個(gè)組織中在購(gòu)買請(qǐng)求金額限制上分為四個(gè)授權(quán)管理層次 如下面的列表 Table : Levels of PR AuthorizationManagement Level Authorization LimitBranch Manager$ Regional Director$ Vice President$ President and COO$ 我們可以定義不同的類 來對(duì)應(yīng)上面列表中的不同管理層次 Listing : Classes Representing Different Management Levelsclass BranchManager {static double LIMIT = ;……}//End of classclass RegionalDirector {static double LIMIT = ;……}//End of classclass VicePresident {static double LIMIT = ;……}//End of classclass PresidentCOO {static double LIMIT = ;……}//End of class讓我們定義一個(gè)PurchaseRequest類 它代表購(gòu)買請(qǐng)求 PurchaseRequestID:intdescription:Stringamount:doublegetAmount():double Figure : PurchaseRequest Class RepresentationListing : PurchaseRequest Classclass PurchaseRequest {private int ID;private String description;private double amount;public PurchaseRequest(int id String desc double amt) {ID = id;description = desc;amount = amt;}public double getAmount() {return amount;}public String toString() {return ID + : + description;}}一個(gè)給定的購(gòu)買請(qǐng)求(PR)被上面的管理代表所授權(quán)或處理 換句話說 代表不同管理層次的四個(gè)類都是處理給定購(gòu)買請(qǐng)求的可能處理者(授權(quán)者) 因此 不建議PurchaseRequest實(shí)例榜定到任何的一個(gè)授權(quán)者 通過使用責(zé)任鏈模式(CoR) 實(shí)現(xiàn)了PurchaseRequest對(duì)象和可能授權(quán)請(qǐng)求的對(duì)象集合之間關(guān)聯(lián)的低耦合 利用責(zé)任鏈模式(CoR) 讓我們定義一個(gè)抽象類PRHandler 它定義這些可能授權(quán)購(gòu)買請(qǐng)求對(duì)象的統(tǒng)一接口 Listing : Abstract PRHandler Classpublic abstract class PRHandler {private PRHandler nextHandler;private String handlerName;public PRHandler(String name) {handlerName = name;}public String getName() {return handlerName;}public abstract boolean authorize(PurchaseRequest request);public PRHandler getNextHandler() {return nextHandler;}public void setNextHandler(PRHandler handler) {nextHandler = handler;};} Figure : Purchase Request Approver Hierarchy現(xiàn)在 每一個(gè)授權(quán)者被重新定義為抽象類PRHandler的子類 每一個(gè)授權(quán)對(duì)象把購(gòu)買請(qǐng)求的金額和它所在的管理層次所授權(quán)的金額進(jìn)行比較 如果請(qǐng)求的金額小于授權(quán)的金額 它就可以授權(quán)購(gòu)買 如果大于 它傳遞購(gòu)買請(qǐng)求到鏈表中的下一個(gè)授權(quán)者 Listing : PRHandler Concrete Subclassesclass BranchManager extends PRHandler {static double LIMIT = ;public BranchManager(String name) {super(name);}public boolean authorize(PurchaseRequest request) {double amount = request getAmount();if (amount = LIMIT) {System out println( Branch Manager + getName() + has authorized the PR ? + request);return true;} else {//forward the request to the next handlerreturn getNextHandler() authorize(request);}}}//End of classclass RegionalDirector extends PRHandler {static double LIMIT = ;public RegionalDirector(String name) {super(name);}public boolean authorize(PurchaseRequest request) {double amount = request getAmount();if (amount = LIMIT) {System out println( Regional Director + getName() + has authorized the PR ? +request);return true;} else {//forward the request to the next handlerreturn getNextHandler() authorize(request);}}}//End of classclass VicePresident extends PRHandler {static double LIMIT = ;public VicePresident(String name) {super(name);}public boolean authorize(PurchaseRequest request) {double amount = request getAmount();if (amount = LIMIT) {System out println( V P + getName() + has authorized the PR ? + request);return true;} else {//forward the request to the next handlerreturn getNextHandler() authorize(request);}}}//End of classclass PresidentCOO extends PRHandler {static double LIMIT = ;public PresidentCOO(String name) {super(name);}public boolean authorize(PurchaseRequest request) {double amount = request getAmount();if (amount = LIMIT) {System out println( President COO + getName() + has authorized the PR ? + request);return true;} else {System out println( PR ? + request + couldn t be authorized \n + Executive Board needs to be + consulted for approval \n + reason: Amount too large );return false;}}}//End of class為了授權(quán)購(gòu)買請(qǐng)求 客戶端需要 ( )創(chuàng)建一個(gè)可能接受購(gòu)買請(qǐng)求的授權(quán)對(duì)象集合 把他們按照授權(quán)金額升序進(jìn)行排列 使用setNextHandler(PRHandler)方法 連接每一個(gè)授權(quán)者 下面是可能的授權(quán)購(gòu)買請(qǐng)求的授權(quán)鏈表: Figure lishixinzhi/Article/program/Java/gj/201311/27453
網(wǎng)站題目:java責(zé)任鏈模式代碼 java責(zé)任鏈模式代碼是什么
轉(zhuǎn)載來源:http://www.chinadenli.net/article44/ddoishe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、Google、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站策劃、品牌網(wǎng)站制作、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)