设计模式之不简单的工厂模式(三)

上两篇文章中,讲述了简单工厂以及工厂方法模式,在此就不做赘述了,本篇重点讲述抽象工厂模式;

抽象工厂模式(Abstract Factory Pattern)提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。抽象工厂模式有四种角色,分别为:抽象工厂、具体工厂、抽象产品和具体产品,抽象工厂模式的类图如下:

通过上述类图可以很清楚的观察出各个角色之间的关系,产品系列里面有AbstractProductA和AbstractProductB两种类型,工厂系列里面有AbstractFactory一种工厂类型,该工厂有两个实现类,每个实现类均可产生产品A和产品B,下面写一个小例子看一下:

抽象产品及实现类

public interface AbstractProductA {
	
	public void methodA1();

	public void methodA2();
}
public class ProductA1 implements AbstractProductA {

	@Override
	public void methodA1() {
		System.out.println("产品A等级为1的methodA1()");
	}

	@Override
	public void methodA2() {
		System.out.println("产品A等级为1的methodA2()");
	}

}
public class ProductA2 implements AbstractProductA {

	@Override
	public void methodA1() {
		System.out.println("产品A等级为2的methodA1()");
	}

	@Override
	public void methodA2() {
		System.out.println("产品A等级为2的methodA1()");
	}

}
public interface AbstractProductB {
	public void methodB1();

	public void methodB2();
}
public class ProductB1 implements AbstractProductB {

	@Override
	public void methodB1() {
		// TODO Auto-generated method stub
		System.out.println("产品B等级为1的methodB1()");
	}
	
	@Override
	public void methodB2() {
		System.out.println("产品B等级为1的methodB2()");
	}
}
public class ProductB2 implements AbstractProductB {

	@Override
	public void methodB1() {
		// TODO Auto-generated method stub
		System.out.println("产品B等级为2的methodB1()");
	}
	
	@Override
	public void methodB2() {
		System.out.println("产品B等级为2的methodB2()");
	}
}
抽象工厂及其实现类

public interface AbstractFactory {

	public AbstractProductA createPruductA();

	public AbstractProductB createPruductB();
}
public class ConcreteFactory1 implements AbstractFactory {

	@Override
	public AbstractProductA createPruductA() {
		// TODO Auto-generated method stub
		return new ProductA1();
	}

	@Override
	public AbstractProductB createPruductB() {
		// TODO Auto-generated method stub
		return new ProductB1();
	}
}
public class ConcreteFactory2 implements AbstractFactory {

	@Override
	public AbstractProductA createPruductA() {
		// TODO Auto-generated method stub
		return new ProductA2();
	}

	@Override
	public AbstractProductB createPruductB() {
		// TODO Auto-generated method stub
		return new ProductB2();
	}

}
抽象工厂模式提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类,抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么,抽象工厂的任务就是定义一个负责负责创建一组产品的接口。这个接口内的每个方法创建一个具体产品,同时我们可以利用实现抽象工厂的子类提供这些具体的做法,好的,工厂模式的三种例子就介绍到这!


猜你喜欢

转载自blog.csdn.net/yu102655/article/details/52597219