java 抽象工厂 类图_Java设计模式——抽象工厂模式
抽象工廠模式(Abstract Factory Pattern)是屬于創(chuàng)建型的設(shè)計(jì)模式,意在創(chuàng)造一個(gè)抽象的工廠,而后再由實(shí)例化出的具體的工廠來(lái)進(jìn)行生產(chǎn)。
何時(shí)使用:系統(tǒng)的產(chǎn)品有多于一個(gè)的產(chǎn)品族,而系統(tǒng)只消費(fèi)其中某一族的產(chǎn)品。
應(yīng)用實(shí)例:工作了,為了參加一些聚會(huì),肯定有兩套或多套衣服吧,比如說(shuō)有商務(wù)裝(成套,一系列具體產(chǎn)品)、時(shí)尚裝(成套,一系列具體產(chǎn)品),甚至對(duì)于一個(gè)家庭來(lái)說(shuō),可能有商務(wù)女裝、商務(wù)男裝、時(shí)尚女裝、時(shí)尚男裝,這些也都是成套的,即一系列具體產(chǎn)品。假設(shè)一種情況(現(xiàn)實(shí)中是不存在的,要不然,沒法進(jìn)入共產(chǎn)主義了,但有利于說(shuō)明抽象工廠模式),在您的家中,某一個(gè)衣柜(具體工廠)只能存放某一種這樣的衣服(成套,一系列具體產(chǎn)品),每次拿這種成套的衣服時(shí)也自然要從這個(gè)衣柜中取出了。用 OO 的思想去理解,所有的衣柜(具體工廠)都是衣柜類的(抽象工廠)某一個(gè),而每一件成套的衣服又包括具體的上衣(某一具體產(chǎn)品),褲子(某一具體產(chǎn)品),這些具體的上衣其實(shí)也都是上衣(抽象產(chǎn)品),具體的褲子也都是褲子(另一個(gè)抽象產(chǎn)品)。
優(yōu)點(diǎn):當(dāng)一個(gè)產(chǎn)品族中的多個(gè)對(duì)象被設(shè)計(jì)成一起工作時(shí),它能保證客戶端始終只使用同一個(gè)產(chǎn)品族中的對(duì)象。
缺點(diǎn):產(chǎn)品族擴(kuò)展非常困難,要增加一個(gè)系列的某一產(chǎn)品,既要在抽象的 Creator 里加代碼,又要在具體的里面加代碼。
使用場(chǎng)景:?1、QQ 換皮膚,一整套一起換。 2、生成不同操作系統(tǒng)的程序。
注意事項(xiàng):產(chǎn)品族難擴(kuò)展,產(chǎn)品等級(jí)易擴(kuò)展。
代碼舉例:
一、類圖:
二、代碼:
1.創(chuàng)建顏色系產(chǎn)品接口
public interfacecolor {public voiddraw();
}
2.創(chuàng)建顏色系具體產(chǎn)品
public class Red implementscolor {
@Overridepublic voiddraw() {
System.out.println("是紅色的");
}
}
public class Blue implementscolor {
@Overridepublic voiddraw() {
System.out.println("是藍(lán)色的");
}
}
3.創(chuàng)建形狀系產(chǎn)品接口
public interfaceShape {public voiddraw();
}
4.創(chuàng)建形狀系具體產(chǎn)品
public class Rantage implementsShape {
@Overridepublic voiddraw() {
System.out.println("圖案是矩形");
}
}
public class Circle implementsShape {
@Overridepublic voiddraw() {
System.out.println("圖案是圓形");
}
}
5.創(chuàng)建抽象工廠,用以為具體工廠向上轉(zhuǎn)型
public abstract classAbstractFactory {public abstractShape getShape(String shaptype);public abstractcolor getColor(String colortype);
}
6.創(chuàng)建具體的顏色工廠和形狀工廠,都繼承自抽象工廠
public class Color_Factory extendsAbstractFactory {
@OverridepublicShape getShape(String shaptype) {return null;
}
@Overridepubliccolor getColor(String colortype) {if (colortype == null) {return null;
}if(colortype.equalsIgnoreCase("Red")){return newRed();
}if(colortype.equalsIgnoreCase("Blue")){return newBlue();
}return null;
}
}
public class Shape_Factory extendsAbstractFactory {
@OverridepublicShape getShape(String shaptype) {if(shaptype == null){return null;
}if(shaptype.equalsIgnoreCase("Circle")){return newCircle();
}if(shaptype.equalsIgnoreCase("Rantage")){return newRantage();
}return null;
}
@Overridepubliccolor getColor(String colortype) {return null;
}
}
7.創(chuàng)建工廠制造者,用以生成具體的工廠
public classFactoryProducer {publicAbstractFactory getFactory(String factoryType){if(factoryType == null){return null;
}if (factoryType.equalsIgnoreCase("color_factory")) {return newColor_Factory();
}if (factoryType.equalsIgnoreCase("shape_factory")) {return newShape_Factory();
}return null;
}
}
8.用戶
public classUser {public static voidmain(String[] args) {
FactoryProducer factoryProducer= newFactoryProducer();
factoryProducer.getFactory("color_factory").getColor("Red").draw();
factoryProducer.getFactory("shape_factory").getShape("circle").draw();
}
}
總結(jié)
以上是生活随笔為你收集整理的java 抽象工厂 类图_Java设计模式——抽象工厂模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 代码高亮截图神器
- 下一篇: 运行命令、文件扩展名速查、Windows