裝飾設計模式也稱包裝設計模式,用來動態的擴充套件物件的功能,也是繼承關係的的一種替代方案之一。下面通過乙個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 ...