UML类图及工厂
目錄
一、UML類圖
1.什么是類圖?
2.UML類圖屬性的表示
3.UML類圖類與類之間常用關系
二、工廠
1.什么是工廠模式?
2.簡單工廠(靜態工廠)
3.工廠方法
3、抽象工廠
一、UML類圖
1.什么是類圖?
UML全稱 "Unified Modeling Language",即統一建模語言,是一種可視化色面向對象建模語言,通過一系列標準的圖形符號來描述系統。是用戶將所希望描述的事物抽象為類,描述類的內部結構和類之間的設計視圖。
2.UML類圖屬性的表示
屬性包括:public(+)、private(-)、protected(#)、friend(~)
public class Animal {public String name;private int number;public void eat() {System.out.println("Cat eat mouse!");}public boolean run(int number) {System.out.println(number+"歲的貓正在走");} }接口的表示:
interface Animal {public void eat();public int run(); }3.UML類圖類與類之間常用關系
常用關系包括:泛化(Generalization)、實現(Realization)、組合(Composition)、聚合(Aggtegation)、關聯(Association)、依賴(Dependency)。耦合度從強到弱:泛化=實現>組合>聚合>關聯>依賴
-
泛化
是父類與子類的關系(繼承關系,is a關系)。表示:空心三角形和實線,箭頭從子類指向父類。如下圖表示teacher是person子類
-
實現
是實現類與接口的關系。表示:空心三角形和虛線,空心三角形指向接口,如下圖表示:面包類實現了食品接口
?
-
關聯
是一種擁有關系,一個類可以調用另一個類共有的屬性和方法,在類中以成員變量表示,可分為單向關聯、雙向關聯、自關聯、多重性關聯
-
單向關聯
單方面知道對方存在。表示
-
二、工廠
1.什么是工廠模式?
工廠模式就是將創建對象的具體過程屏蔽起來,就客戶不需要知道對象是怎么創建的,只要拿來用就ok了。工廠模式可分為簡單工廠模式、工廠方法模式和抽象工廠模式
2.簡單工廠(靜態工廠)
如果我們不用工廠模式,當客戶需要一個面包時,一般情況是客戶去創建一個面包,然后拿來用。而現在用了工廠模式,客戶就不必創建面包了,只需要告知他想要一個面包,然后由食物工廠去創建面包。即定義一個創建對象的接口,將對象的創建和本身的業務邏輯分離。具體看下面的圖及代碼:
?
定義一個Food的接口,其中含materis方法
package com.gongchang.factory1; ? public interface Food {public void materials(); }由Bread和Rice實現Food接口
package com.gongchang.factory2; ? import com.gongchang.factory1.Food; ? public class Bread implements Food{public void materials() {System.out.println("生產面包");} } package com.gongchang.factory2; ? import com.gongchang.factory1.Food; ? public class Rice implements Food {public void materials() {System.out.println("生產米飯");} }定義一個FoodFactory工廠,用來判斷輸入是否有誤
package com.gongchang.factory3; ? import com.gongchang.factory1.Food; import com.gongchang.factory2.Bread; import com.gongchang.factory2.Rice; ? public class FoodFactory {public Food produce(String type) {//返回值為Food類型if("面包".equals(type))//判斷輸入是否是已經存在的食物return new Bread();//不太理解哦else if("米飯".equals(type))return new Rice();else {System.out.println("請輸入正確的類型");return null;//輸入錯誤則進行提示}} }測試類
package com.gongchang.factory4; ? import com.gongchang.factory1.Food; import com.gongchang.factory3.FoodFactory; ? public class FoodTest {public static void main(String[] args) {FoodFactory f = new FoodFactory();//new一個食物工廠的引用,該引用指向食物工廠Food food =f.produce("米飯"); //f引用的produce方法,賦給了Food類型的food引用?food.materials();//用food引用實現materials方法} } ?3.工廠方法
由上述代碼知道,當客戶要創建一個milk或其他食品時,要對類中的代碼進行修改,違背了開閉原則,于是就有了工廠方法模式。
即,將工廠抽象化,并定義一個創建對象的接口。每增加新產品,只需增加該產品及相應的具體實現工廠類,有具體工廠類決定要實例化的產品是哪個,將對象的創建與實例化延遲到子類,則滿足開閉原則
工廠方法模式是在簡單工廠的基礎上,使每一個具體的產品(如Bread)都有一個相應的工廠(BreadFactory),每一個相應的工廠都是一個實現類(也可以是一個子類),由這個相應的工廠去實例化對象,則其接口(父類或者抽象類)可以看做一個總工廠(FoodFactory),于是,客戶每想要一個新的食品時,就會擴展一個相應的食品工廠類和食品類,這樣就滿足了開閉原則。
在簡單工廠的Food、Bread、Rice基礎上,具體看下面的圖及代碼:
?
定義一個總工廠的接口
package com.gongchang.factory3; ? import com.gongchang.factory1.Food; ? public interface FoodFactory {public Food creatfood();//其返回值類型是Food }總工廠下面的分工廠BreadFactory和RiceFactory
package com.gongchang.factory4; ? import com.gongchang.factory1.Food; import com.gongchang.factory2.Bread; import com.gongchang.factory3.FoodFactory; ? public class BreadFactory implements FoodFactory {public Food creatfood() {return new Bread();} } package com.gongchang.factory5; ? import com.gongchang.factory1.Food; import com.gongchang.factory4.BreadFactory; import com.gongchang.factory4.RiceFactory; ? public class FoodTest {public static void main(String[] args) {Food b = new BreadFactory().creatfood();Food r = new RiceFactory().creatfood();b.materials();r.materials();} }測試類
package com.gongchang.factory5; ? import com.gongchang.factory1.Food; import com.gongchang.factory4.BreadFactory; import com.gongchang.factory4.RiceFactory; ? public class FoodTest {public static void main(String[] args) {Food b = new BreadFactory().creatfood(); //不理解。。何種new法?對象是BreadFactory().creatfood();?Food r = new RiceFactory().creatfood();b.materials();r.materials();} }3、抽象工廠
實際上,一個工廠不會只生產單獨的產品,而是多個,工廠方法模式生產多個產品時,代碼則太過龐大。于是就用到了抽象類。先了解兩個概念:
1)產品等級結構:指的是產品的繼承結構,例如一個面包抽象類,它有a種面包與b種面包等一系列子類,則該抽象類與他的子類構成了一個產品等級結構
2)產品族:由同一個工廠產生的,位于不同產品等級結構中的一組產品。例如,a工廠生產a種面包、a種米飯
?
所以,抽象模式主要用于創建相關對象色家族,當一個產品族需要被設計在一起工作時,通過抽象工廠模式,能夠保證客戶端始終只使用一個產品族的對象
具體:
?
總結
- 上一篇: NetKeeper校园网连接不上,出现S
- 下一篇: 安卓listView实现多级列表