日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

工厂模式方法

發布時間:2025/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 工厂模式方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工廠模式方法

首先使用簡單工廠模式實現一個計算器方法

import java.util.Scanner;abstract class operation {private double numberA=0;private double numberB=0;//兩個number屬性主要用于計算機的前后數boolean flag=true;public double getNumberA() {return numberA;}public void setNumberA(double numberA) {this.numberA = numberA;}public double getNumberB() {return numberB;}public void setNumberB(double numberB) {this.numberB = numberB;}public abstract double getResult(); } class operationAdd extends operation {@Overridepublic double getResult() {// TODO Auto-generated method stubdouble result=0;return getNumberA()+getNumberB();} } class operationSub extends operation {@Overridepublic double getResult() {// TODO Auto-generated method stubdouble result=0;return getNumberA()-getNumberB();} } class operationMul extends operation {@Overridepublic double getResult() {// TODO Auto-generated method stubdouble result=0;return getNumberA()*getNumberB();} } class operationDiv extends operation {@Overridepublic double getResult() {// TODO Auto-generated method stubdouble result=0;return getNumberA()/getNumberB();} } class operationfacotry {public static operation creatoperation(char operate){operation oper=null;switch(operate){case '+': oper=new operationAdd();break;case '-': oper=new operationSub();break;case '*': oper=new operationMul();break;case '/': oper=new operationDiv();break;}return oper;/*簡單工廠模式operationfacotry根據提供給他的數據(Operate)返回幾個可能的類operationAdd,operationSub,operationMul,operationDiv中的一個類的實例它返回的類有一個公共的父類operation和一個公共的方法getSult()如此一來如果我們需要增添復雜的運算,只需增加相應的運算子類和拓展工廠類就行。*/} } public class main {public static void main(String[] args) {Scanner s = new Scanner(System.in);System.out.println("請輸入數A:");String a=s.nextLine();System.out.println("請輸入運算符:");String stropera=s.nextLine();System.out.println("請輸入數B:");String b=s.nextLine();operation oper;oper=operationfacotry.creatoperation(stropera.charAt(0));oper.setNumberA(Double.parseDouble(a));oper.setNumberB(Double.parseDouble(b));System.out.println("結果是:"+oper.getResult());} }

如果要添加一個負責的運算 如:M的N次方
只需要補充一個方法類繼承運算類不需要改變用戶類

class operationMN extends operation {@Overridepublic double getResult() {// TODO Auto-generated method stubdouble r=1;double m=getNumberA();int n=(int)getNumberB();for(int i=1;i<n;i++){r=r*m;}return r;} }

此時修改工廠類

class operationfacotry {public static operation creatoperation(char operate){operation oper=null;switch(operate){case '+': oper=new operationAdd();break;case '-': oper=new operationSub();break;case '*': oper=new operationMul();break;case '/': oper=new operationDiv();break;***case '^': oper=new operationMN();break;***//違背了開放-封閉原則}return oper;}}

于是對此進行優化采用工廠方法模式,根據依賴倒轉原則,把工廠類抽象出一個接口,這個接口有一個創建抽象產品的工廠方法。所以的要生產具體類的工廠,就去實現這個接口,這樣,一個簡單工廠模式的工廠類,變成了一個工廠抽象接口和多個具體生成對象的工廠類。因此要增加功能時只需要增加此功能的運算類和相應的工廠類。

abstract class operation {private double numberA=0;private double numberB=0;//兩個number屬性主要用于計算機的前后數boolean flag=true;public double getNumberA() {return numberA;}public void setNumberA(double numberA) {this.numberA = numberA;}public double getNumberB() {return numberB;}public void setNumberB(double numberB) {this.numberB = numberB;}public abstract double getResult(); } class operationAdd extends operation {@Overridepublic double getResult() {// TODO Auto-generated method stubdouble result=0;return getNumberA()+getNumberB();} } class operationSub extends operation {@Overridepublic double getResult() {// TODO Auto-generated method stubdouble result=0;return getNumberA()-getNumberB();} } class operationMul extends operation {@Overridepublic double getResult() {// TODO Auto-generated method stubdouble result=0;return getNumberA()*getNumberB();} } class operationDiv extends operation {@Overridepublic double getResult() {// TODO Auto-generated method stubdouble result=0;return getNumberA()/getNumberB();} }interface IFactory {operation createoperation(); } class AddFactory implements IFactory {@Overridepublic operation createoperation() {// TODO Auto-generated method stubreturn new operationAdd();} } class SubFactory implements IFactory {@Overridepublic operation createoperation() {// TODO Auto-generated method stubreturn new operationSub();} } class MulFactory implements IFactory {@Overridepublic operation createoperation() {// TODO Auto-generated method stubreturn new operationMul();} } class DivFactory implements IFactory {@Overridepublic operation createoperation() {// TODO Auto-generated method stubreturn new operationDiv();} } //加減乘除各建立一個具體工廠去實現接口 public class main {public static void main(String[] args) {Scanner s = new Scanner(System.in);System.out.println("請輸入數A:");String a=s.nextLine();System.out.println("請輸入運算符:");String stropera=s.nextLine();System.out.println("請輸入數B:");String b=s.nextLine();IFactory oper=null;switch(stropera.charAt(0)){case '+': oper=new AddFactory();break;case '-': oper=new SubFactory();break;case '*': oper=new MulFactory();break;case '/': oper=new DivFactory();break;}operation op=oper.createoperation();op.setNumberA(Double.parseDouble(a));op.setNumberB(Double.parseDouble(b));try{System.out.println("結果是:"+op.getResult());}catch(Exception e){e.printStackTrace();}} }

工廠方法模式是類的創建模式,其用意是定義一個創建產品對象的工廠接口,核心是工廠類不再負責所以產品的創建,而是將具體創建工作交給子類去做。
工廠模式可以允許系統在不修改工廠角色的情況下引進新產品。
但是工廠方法把簡單工廠內部的邏輯判斷移到客戶端代碼來進行。想要加功能需要修改客戶端。

總結

以上是生活随笔為你收集整理的工厂模式方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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