日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

《研磨设计模式》chap22 装饰模式Decorator(2)应用到场景

發布時間:2025/3/21 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《研磨设计模式》chap22 装饰模式Decorator(2)应用到场景 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


//計算獎金的組件接口 public abstract class Component { public abstract double calcPrize(String user,Date begin,Date end); }//基本的實現計算獎金的類,也是被裝飾器裝飾的對象 public class ConcreteComponent extends Component{ public double calcPrize(String user, Date begin, Date end) {//只是一個默認的實現,默認沒有獎金return 0;} }public abstract class Decorator extends Component{ protected Component c; //持有被裝飾的組件對象 public Decorator(Component c){this.c = c;} public double calcPrize(String user, Date begin, Date end) {//轉調組件對象的方法return c.calcPrize(user, begin, end);} }//月獎金:團隊業務 public class GroupPrizeDecorator extends Decorator{public GroupPrizeDecorator(Component c){super(c);}public double calcPrize(String user, Date begin, Date end) {//1:先獲取前面運算出來的獎金double money = super.calcPrize(user, begin, end);//2:然后計算當月團隊業務獎金,先計算出團隊總的業務額,然后再乘以1%//假設都是一個團隊的double group = 0.0;for(double d : TempDB.mapMonthSaleMoney.values()){group += d;}double prize = group * 0.01;System.out.println(user+"當月團隊業務獎金"+prize);return money + prize;} }//月獎金:業務 public class MonthPrizeDecorator extends Decorator{... }public class Client {public static void main(String[] args) {//先創建計算基本獎金的類,這也是被裝飾的對象Component c1 = new ConcreteComponent();//然后對計算的基本獎金進行裝飾,這里要組合各個裝飾//說明,各個裝飾者之間最好是不要有先后順序的限制,也就是先裝飾誰和后裝飾誰都應該是一樣的//先組合普通業務人員的獎金計算Decorator d1 = new MonthPrizeDecorator(c1);Decorator d2 = new SumPrizeDecorator(d1); //注意:這里只需要使用最后組合好的對象調用業務方法即可,會依次調用回去//日期對象都沒有用上,所以傳null就可以了double zs = d2.calcPrize("張三",null,null); System.out.println("==========張三應得獎金:"+zs);double ls = d2.calcPrize("李四",null,null);System.out.println("==========李四應得獎金:"+ls);//如果是業務經理,還需要一個計算團隊的獎金計算Decorator d3 = new GroupPrizeDecorator(d2);double ww = d3.calcPrize("王五",null,null);System.out.println("==========王經理應得獎金:"+ww); } }

1.1. 對象組合

public class A {public void a1(){System.out.println("now in A.a1");} }public class C2 {//創建A對象的實例 private A a = new A(); public void a1(){//轉調A對象的功能a.a1();}public void c11(){System.out.println("now in C2.c11");} }

1.2.初步總結

裝飾器中不僅僅是可以給被裝飾對象增加功能,還可以根據需要選擇是否調用被裝飾對象的功能,如果不調用被裝飾對象的功能,那就變成完全重新實現了,相當于動態修改了被裝飾對象的功能。
延伸另外一點,各個裝飾器之間最好是完全獨立的功能,不要有依賴,這樣在進行裝飾組合的時候,才沒有先后順序的限制.

總結

以上是生活随笔為你收集整理的《研磨设计模式》chap22 装饰模式Decorator(2)应用到场景的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。