設計模式之禪筆記2

2021-07-26 05:24:43 字數 3264 閱讀 7830

定義:使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈。並沿著這條鏈傳遞該請求,直到有物件處理它為止。

責任鏈模式的通用**

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...