抽象工厂模式-Abstract Factory Pattern

基本概念

抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

结构图


上图摘自《大话设计模式》

应用场景

一个系统的产品有多于一个的产品族,同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来,系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。

源码示例

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手机


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值