設計模式---------------簡單工廠模式

設計模式---------------簡單工廠模式

一、題目(Question

使用簡單工廠模式設計一個可以創建不同幾何形狀(如圓形、方形和三角形等)的繪圖工具,每個幾何圖形都要有繪製draw()和擦除erase()兩個方法,要求在繪製不支持的幾何圖形時,提示一個Unsupported Exception異常。

二、類圖(Class Diagram

wKiom1fmIeaDGqpYAADs03ye74A706.png-wh_50


三、代碼(Code

Shape.java

wKioL1fmIeaTWTTvAAA6oLdZy0c227.png-wh_50

 

CircleShape.java

wKiom1fmIeejJmRyAABO5N0Tv8Q426.png-wh_50

 

 

 

 

SquareShape.java

wKiom1fmIefx4tPuAABOb1Uao18162.png-wh_50

 

Triangle.java

wKioL1fmIeiRzK96AABQfq5Yiy8520.png-wh_50

 

 

 

 

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) 拓展困難


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章