【学习笔记】创建模式之抽象工厂模式

之前工厂模式说到不明白工厂模式与简单工厂的区别。后来想到,简单工厂,每当添加一个具体产品时,需要在工厂中进行判断修改;而工厂方法中,将工厂进行抽象,对产品进行细致的生产,即要生产某个具体产品时,需要对应的具体工厂,添加产品时,需要添加一个新的对应的工厂类以及对应的具体产品类。
说起来有点绕,但联系上抽象工厂模式,或许能稍微理解。

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

也就是说,抽象工厂模式中,创建的产品不再是一种产品了,而是多种产品(类族)了。
好比一个集团下有两个品牌产品A、B,每个品牌都有一系列的产品A1、A2、…,B1、B2、…尽管产品不是同种类型,但是营销模式下是一致的,都分为各种风格1、2…这些产品生产方式就是通过1工厂来生产1风格产品,2工厂来生产2风格产品…
这样,每次要生产新的一个风格产品时,只需要新建一个对应工厂即可;
同样缺点很明显,当要添加一个新品牌时,需要在各个工厂实现修改。

//超级工厂,定义生产什么品牌产品
public interface AbstractFactory {
	Product_A createA();
	Product_B createB();
}
//A品牌产品,品牌产品接口(同类族产品)
public interface Product_A {
	void display();
}
//B品牌产品,AB两产品类族不同(如键盘和鼠标)
public interface Product_B {
	void display();
}
//大众风格工厂,每个工厂都能生产所有的品牌产品
public class BigFactory implements AbstractFactory{

	@Override
	public Product_A createA() {
		return new Pro_Big_A();
	}

	@Override
	public Product_B createB() {
		return new Pro_Big_B();
	}
}
//小众风格产品
public class SmallFactory implements AbstractFactory{

	@Override
	public Product_A createA() {
		return new Pro_Small_A();
	}

	@Override
	public Product_B createB() {
		return new Pro_Small_B();
	}
}
//具体产品,如雷蛇键盘
public class Pro_Big_A implements Product_A{

	@Override
	public void display() {
		System.out.println("大A产品");
	}
}
//雷蛇鼠标
public class Pro_Big_B implements Product_B{

	@Override
	public void display() {
		System.out.println("大B产品");
	}
}
//牧人马键盘
public class Pro_Small_A implements Product_A{

	@Override
	public void display() {
		System.out.println("小A产品");
	}
}
//牧人马鼠标
public class Pro_Small_B implements Product_B{

	@Override
	public void display() {
		System.out.println("小B产品");
	}
}

在这里插入图片描述

假如以上是一个键鼠例子,每个工厂就是一个品牌工厂,雷蛇公司能生产雷蛇键鼠,牧人马公司也能生产牧人马牌子的键鼠。如果要添加一个罗技公司牌子的键鼠,只需要添加对应的工厂即可。但是假设这几家公司要添加一个产品如生产雷蛇品牌的耳机,这时候修改起来,麻烦程度可想而知了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值