設計模式---------------簡單工廠模式
一、題目(Question)
使用簡單工廠模式設計一個可以創建不同幾何形狀(如圓形、方形和三角形等)的繪圖工具,每個幾何圖形都要有繪製draw()和擦除erase()兩個方法,要求在繪製不支持的幾何圖形時,提示一個Unsupported Exception異常。
二、類圖(Class Diagram)
三、代碼(Code)
Shape.java
CircleShape.java
SquareShape.java
Triangle.java
ShapeFactory.java
package simple_factory; /* * 1、靜態工廠類 * 2、包含一個靜態方法 */ public class ShapeFactory { //靜態方法,放回Shape抽象類型 public static Shape generateShape(String shapeName) throws Exception { //繪製三角形圖案 if (shapeName.equals("三角形")) { return new Triangle(); } //繪製正方形圖案 else if (shapeName.equals("正方形")) { return new SquareShape(); //繪製圓形圖案 } else if (shapeName.equals("圓形")) { return new CircleShape(); //若沒有用戶想要的形狀,則拋出一個異常Exception }else{ throw new Exception("UnSupportedException,對不起,沒有您想要的形狀呢!"); } } }
測試代碼:
package simple_factory; public class Main { public static void main(String[] args) throws Exception { Shape shape1 = null; shape1 = ShapeFactory.generateShape("圓形"); shape1.draw();//我正在爲您繪製圓形圖案呢! shape1.erase();//我正在爲您擦除圓形圖案呢! Shape shape2 =ShapeFactory.generateShape("三角形"); shape2.draw();//我正在爲您繪製三角形圖案呢! shape2.erase();//我正在爲您擦除三角形圖案呢! Shape shape3= ShapeFactory.generateShape("正方形"); shape3.draw();//我正在爲您擦除正方形圖案呢! shape3.erase();//我正在爲您繪製正方形圖案呢! /* * 以下代碼拋出異常UnSupportException */ Shape shape4 = ShapeFactory.generateShape("六邊形"); shape4.draw(); shape4.erase(); } }
四、總結:
1、優點
a) 用戶只需要知道對象的某一個屬性,如圖形的名稱(三角形、正方形、圓形等)即可獲得一個對應的對象,而不用知道具體的實現細節。實現了對責任的有效分割。
2、缺點
a) 當我們在已有圖形的基礎上,想要增加一個圖形(如正六邊形),此時我們得修改工廠類中的工廠方法,違背了設計原則中的“開閉原則”。
b) 使用簡單工廠模式會增加系統中類的個數,增加了系統的複雜度。
c) 工廠類集中負責所有產品(圖形)的生產工作,一旦工廠類不能工作,整個系統都將收到牽連。
d) 拓展困難