抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具有1般性的1種形態(tài)。該模式面對的是多個產(chǎn)品等級結(jié)構(gòu)的系統(tǒng)設(shè)計(jì)。工廠方法模式針對的是1個產(chǎn)品等級結(jié)構(gòu);而抽象工廠模式則需要面對多個產(chǎn)品等級結(jié)構(gòu)。
1個產(chǎn)品等級結(jié)構(gòu)圖
多個產(chǎn)品等級結(jié)構(gòu)圖
產(chǎn)品族是指位于不同產(chǎn)品等級結(jié)構(gòu)中,功能相干聯(lián)的產(chǎn)品組成的家族。
用相圖的情勢表現(xiàn)生產(chǎn)品族與產(chǎn)品等級結(jié)構(gòu)的關(guān)系
在抽象工廠模式中,每個產(chǎn)品族都有1個具體工廠,而每個具體工廠負(fù)責(zé)創(chuàng)建屬于同1個產(chǎn)品族,但是分屬于不同等級結(jié)構(gòu)的產(chǎn)品。
農(nóng)場公司要引進(jìn)塑料大棚的技術(shù),在大棚里種植熱帶和亞熱帶的水果和蔬菜。在這里水果和蔬菜就是兩個等級結(jié)構(gòu),而熱帶的水果和熱帶的蔬菜是1個產(chǎn)品族,亞熱帶的水果和亞熱帶的蔬菜又是1個產(chǎn)品族。
用類圖表示為
部份代碼實(shí)現(xiàn)
package com.designpattern.abstractfactory; /** * Created by Administrator on 2016/9/19. */ public interface Fruits { String getName(); void setName(String name); }
package com.designpattern.abstractfactory; /** * Created by Administrator on 2016/9/19. */ public interface Vegetables { String getName(); void setName(String name); }
package com.designpattern.abstractfactory; /** * Created by Administrator on 2016/9/19. */ public class SubtropicalFruit implements Fruits{ private String name; SubtropicalFruit(String name){ this.name = name; } public void setName(String name) { this.name = name; } public String getName() { return name; } }
package com.designpattern.abstractfactory; /** * Created by Administrator on 2016/9/19. */ public class SubtropicalVegetable implements Vegetables{ private String name; SubtropicalVegetable(String name){ this.name = name; } @Override public String getName() { return null; } @Override public void setName(String name) { this.name = name; } }
package com.designpattern.abstractfactory; /** * Created by Administrator on 2016/9/19. */ public class SubtropicalFactory implements IFatory{ public static Fruits createFruit(String name){ return new SubtropicalFruit(name); } public static Vegetables createVegetable(String name){ return new SubtropicalVegetable(name); } }
package com.designpattern.abstractfactory; /** * Created by Administrator on 2016/9/19. */ public class Client { public static void main(String args[]){ Fruits fruit = SubtropicalFactory.createFruit("香蕉"); System.out.println(fruit.getName()); } }