国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JAVA設計模式《一》

2019-11-14 23:24:16
字體:
來源:轉載
供稿:網友
java設計模式《一》

  設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式于己于他人于系統都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。

  本篇將為大家介紹JAVA中的設計模式的第一種:責任鏈模式。

  什么是責任鏈模式呢?舉一個例子:由于目前的房價持續上漲,我們這群小青年,經過無數年打拼,總算攢夠了買房的錢,于是乎你高高興興的來到售房處,準備買一套3居室,這是一位售樓小姐走過了問:先生你需要買房嗎?你很高興的對她說是的。經過精挑細選,你看中了一套,這是你對售樓小姐說,你能給我個5%的折扣嗎?給的話立馬全款。這是售樓小姐一想5%的折扣在我的決定權之內,于是乎她很高興的說:好的先生,那您付款吧。第二天又來了一個買房的人,這個人呢?是個鉆石王老五,他呢對售樓小姐說:給我10%的折扣我就買3套。售樓小姐一想,10%的折扣超出了我的權限范圍,于是他就對王老五說:先生請稍等,我請示一下我們的經理。然后售樓小姐就找經理去了,把情況都報告給了經理,經理一想,10%的權限我有,于是對售樓小姐說可以。然后售樓小姐就回來對王老五說:先生我們經理已經同意給你10%的折扣,你到這邊付一下款吧。講到這里大家是不是已經對責任鏈有了一定的認識呢?下面我們就用代碼具體實現一下這個過程。

 1、創建處理折扣處理人對象:

/** * @價格處理人,負責處理客戶的折扣申請 */public abstract class PRiceHandler {    //直接后繼,用于傳遞請求    protected  PriceHandler successor;        public void setSuccessor(PriceHandler successor){        this.successor = successor;    }        //處理折扣申請    public abstract void processDiscount(float discount);}

 2、創建一個銷售類對象:

/* * 銷售,可以批準5%以內的折扣 */public class Sales extends PriceHandler {    public void processDiscount(float discount) {        if(discount<=0.05){            System.out.println("銷售批準");            //System.out.format("%s批準了折扣:%.2f%n", this.getClass().getName(), discount);        }else{            successor.processDiscount(discount);        }    }}

 3、創建一個銷售經理對象:

/* * 銷售經理,可以批準30%以內的折扣 */public class Manager extends PriceHandler {    public void processDiscount(float discount) {        if(discount<=0.3){            System.out.println("銷售經理批準");            //System.out.format("%s批準了折扣:%.2f%n", this.getClass().getName(), discount);        }else{            successor.processDiscount(discount);        }    }}

 4、創建一個銷售副總裁對象:

/* * 銷售副總裁,可以批準50%以內的折扣 */public class Director extends PriceHandler {    public void processDiscount(float discount) {        if(discount<=0.5){            System.out.println("銷售副總裁批準");            //System.out.format("%s批準了折扣:%.2f%n", this.getClass().getName(), discount);        }else{            successor.processDiscount(discount);        }    }}

 5、創建一個銷售總監對象:

/* * 銷售總監,可以批準40%以內的折扣 */public class VicePresident extends PriceHandler {    public void processDiscount(float discount) {        if(discount<=0.4){            System.out.println("銷售總監批準");            //System.out.format("%s批準了折扣:%.2f%n", this.getClass().getName(), discount);        }else{            successor.processDiscount(discount);        }    }}

 6、創建一個CEO對象:

/* * 總裁,可以批準55%以內的折扣 */public class CEO extends PriceHandler {    public void processDiscount(float discount) {        if(discount<=0.55){            System.out.println("總裁批準");            //System.out.format("%s批準了折扣:%.2f%n", this.getClass().getName(), discount);        }else{            System.out.println("總裁拒絕批準");            //System.out.format("%s拒絕了折扣:%.2f%n", this.getClass().getName(), discount);        }    }}

 7、創建PriceHandler的工廠方法:

public class PriceHandlerFactory {    //創建PriceHandler的工廠方法    public static PriceHandler createPriceHandler() {                PriceHandler sales = new Sales();        PriceHandler man = new Manager();        PriceHandler dir = new Director();        PriceHandler vp = new VicePresident();        PriceHandler ceo = new CEO();                sales.setSuccessor(man);        man.setSuccessor(dir);        dir.setSuccessor(vp);        vp.setSuccessor(ceo);                return sales;    }}

 8、編寫我們的測試類:  

/* * 客戶,請求折扣 */public class Customer {        private static PriceHandler priceHandler;        public void setPriceHandler(PriceHandler priceHandler){        this.priceHandler = priceHandler;    }        public void requestDiscount(float discount){        priceHandler.processDiscount(discount);    }        public static void main(String[] args) {        Customer customer = new Customer();        customer.setPriceHandler(PriceHandlerFactory.createPriceHandler());                Random random = new Random();        for(int i = 0; i<=100; i++){            System.out.print(i+":");            customer.requestDiscount(random.nextFloat());        }    }    }

 9、代碼運行測試:

 

 10、添加銷售小組長對象:

/* * 銷售小組長擁有15%的批準權限 */public class Group extends PriceHandler {    public void processDiscount(float discount) {        if(discount < 0.15){            System.out.println("銷售小組長長批準");        }else{            successor.processDiscount(discount);        }    }}

 11、把小組長添加到責任鏈中:

public class PriceHandlerFactory {    //創建PriceHandler的工廠方法    public static PriceHandler createPriceHandler() {                PriceHandler sales = new Sales();                //創建銷售小組長對象        PriceHandler group = new Group();                PriceHandler man = new Manager();        PriceHandler dir = new Director();        PriceHandler vp = new VicePresident();        PriceHandler ceo = new CEO();                sales.setSuccessor(group);                //把銷售小組長添加到責任鏈當中        group.setSuccessor(man);                man.setSuccessor(dir);        dir.setSuccessor(vp);        vp.setSuccessor(ceo);                return sales;    }}

 12、代碼測試:

  

  對于責任鏈模式,就為大家介紹完畢。下一篇:單例模式與模板方法模式


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 榕江县| 长海县| 女性| 湖口县| 台南市| 达孜县| 汉川市| 营口市| 昭通市| 凌海市| 东城区| 大安市| 凯里市| 隆林| 宜君县| 原阳县| 峡江县| 巩义市| 邵武市| 太仆寺旗| 徐闻县| 北安市| 东安县| 五大连池市| 通海县| 磐石市| 株洲市| 积石山| 星座| 商都县| 盘锦市| 甘洛县| 仁布县| 湖北省| 金寨县| 博客| 鸡泽县| 浮梁县| 新源县| 高安市| 海阳市|