設計模式簡單工廠_第1頁
設計模式簡單工廠_第2頁
設計模式簡單工廠_第3頁
設計模式簡單工廠_第4頁
設計模式簡單工廠_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

簡單工廠設計模式目錄TOC\o"1-5"\h\z\o"CurrentDocument"1.1摘要 2\o"CurrentDocument"2.1關鍵字 2\o"CurrentDocument"3.1開發(fā)工具 2\o"CurrentDocument"4.1簡單工廠模式動機與定義: 3\o"CurrentDocument"4.1.1模式動機 3\o"CurrentDocument"4.1.2模式定義 35.1簡單工廠模式結(jié)構 4\o"CurrentDocument"6.1簡單工廠模式實例: 5\o"CurrentDocument"6.1.1代碼分析 6\o"CurrentDocument"Product(Shape抽象類)代碼: ConcreteProduct(Juxing,YuanXing,SanJiao具體產(chǎn)品類)代碼:..7\o"CurrentDocument"JuXing類: 7\o"CurrentDocument"YuanXing類: 8\o"CurrentDocument"SanJiao類: 8\o"CurrentDocument"Factory(Factory類)代碼: 9\o"CurrentDocument"(main類): 運行結(jié)果: 12\o"CurrentDocument"7.1結(jié)論 12138.1參考文獻:131.1摘要本文從面向?qū)ο蟮慕嵌葘ava接口的概念、作用以及使用它的好處做分析,講解面向接口編程的方法,結(jié)合初步接觸軟件開發(fā)的人員習慣,從簡單工廠設計模式的概念和其結(jié)構以及用途進行解析,重點講解簡單工廠設計模式在軟件開發(fā)過程中的作用和好處,通過一些實例來說明簡單工廠設計模式的特點。2.1關鍵字面向?qū)ο?;java接口;接口編程;簡單工廠設計模式。3.1開發(fā)工具Eclipsejava語言開發(fā)4.1簡單工廠模式動機與定義:在實際的軟件開發(fā)過程中有時需要創(chuàng)建一些來自于相同父類的類的實例為此可以專門定義一個類來負責創(chuàng)建這些類的實例,這些被創(chuàng)建的實例具有共同的父類。在這種情況下,可以通過傳入不同的參數(shù)從而獲取不同的對象,理由Java語言的特征,習慣上將創(chuàng)建其他類實例的方法定義為static方法,外部不需要實例化這個類就可以直接調(diào)用該方法來獲得需要的對象,該方法也成為靜態(tài)工廠方法。4.1.1模式動機考慮一個簡單的軟件應用場景,一個軟件系統(tǒng)可以提供多個外觀不同的按鈕(如圓形按鈕,矩形按鈕等),這些按鈕都源自同一個基類,不過在繼承基類之后不同的子類修改了部分屬性從而使得它們可以呈現(xiàn)不同的外觀,如果我們希望在使用這些按鈕時,不需要知道這些具體按鈕類的名字,只需要知道表示該按鈕的一個參數(shù),并提供一個調(diào)用方便的方法,把該參數(shù)傳入方法即可返回一個相應的按鈕對象,此時,就可以使用簡單工廠模式。4.1.2模式定義簡單工廠模式專門定義一個類來負責創(chuàng)建其他類的實例被創(chuàng)建的實例通常具有共同的父類。a、Factory(工廠角色)是簡單工廠模式的核心,它負責實現(xiàn)創(chuàng)建所有具體產(chǎn)品類的實例。工廠類可以被外界直接調(diào)用,創(chuàng)建所需的產(chǎn)品對象。b、 Product(抽象產(chǎn)品角色)是所有具體產(chǎn)品角色的父類,它負責描述所有實例所共有的公共接口。c、 ConcreteProduct(具體產(chǎn)品角色)繼承自抽象產(chǎn)品角色,一般為多個,是簡單工廠模式的創(chuàng)建目標。工廠類返回的都是該角色的某一具體產(chǎn)品。6.1簡單工廠模式實例:使用簡單工廠模式設計一個可以創(chuàng)建不同幾何形狀(如圓形、方形和三角形等)的繪圖工具,每個幾何圖形都要繪制draw()和擦除erase()兩個方法,要求在繪制不支持的幾何圖形時,提示一個UnSupportedShapeException。

6.1.1代碼分析Product(Shape抽象類)代碼:importjava.awt.Graphics;importjavax.swing.JPanel;publicabstractclassAbstractshape(staticGraphicsg;publicabstractvoiddraw(JPanelp);publicabstractJPanelerase(JPanelp);}分析:創(chuàng)建draw()和erase()方法供子類繼承調(diào)用;ConcreteProduct(Juxing,YuanXing,SanJiao具體產(chǎn)品類)代碼:〃各個產(chǎn)品類代碼類似、需要添加產(chǎn)品類時只需要另外創(chuàng)建一個類然后再修改工廠類少量代碼即可JuXing類:importjavax.swing.JPanel;〃繪制矩形publicclassJuXingextendsAbstractShape(privateJPanelp;@Overridepublicvoiddraw(JPanelp)(//TODOAuto-generatedmethodstubthis.p=p;//g.drawrect(50,50,100,50);}@OverridepublicJPanelerase(JPanelp)(p.repaint();//TODOAuto-generatedmethodstubreturnp;YuanXing類:importjavax.swing.JPanel;//繪制圓形publicclassYuanXingextendsAbstractShape(privateJPanelp;@Overridepublicvoiddraw(JPanelp)(//TODOAuto-generatedmethodstubthis.p=p;//g.drawOval(50,50,50,50);}@OverridepublicJPanelerase(JPanelp)(p.repaint();//TODOAuto-generatedmethodstubreturnp;}}SanJiao類:importjavax.swing.JPanel;〃繪制三角形publicclassSanJiaoextendsAbstractShape(privateJPanelp;@Overridepublicvoiddraw(JPanelp)(//TODOAuto-generatedmethodstubthis.p=p;//intx[]={130,100,200}inty[]={130,200,200};g.drawPolygon(x,y,3); }@OverridepublicJPanelerase(JPanelp)(p.repaint();//TODOAuto-generatedmethodstubreturnp;}}Factory(Factory類)代碼:publicclassFactory(publicstaticAbstractShapecreatShape(Strings)throwsException(if(s.equalsIgnoreCase("矩形"))(returnnewJuXing();}elseif(s.equalsIgnoreCase("圓形"))(returnnewYuanXing();}elseif(s.equalsIgnoreCase("三角形"))(returnnewSanJiao();}else(thrownewException("UnSupportedShapeException");}}}〃注釋:用于創(chuàng)建各個具體產(chǎn)品角色的對象;(main類):創(chuàng)建一個窗體,添加控件和監(jiān)聽代碼如下:importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassShapeFrameextendsJFrameimplementsActionListener(JPanelcontentPane=newJPanel();JPanelupPane=newJPanel();JPanelcenterPane=newJPanel();StringshapeStr[]={"圓形","矩形","三角形"};JComboBoxcmb=newJComboBox(shapeStr);JLabellab=newJLabel("選擇目標圖形:");JButtondrawBtu=newJButton("繪制");JButtoneraseBtu=newJButton("擦除");Shapeshape;ShapeFrame(Stringtitle){super(title);setSize(800,600);setLocationRelativeTo(null);addPane();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}voidaddPane(){setContentPane(contentPane);contentPane.setLayout(newBorderLayout());contentPane.setBackground(Color.white);upPane.setBackground(Color.white);centerPane.setBackground(Color.white);contentPane.add(upPane,BorderLayout.NORTH);contentPane.add(centerPane,BorderLayout.CENTER);initWidget();upPane.add(lab);upPane.add(cmb);upPane.add(drawBtu);upPane.add(eraseBtu);}voidinitWidget()(drawBtu.addActionListener(this);eraseBtu.addActionListener(this);}//關鍵代碼@OverridepublicvoidactionPerformed(ActionEvente)(Objectobject=e.getSource();if(object.equals(drawBtu))(StrinshapeName=cmb.getSelectedItem().toString();try(shape=ShapeFactory.creatShape(shapeName);shape.draw(centerPane);}catch(Exceptionerror)(error.printStackTrace();}}elseif(object.equals(eraseBtu))(if(shape!=null)(JPanelnewPanel=shape.erase(centerPane);contentPane.add(newPanel,BorderLayout.CENTER);repaint();shape=null;}

7.1結(jié)論簡單工廠模式的實

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論