裝飾設計模式 學習篇

2021-10-04 19:14:07 字數 3615 閱讀 2539

裝飾設計模式也稱包裝設計模式,用來動態的擴充套件物件的功能,也是繼承關係的的一種替代方案之一。

通俗理解,在不使用的繼承的方式下,採用裝飾設計模式可以擴充套件乙個物件的功能,可以使乙個物件變得越來越強大。

下面通過乙個demo來理解下裝飾設計模式

呼叫**

personeat eat = new personeat()

;//這是沒有裝飾過的 只能吃困窮菜

eat.

eat();

//開始吃 控制台輸出 「貧窮菜」

buyeat buyeat = new buyreat

(eat)

;//裝飾下 買了新的菜,既能吃貧窮菜又可以吃新的菜

buyeat.

eat();

//開始吃 控制台輸出 「貧窮菜」和「新的菜」

public inte***ce eat 

public class personeat implements eat

}public class buyeat implements eat

@override

public void

eat(

)}

recycleview新增頭部(尾部有點bug沒有解決)。

呼叫**

wraprecyclerview recycle_view =

findviewbyid

(r.id.recycle_view)

; recycle_view.

setlayoutmanager

(new linearlayoutmanager

(this));

view view = layoutinflater.

from

(this)

.inflate

(r.layout.item_header, recycle_view, false)

; myadapter adapter = new myadapter()

; recycle_view.

setadapter

(adapter)

; recycle_view.

addheaderview

(view)

;// recyclerview.addfooterview(view2); //尾部有bug 沒有解決

public class wraprecyclerview extends recyclerview 

public wraprecyclerview

(@nonnull context context, @nullable attributeset attrs)

public wraprecyclerview

(@nonnull context context, @nullable attributeset attrs,

int defstyleattr)

@override

public void

setadapter

(@nullable adapter adapter)

/** * 新增頭部

* @param view

*/public void

addheaderview

(view view)

}/**

* 新增底部

* @param view

*/public void

addfooterview

(view view)

}/**

* 移除頭部

* @param view

*/public void

removeheaderview

(view view)

}/**

* 移除底部

* @param view

*/public void

removefooterview

(view view)}}

public class wraprecycleradapter extends recyclerview.adapter})

; mheaderview = new arraylist<

>()

; mfooterview = new arraylist<

>()

;}@nonnull

@override

public recyclerview.viewholder oncreateviewholder

(@nonnull viewgroup parent,

int position)

// mrealadapter 返回 mrealadapter的viewholder

final int adjposition = position - numheaders;

int adaptercount =0;

if(madapter != null)

}// 底部返回 底部的viewholder

return

createheaderfooterviewholder

(mfooterview.

get(adjposition - adaptercount));

} private recyclerview.viewholder createheaderfooterviewholder

(view view);}

@override

public void

onbindviewholder

(@nonnull recyclerview.viewholder holder,

int position)

final int adjposition = position - numheaders;

int adaptercount =0;

if(madapter != null)}}

@override

public int

getitemcount()

@override

public int

getitemviewtype

(int position)

public int

getheaderscount()

public int

getfooterscount()

public void

addheaderview

(view view)

} public void

addfooterview

(view view)

} public void

removeheaderview

(view view)

} public void

removefooterview

(view view)

}}

設計模式總篇 裝飾模式

2020 2 10 13 25 版本 v1 裝飾模式 作用動態的給物件新增一些額外的職責。優點裝飾模式就是把附加的功能放到單獨的類中,並讓這個類包含它要裝飾的物件,當需要執行時,客戶端就可以 有選擇的,按順序的使用裝飾功能 缺點 待完善 之後利用引用計數進行刪除物件 include include ...

設計模式學習 裝飾模式

看完了幾個原則後,我又開始看裝飾模式,將一些裝飾用的方法從主類中分離,並且將具體的裝飾步驟隔離開了,使得主類更加的簡便。這樣做的最大好處就是,有效的把類的核心職責和裝飾功能區分開了,而且可以去除相關類中重複的裝飾邏輯。include include using namespace std class...

設計模式學習 裝飾

來自 設計模式 可復用物件導向軟體的基礎 目的動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式相比生成子類更為靈活。class visualcomponent class decorator public visualcomponent void decorator draw void ...