设计模式——抽象工厂模式(Abstract Factory Pattern)

一、模式定义

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。

简单来说,抽象工厂模式就是工厂模式的拓展,不同的是,抽象工厂模式能生产多种具有联系的产品对象,而工厂模式一个工厂只生产一种产品。

下面通过类图来分析具有联系的含义。

二、模式类图

在这里插入图片描述
从图中我们能看出工厂子类能同时生产产品A和产品B,这里想说的具有联系就是说,A和B可能是同一个产品公司旗下的产品,这就引申出产品等级结构概念

用打比方来解释产品等级结构的概念,比如说苹果和华为都能生产手机和平板电脑,即ProductA代表手机ConcreteProductA1代表苹果手机ConcreteProductA2代表华为手机ProductB代表平板电脑,那么手机和平板电脑就处在不同的等级结构。而ConcreteFactoryA也就代表苹果公司ConcreteFactoryB代表华为公司,如此一来,对抽象工厂模式也就进一步加深理解了。

三、模式代码

abstract class Factory{
	//这里是抽象工厂类
	abstract public ProductA createProductA();
	abstract public ProductB createProductB();
}

class ConcreteFactoryA extends Factory{
	//这里是具体工厂类
	public ProductA createProductA() { return new ConcreteProductA1();}
	public ProductB createProductB() { return new ConcreteProductB1();}
}
class ConcreteFactoryB extends Factory{
	public ProductA createProductA() { return new ConcreteProductA2();}
	public ProductB createProductB() { return new ConcreteProductB2();}
}

abstract class ProductA{
	//这里是抽象产品类A
	abstract public void Print();
}

class ConcreteProductA1 extends ProductA{
	//这里是具体产品类A1
	public void Print() { System.out.println("This is A1");}
}
class ConcreteProductA2 extends ProductA{
	public void Print() { System.out.println("This is A2");}
}

abstract class ProductB{
	//这里是抽象产品类B
	abstract public void Print();
}
class ConcreteProductB1 extends ProductB{
	//这里是具体产品类B1
	public void Print() {System.out.println("This is B1");}
}
class ConcreteProductB2 extends ProductB{
	public void Print() {System.out.println("This is B2");}
}

public class Main {
	public static void main(String[] args) {
		Factory A = new ConcreteFactoryA();
		Factory B = new ConcreteFactoryB();
		
		ProductA pA1 = A.createProductA();
		ProductB pB1 = A.createProductB();
		
		ProductA pA2 = B.createProductA();
		ProductB pB2 = B.createProductB();
		
		pA1.Print(); pA2.Print();
		pB1.Print(); pB2.Print();
	}
}

四、模式优缺点

1.优点:保证了客户始终使用的是一个产品族的对象(对于一些需要针对当前环境决定行为的软件来说是不错之选),符合开闭原则。
2.缺点:开闭原则的倾斜性(增加新产品族困难)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值