一 产品等级和产品族
产品等级:Iphone4,Iphone5,Iphone6都是Iphone系列。属于同一产品等级(产品等级结构即产品的继承结构)
产品族:XiaoMi4 和 IPhone4 是同一个产品族(产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品)
二 抽象工厂模式与工厂方法模式的区别
抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构
例如
用抽象工厂生产Iphone 和 XiaoMi 两个品牌的手机(两个产品等级)
代码如下
手机接口
package factory;/** * Created by dingshuangkun on 2018/1/26. */public interface Phone { void producePhone();}
Iphone 手机接口
package factory;/** * Created by dingshuangkun on 2018/1/26. */public interface Iphone extends Phone { void produceIphone(); @Override default void producePhone(){ produceIphone(); }}
package factory.impl;import factory.Iphone;/** * Created by dingshuangkun on 2018/1/26. */public class Iphone4 implements Iphone { @Override public void produceIphone() { System.out.println("------生产Iphone4--------"); }}
package factory.impl;import factory.Iphone;/** * Created by dingshuangkun on 2018/1/26. */public class Iphone5 implements Iphone { @Override public void produceIphone() { System.out.println("------生产Iphone5--------"); }}
小米手机接口
package factory;/** * Created by dingshuangkun on 2018/1/26. */public interface XiaoMi extends Phone{ void produceXiaoMi(); @Override default void producePhone(){ produceXiaoMi(); }}
package factory.impl;import factory.XiaoMi;/** * Created by dingshuangkun on 2018/1/26. */public class XiaoMi4 implements XiaoMi{ @Override public void produceXiaoMi() { System.out.println("-------生产小米4---------"); }}
package factory.impl;import factory.XiaoMi;/** * Created by dingshuangkun on 2018/1/26. */public class XiaoMi5 implements XiaoMi { @Override public void produceXiaoMi() { System.out.println("------------生产小米5----------"); }}
Iphone工厂
package factory.impl;import factory.Creator;import factory.Iphone;import factory.Phone;/** * Created by dingshuangkun on 2018/1/26. */public class IPhoneFactory implements Creator { @Override publicT creatorProduct(Class c) { Iphone iphone = null; try { iphone =(Iphone)c.newInstance(); }catch (Exception e){ e.printStackTrace(); } return (T)iphone; }}
小米工厂
package factory.impl;import factory.Creator;import factory.Iphone;import factory.Phone;import factory.XiaoMi;/** * Created by dingshuangkun on 2018/1/26. */public class XiaoMiFactory implements Creator { @Override publicT creatorProduct(Class c) { XiaoMi xiaoMi = null; try { xiaoMi =(XiaoMi)c.newInstance(); }catch (Exception e){ e.printStackTrace(); } return (T)xiaoMi; }}
客户端
package factory;import factory.impl.*;/** * Created by dingshuangkun on 2018/1/26. */public class Client { public static void main(String[] args) { Creator xiaomiFactory = new XiaoMiFactory(); Phone xiaoMi4 = xiaomiFactory.creatorProduct(XiaoMi4.class); Phone xiaoMi5 = xiaomiFactory.creatorProduct(XiaoMi5.class); Creator iphoneFactory = new IPhoneFactory(); Phone iphone4 = iphoneFactory.creatorProduct(Iphone4.class); Phone iphone5 = iphoneFactory.creatorProduct(Iphone5.class); xiaoMi4.producePhone(); xiaoMi5.producePhone(); iphone4.producePhone(); iphone5.producePhone(); }}
运行结果
-------生产小米4---------
------------生产小米5---------- ------生产Iphone4-------- ------生产Iphone5--------Process finished with exit code 0