抽象工厂模式

简介

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

抽象工厂模式是基于工厂模式的,工厂模式要求具体产品和具体工厂一一对应,并且,每一个工厂只能创建一大类产品,抽象工厂打破了这一关系,即某一个具体工厂可以生产多个不同类的产品,如下:
在这里插入图片描述因此,工厂模式和简单工厂模式的关系可以概括为,工厂模式能生产多类产品就变成了抽象工厂模式,抽象工厂模式如果只能生产一类产品,那就变成了工厂模式。

类图

在这里插入图片描述这个类图和工厂模式的类图最大的区别就是新增加了一类产品,其他都一样。

代码实现

示例:狼和狮子是食肉动物,角马和野牛是食草动物,非洲有角马和狮子,美洲有野牛和狼,通过非洲工厂生产角马和狮子,通过美洲工厂生产野牛和狼。

首先是食草动物类:

//食草动物
public interface Herbivore {
	public void print();
}
//角马
class Wildebeest implements Herbivore{
	@Override
	public void print() {
		// TODO Auto-generated method stub
		System.out.println("我是一头角马,我吃草!");
	}
}
//野牛
class Bison implements Herbivore{
	@Override
	public void print() {
		// TODO Auto-generated method stub
		System.out.println("我是一头野牛,我吃草!");
	}
}

然后是食肉动物:

//食肉动物
public interface Carnivores {
	public void print();
}
//狼
class Wolf implements Carnivores{
	@Override
	public void print() {
		// TODO Auto-generated method stub
		System.out.println("我是一头狼,我吃肉!");
	}
}
//狮子
class Lion implements Carnivores{
	@Override
	public void print() {
		// TODO Auto-generated method stub
		System.out.println("我是一头狮子,我吃肉!");
	}
}

然后是工厂类,分别有非洲工厂和美洲工厂:

public interface Factory {
	public Herbivore createH();
	public Carnivores createC();
}

//非洲工厂
class AfricaFactory implements Factory{
	@Override
	public Herbivore createH() {
		return new Wildebeest();
	}
	@Override
	public Carnivores createC() {
		return new Lion();
	}
}

//美洲工厂
class AmericaFactory implements Factory{
	@Override
	public Herbivore createH() {
		return new Bison();
	}
	@Override
	public Carnivores createC() {
		return new Wolf();
	}
}

最后是客户端类,发出需求:

public class Client {
	public static void main(String[] args) {
		System.out.println("我需要美洲的动物:");
		//需要美洲的动物
		AmericaFactory americaFactory = new AmericaFactory();
		Bison bison = (Bison) americaFactory.createH();
		bison.print();
		Wolf wolf = (Wolf) americaFactory.createC();
		wolf.print();
		System.out.println("\n我需要非洲的动物:");
		//需要非洲的动物
		AfricaFactory africaFactory = new AfricaFactory();
		Wildebeest wildebeest = (Wildebeest) africaFactory.createH();
		wildebeest.print();
		Lion lion = (Lion) africaFactory.createC();
		lion.print();
	}
}

结果:
在这里插入图片描述抽象工厂模式和简单工厂模式相似,也不符合开闭原则,新增产品时需要修改核心工厂类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值