Spring学习必备知识之抽象工厂模式

*工厂模式的作用是用于创建对象

回顾工厂方法模式:针对不同的产品提供不同的工厂。这样当有多个产品时就需要多个工厂。所以希望能一个工厂提供多种产品对象而不是单一生产产品,这就引出了抽象工厂模式。

通过例子来说明:

有两个工厂,一个工厂A生产2厢的车,分2.0排量和3.0排量两种;工厂B生产3厢的车,分2.0排量和3.0排量两种

抽象工厂模式有两个概念:产品等级结构和产品族,具体参考这篇博文

在上面的例子中,我们可以:

定义两个个抽象产品分别为2.0排量的车和3.0排量的车,然后用具体产品类去实现它们

抽象产品2.0排量的车:

package com.example;

public interface Iproduct1 {
	//一个抽象产品
	//2.0排量的车
	public void display();

}

具体实现:

public class ProductA1 implements Iproduct1 {

	@Override
	public void display() {
		/*
		 * 这是一个具体产品
		 * 生产2.0排量的车
		 */
		System.out.println("我是2厢车厂2.0排量的车");

	}

}
package com.example;

public class ProductA2 implements Iproduct1 {

	@Override
	public void display() {
		System.out.println("我是3厢车厂2.0排量的车");
	}

}

抽象产品3.0排量的车

public interface Iproduct2 {
	//一个抽象产品
	//3.0排量的车
	public void display();
}

具体实现

public class ProductB1 implements Iproduct2 {

	@Override
	public void display() {
		/*
		 * 这是一个具体产品
		 * 生产3.0排量的车
		 */
		System.out.println("我是2厢车厂3.0排量的车");

	}

}

public class ProductB2 implements Iproduct2 {

	@Override
	public void display() {
		/*
		 * 这是一个具体产品
		 * 生产3.0排量的车
		 */
		System.out.println("我是3厢车厂3.0排量的车");
	}

}

接下来定义抽象工厂:

public interface IFactory {
	//一个抽象工厂
	public Iproduct1 createCar2();
	public Iproduct2 createCar3();
}

具体工厂1:

public class FactoryA implements IFactory {
	/*
	 * 2厢车的具体工厂
	 */
	@Override
	public Iproduct1 createCar2() {
		
		return new ProductA1();
	}

	@Override
	public Iproduct2 createCar3() {
		
		return new ProductB1();
	}

}

具体工厂2:

public class FactoryB implements IFactory {


	@Override
	public Iproduct1 createCar2() {
		return new ProductA2();
	}


	@Override
	public Iproduct2 createCar3() {		
		return new ProductB2();
	}


}

这样一个工厂就可以提供两个具体产品,与工厂方法模式的区别就出来了!

接下来我们用客户端来测试:比如我们想创建一个3厢3.0排量的车

public class Client {
	public static void main(String[] args){
		IFactory factory = new FactoryB();
		factory.createCar3().display();
	}
}

运行结果:


我参考学习的地址:设计模式


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值