<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-126  評論-247  文章-5  trackbacks-0

    簡單工廠模式又稱為靜態工廠方法模式,是工廠模式中的一種形態之一,是一個很根本的設計模式;
    簡單工廠模式一般涉及三個角色:工廠角色、具體產品角色、抽象產品角色,模式的核心是工廠類,這個類含有必要的邏輯判斷,
    它根據傳進的不同參數來判斷應當創建哪一個具體產品類的實例,而客戶端則可以免去直接創建具體產品實例,而僅僅負責"消費"產品,這種做法很好的實現了責任的分割。

    簡單工廠的一般性結構:



    根據模式的這個結構,下面來模擬一個簡單的加減乘除的計算器:

    簡單工廠結構示意圖:


    共同接口:Operation.java

    package pattern.simple.factory;
    /**
     * -----------------------------------------
     * @描述  運算接口
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-7-30 <p>
     * -----------------------------------------
     
    */

    public interface Operation {

        
    /**
         * <B>方法描述:</B>
         * <p style="margin-left:20px;color:#A52A2A;">
         * 計算兩個操作數的運算值
         * 
    @param operand1 <span style="color: #008080;"> 操作數1 </span>
         * 
    @param operand2 <span style="color: #008080;"> 操作數2 </span>
         * 
    @return <span style="color: #008080;"> 返回兩個操作數的運算值 </span>
         
    */

        
    public double operate(Number operand1, Number operand2);
        
    }



    加法實現類:OperationAdd.java

    package pattern.simple.factory;
    /**
     * -----------------------------------------
     * @描述  加法實現類
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-7-30 <p>
     * -----------------------------------------
     
    */

    public class OperationAdd implements Operation {

        @Override
        
    public double operate(Number operand1, Number operand2) {
            
            
    return operand1.doubleValue() + operand2.doubleValue();
        }


    }



    減法實現類:OperationSubtract.java

    package pattern.simple.factory;
    /**
     * -----------------------------------------
     * @描述  減法實現類
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-7-30 <p>
     * -----------------------------------------
     
    */

    public class OperationSubtract implements Operation {

        @Override
        
    public double operate(Number operand1, Number operand2) {
            
            
    return operand1.doubleValue() - operand2.doubleValue();
        }


    }



    乘法實現類:OperationMultiply.java

    package pattern.simple.factory;
    /**
     * -----------------------------------------
     * @描述  乘法實現類
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-7-30 <p>
     * -----------------------------------------
     
    */

    public class OperationMultiply implements Operation {

        @Override
        
    public double operate(Number operand1, Number operand2) {
            
            
    return operand1.doubleValue() * operand2.doubleValue();
        }


    }



    除法實現類:OperationDivision.java

    package pattern.simple.factory;
    /**
     * -----------------------------------------
     * @描述  除法實現類
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-7-30 <p>
     * -----------------------------------------
     
    */

    public class OperationDivision implements Operation {

        @Override
        
    public double operate(Number operand1, Number operand2) {
            
    try {
                
    if(operand2.doubleValue() == 0.0) {
                    
    throw new Exception("警告:被除數不能為0");
                }
    else {
                    
    return operand1.doubleValue() / operand2.doubleValue();
                }

            }
     catch (Exception e) {e.printStackTrace();}
            
    return 0;
        }


    }



    運算符異常類:OperatorNotFoundExection.java

    package pattern.simple.factory;
    /**
     * -----------------------------------------
     * @描述  運算符異常類
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-7-30 <p>
     * -----------------------------------------
     
    */

    public class OperatorNotFoundExection extends Exception {

        
    private static final long serialVersionUID = 1L;

        
    public OperatorNotFoundExection(String errorMsg){
            
    super(errorMsg);
        }

    }



    簡單工廠實現類:OperationFactory.java

    package pattern.simple.factory;
    /**
     * -----------------------------------------
     * @描述  簡單工廠類
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-7-30 <p>
     * -----------------------------------------
     
    */

    public class OperationFactory {

        
    //私有化構造子,防止簡單工廠類實例被創建
        private OperationFactory(){
            
        }

        
    /**
         * <B>方法描述:</B>
         * <p style="margin-left:20px;color:#A52A2A;">
         * 獲取與參數運算符相匹配的類實例
         * 
    @param operator <span style="color: #008080;"> 取值范圍:<BR>
         * ① '+' <BR>
         * ② '-' <BR>
         * ③ '*' <BR>
         * ④ '/' <BR></span>
         * 
    @return <span style="color: #008080;"> 返回與參數運算符相匹配的類實例 </span>
         
    */

        
    public static Operation getInstance(char operator){
            
            
    switch (operator){
                
    case '+' : 
                    
    return new OperationAdd();
                
    case '-' : 
                    
    return new OperationSubtract();
                
    case '*' : 
                    
    return new OperationMultiply();
                
    case '/' : 
                    
    return new OperationDivision();
                
    default  : 
                    
    try {
                        
    throw new OperatorNotFoundExection("ERROR:找不到與參數 " + operator + " 相匹配的運算符!");
                    }
     catch (OperatorNotFoundExection e) {e.printStackTrace();}
            }

            
    return null;
        }

    }



    客戶端測試類:Client.java

    package pattern.simple.factory;
    /**
     * -----------------------------------------
     * @描述  客戶端測試類
     * @作者  fancy
     * @郵箱  fancydeepin@yeah.net
     * @日期  2012-7-30 <p>
     * -----------------------------------------
     
    */

    public class Client {

        
    public static void main(String[] args) {
            
            Operation op 
    = OperationFactory.getInstance('*');
            System.out.println(op.operate(
    42.5));
            op 
    = OperationFactory.getInstance('/');
            System.out.println(op.operate(
    402.5));
            System.out.println(op.operate(
    400));
        }

    }



    后臺打印輸出結果:

    10.0
    16.0
    java.lang.Exception: 警告:被除數不能為0
            at pattern.simple.factory.OperationDivision.operate(OperationDivision.java:16)
        at pattern.simple.factory.Client.main(Client.java:18)


      
    posted on 2012-07-30 14:36 fancydeepin 閱讀(1590) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 欧洲亚洲国产清在高| 好久久免费视频高清| 免费看一级一级人妻片| 韩国免费A级毛片久久| 7m凹凸精品分类大全免费| 欧美男同gv免费网站观看| 亚洲日本中文字幕天堂网| 亚洲卡一卡2卡三卡4卡无卡三| 国产色在线|亚洲| 一个人看的www免费在线视频| 一级成人a毛片免费播放| 免费人成视频在线| 亚洲另类激情综合偷自拍图| 亚洲乱码一二三四区乱码| 免费毛片毛片网址| 亚洲高清视频免费| 国产成人A亚洲精V品无码| 日韩亚洲不卡在线视频中文字幕在线观看| 免费无码午夜福利片| 免费观看无遮挡www的视频| 亚洲一级特黄大片无码毛片 | 黄色三级三级三级免费看| 久久黄色免费网站| 免费在线观看亚洲| 亚洲一区免费在线观看| 久久免费视频一区| 成年人性生活免费视频| 久久精品国产亚洲夜色AV网站| 日韩精品亚洲专区在线影视| 5g影院5g天天爽永久免费影院| 久久精品国产精品亚洲| 亚洲成aⅴ人片久青草影院按摩| 2021在线永久免费视频| 亚洲人成图片小说网站| 美女啪啪网站又黄又免费| 免费看黄视频网站| 久久精品国产亚洲AV麻豆网站| 人人爽人人爽人人片av免费| 麻豆国产人免费人成免费视频| 亚洲女人影院想要爱| 久久精品电影免费动漫|