UML關(guān)系簡(jiǎn)單介紹
UML簡(jiǎn)單使用的介紹
創(chuàng)建型設(shè)計(jì)模式
Android設(shè)計(jì)模式-單例模式
Android設(shè)計(jì)模式-工廠模式
Android設(shè)計(jì)模式-抽象工廠模式
Android設(shè)計(jì)模式-建造者模式
Android設(shè)計(jì)模式-原型模式
結(jié)構(gòu)型設(shè)計(jì)模式
Android設(shè)計(jì)模式-代理模式
Android設(shè)計(jì)模式-裝飾模式
Android設(shè)計(jì)模式-適配器模式
Android設(shè)計(jì)模式-組合模式
Android設(shè)計(jì)模式-門面模式
Android設(shè)計(jì)模式-橋接模式
Android設(shè)計(jì)模式-享元模式
行為型設(shè)計(jì)模式
Android設(shè)計(jì)模式-策略模式
Android設(shè)計(jì)模式-命令模式
Android設(shè)計(jì)模式-責(zé)任鏈模式
Android設(shè)計(jì)模式-模版方法模式
Android設(shè)計(jì)模式-迭代器模式
Android設(shè)計(jì)模式-觀察者模式
Android設(shè)計(jì)模式-備忘錄模式
Android設(shè)計(jì)模式-中介者模式
Android設(shè)計(jì)模式-訪問者模式
Android設(shè)計(jì)模式-狀態(tài)模式
Android設(shè)計(jì)模式-解釋器模式
1.定義
為創(chuàng)建一組相關(guān)或者相互依賴的對(duì)象提供一個(gè)接口柿究,而且無需指定他們的具體實(shí)現(xiàn)類
2.抽象工廠模式UML圖
角色介紹
- client 客戶端,調(diào)用場(chǎng)景
- AbstractFactory 抽象工廠類
- ConcreteFactory 具體工廠類
- AbstractProduct 抽象產(chǎn)品類
- ConcreteProduct 具體產(chǎn)品類
3.實(shí)現(xiàn)
舉例說明:一個(gè)抽象工廠,有兩個(gè)具體的實(shí)現(xiàn),分別為Factory1和Factory2覆积,分別生產(chǎn)數(shù)字為1和為2的產(chǎn)品
3.1抽象工程類
public abstract class AbstractFactory {
public abstract AbstractProductA createA();
public abstract AbstractProductB createB();
}
3.2具體工廠類
public class Factory1 extends AbstractFactory {
//1工廠生產(chǎn)產(chǎn)品為1的產(chǎn)品
@Override
public AbstractProductA createA() {
return new ProductA1();
}
//1工廠生產(chǎn)產(chǎn)品為1的產(chǎn)品
@Override
public AbstractProductB createB() {
return new ProductB1();
}
}
public class Factory2 extends AbstractFactory {
//2工廠生產(chǎn)產(chǎn)品為2的產(chǎn)品
@Override
public AbstractProductA createA() {
return new ProductA2();
}
//2工廠生產(chǎn)產(chǎn)品為2的產(chǎn)品
@Override
public AbstractProductB createB() {
return new ProductB2();
}
}
3.3抽象產(chǎn)品類
public abstract class AbstractProductA {
//產(chǎn)品共有的方法
public void a1(){
}
//每個(gè)產(chǎn)品不同的實(shí)現(xiàn)
public abstract void a2();
}
public abstract class AbstractProductB {
//產(chǎn)品共有的方法
public void b1(){
}
//每個(gè)產(chǎn)品不同的實(shí)現(xiàn)
public abstract void b2();
}
3.4 具體產(chǎn)品
public class ProductA1 extends AbstractProductA {
@Override
public void a2() {
System.out.println("我是產(chǎn)品A1");
}
}
public class ProductA2 extends AbstractProductA {
@Override
public void a2() {
System.out.println("我是產(chǎn)品A2");
}
}
public class ProductB1 extends AbstractProductB {
@Override
public void b2() {
System.out.println("我是產(chǎn)品B1");
}
}
public class ProductB2 extends AbstractProductB {
@Override
public void b2() {
System.out.println("我是產(chǎn)品B2");
}
}
3.5場(chǎng)景調(diào)用
public class MyClass {
public static void main(String args[]) {
AbstractFactory factory1=new Factory1();
AbstractFactory factory2=new Factory2();
AbstractProductA a1=factory1.createA();
AbstractProductA a2=factory2.createA();
AbstractProductB b1=factory1.createB();
AbstractProductB b2=factory2.createB();
a1.a2();
a2.a2();
b1.b2();
b2.b2();
}
}
//打印結(jié)果
我是產(chǎn)品A1
我是產(chǎn)品A2
我是產(chǎn)品B1
我是產(chǎn)品B2
4.總結(jié)
- 抽象工廠模式有良好的封裝性,但是擴(kuò)展性卻很差仇冯,如以上的例子柠掂,如果要增加一個(gè)C產(chǎn)品,那么抽象工廠和具體工廠都需要修改颗胡。但是如果只是增加一個(gè)產(chǎn)品等級(jí)3,那么只需要增加一個(gè)具體工廠和產(chǎn)品類即可邓嘹,也就是說橫向擴(kuò)展容易,縱向擴(kuò)展難崭篡,但是橫向縱向的設(shè)定咱扣,還是看自己設(shè)計(jì)了厅克,你完全可以將產(chǎn)品等級(jí)設(shè)計(jì)為縱向,產(chǎn)品類型設(shè)計(jì)為橫向痘拆,結(jié)果也就反了過來,所以具體設(shè)計(jì)的時(shí)候,要想清楚了。
- 使用場(chǎng)景:一個(gè)對(duì)象族(或是一組沒有任何關(guān)系的對(duì)象)都有相同的約束,則可以使用抽象工廠模式晾捏。
- 工廠模式與抽象工廠模式的區(qū)別箫锤,簡(jiǎn)單來說,就相當(dāng)于工廠模式是只有一條生產(chǎn)線的工廠塑崖,而抽象工廠模式是具有多條生產(chǎn)線的工廠蝉稳。