基本概念
抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
结构图
上图摘自《大话设计模式》
应用场景
一个系统的产品有多于一个的产品族,同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来,系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。
源码示例
1.创建电脑产品接口
package com.spook.abstractfactory; /** * 电脑产品接口 */ public interface Computer { public void produce(); }2.创建一个具体电脑实现类
package com.spook.abstractfactory; /** * 模拟具体电脑产品类 */ public class MacBookAir implements Computer { @Override public void produce() { // TODO Auto-generated method stub System.out.println("MacBookAir电脑"); } }3.创建另一个电脑实现类
package com.spook.abstractfactory; /** * 模拟具体电脑产品类 */ public class MacBookPro implements Computer { @Override public void produce() { // TODO Auto-generated method stub System.out.println("MacBookPro电脑"); } }
4.创建手机产品接口
package com.spook.abstractfactory; /** * 手机产品接口 */ public interface MobilePhone { public void produce(); }5.创建一个手机实现类
package com.spook.abstractfactory; /** * 模拟具体手机产品类 */ public class IPhone6 implements MobilePhone{ @Override public void produce() { // TODO Auto-generated method stub System.out.println("iPhone6 手机"); } }6.创建另一个手机实现类
package com.spook.abstractfactory; /** * 模拟具体手机产品类 */ public class IPhone6plus implements MobilePhone { @Override public void produce() { // TODO Auto-generated method stub System.out.println("iPhone6 Plus手机"); } }7.创建一个工厂接口
package com.spook.abstractfactory; /** * 模拟苹果公司生产工厂,假定有两种产品:电脑和手机 */ public interface AppleFactory { public Computer createComputer(); public MobilePhone createPhone(); }8.创建台电工厂,实现工厂接口
package com.spook.abstractfactory; /** * 台电工厂,假定能够生产MacBookAir电脑和iPhone6 */ public class TeclastFactory implements AppleFactory { @Override public Computer createComputer() { // TODO Auto-generated method stub return new MacBookAir(); } @Override public MobilePhone createPhone() { // TODO Auto-generated method stub return new IPhone6(); } }9.创建富士康工厂,实现工厂接口
package com.spook.abstractfactory; /** * 富士康工厂,假定能够生产MacBookPro电脑和iPhone6 plus */ public class FoxconnFactory implements AppleFactory { @Override public Computer createComputer() { // TODO Auto-generated method stub return new MacBookPro(); } @Override public MobilePhone createPhone() { // TODO Auto-generated method stub return new IPhone6plus(); } }10.测试类
package com.spook.abstractfactory; /** * 测试类 */ public class Test { public static void main(String[] args) { // TODO Auto-generated method stub AppleFactory teclastFactory = new TeclastFactory(); System.out.println("台电工厂生产的产品如下:"); Computer computer = teclastFactory.createComputer(); computer.produce(); MobilePhone phone = teclastFactory.createPhone(); phone.produce(); AppleFactory foxcoonFactory = new FoxconnFactory(); System.out.println("------------------"); System.out.println("富士康工厂生产的产品如下:"); computer = foxcoonFactory.createComputer(); computer.produce(); phone = foxcoonFactory.createPhone(); phone.produce(); } }运行测试类输出如下内容:
台电工厂生产的产品如下: MacBookAir电脑 iPhone6 手机 ------------------ 富士康工厂生产的产品如下: MacBookPro电脑 iPhone6 Plus手机