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

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

JAVA設計模式《三》

2019-11-14 23:25:56
字體:
來源:轉載
供稿:網友
java設計模式《三》

  上一篇為大家介紹了一下關于模板方法模式的實現,后來我發現里面有一點小瑕疵,本篇重新為大家介紹一下關于模板方法模式的實現。另外為大家分享一下關于策略模式的實現。

 一、模板方法模式:

  對于上一篇為大家介紹的實現方法,大家是否有這樣的疑問,如果哪位用戶說,我要一杯清茶,不要加檸檬,這時我們飲料機該如何操作呢?為了解決這個問題,我們需要引入一個鉤子方法,用來達到我們是否加檸檬的操作。

  1、飲料機類:

/* * 模板方法模式 */public abstract class Robot {        public final void runRobot(){        ZhuShui();        Chong();        DaoShui();        if(flag()){            Add();        }    }        //添加的鉤子方法    public boolean flag(){        return true;    }        //基本方法把水煮沸    public void ZhuShui(){        System.out.

  2、清茶類:

public class Tea extends Robot {    public void Add() {        System.out.println("加檸檬");    }    public void Chong() {        System.out.println("沖泡茶葉");    }        public boolean flag(){        return false;    }}

  3、測試類:

public class Test {    /**     * @param 模板方法模式測試     */    public static void main(String[] args) {        Robot robot1 = new Coffer();        robot1.runRobot();                System.out.println("**********************");                Robot robot2 = new Tea();        robot2.runRobot();                }}

  到這里關于模板方法模式添加鉤子方法的實現就介紹完畢,大家可以自行測試,如有疑問請留言。


  二、策略模式的實現:

  策略模式是什么呢?下面我就為大家講一個小東西,方便大家理解,比如你的公司現在要開發做一個關于鴨子的項目,其中會出現很多鴨子,有會飛的、有不會飛的、有做火箭飛的,如何來保證我們添加這些特性是不受影響呢?就可以用到我們的策略模式,我們使用接口封裝一下飛這個特性,然后通過父類對象調用這個接口,并實行其中飛的方法,這樣子類在繼承父類時,便可以繼承到父類的這個方法。

  1、創建Dark父類對象:

public abstract class Dark {        public String name;        public void getName() {        System.out.println("我的名字是:"+name);    }    public void setName(String name) {        this.name = name;    }    public void Say(){        System.out.println("嘎嘎嘎嘎");    }        public abstract void backGround();        flayIm flay;    public void setFlay(flayIm flay) {        this.flay = flay;    }        public void getFlay(){        flay.Flay();    }    }

  2、添加一個封裝了飛這個特性的接口方法:

public interface flayIm {    public void Flay();}

  3、創建實現了該接口的方法:

    a、會飛的:

public class Flay implements flayIm {    public void Flay() {        System.out.println("我用翅膀飛行");    }}

    b、不會飛的:

public class noFlay implements flayIm {    public void Flay() {        System.out.println("我不會飛行");    }}

  4、鴨子對象:

    a、紅色羽毛的鴨子對象:

public class redDark extends Dark {    public void backGround() {        System.out.println("我的羽毛是紅顏色的");    }}

    b、黑色羽毛的鴨子對象:

public class blankDark extends Dark {    public void backGround() {        System.out.println("我是羽毛是黑色的");    }}

    c、大黃鴨對象:

public class bigYellowDark extends Dark {        public void Say(){        System.out.println("嘎~嘎~嘎~嘎~");    }    public void backGround() {        System.out.println("我沒有羽毛");    }}

  5、測試類:

public class DarkTest {    /**     * @param 測試類對象     */    public static void main(String[] args) {        Dark mredDark = new redDark();        Dark mblankDark = new blankDark();        Dark mbigDark = new bigYellowDark();        flayIm flay = new Flay();        flayIm noflay = new noFlay();        mredDark.setName("小紅鴨");        mredDark.getName();        mredDark.setFlay(flay);        mredDark.Say();        mredDark.backGround();        mredDark.getFlay();        System.out.println("***********************");        mblankDark.setName("小黑鴨");        mblankDark.getName();        mblankDark.setFlay(flay);        mblankDark.Say();        mblankDark.backGround();        mblankDark.getFlay();        System.out.println("***********************");        mblankDark.setName("大黃鴨");        mblankDark.getName();        mblankDark.setFlay(noflay);        mblankDark.Say();        mblankDark.backGround();        mblankDark.getFlay();            }}

  好了,到這里我們的策略模式就介紹完畢,下一篇:設計模式中的適配器、工廠、代理模式

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永吉县| 灵丘县| 石林| 霸州市| 朔州市| 大庆市| 姚安县| 双峰县| 布尔津县| 沂水县| 重庆市| 松原市| 徐水县| 阿巴嘎旗| 吕梁市| 白河县| 深圳市| 龙陵县| 淳安县| 宁陕县| 天津市| 长顺县| 依安县| 曲靖市| 策勒县| 穆棱市| 集安市| 秦皇岛市| 获嘉县| 华容县| 枣阳市| 宜川县| 白河县| 禄丰县| 马尔康县| 慈利县| 拉萨市| 昭苏县| 岚皋县| 蒲江县| 固安县|