Java_抽象工厂模式_实例

本文介绍了抽象工厂模式的概念、作用和应用场景,并通过海尔与海信产品为例展示了其实现过程,强调了该模式在实现产品族和增强程序扩展性方面的优势,符合开闭原则。
摘要由CSDN通过智能技术生成

一、抽象工厂

1. 提供一个创建产品族的接口,每个子类可以生产一系列相关的产品

2.可以在类的内部对产品族中相关联的多等级产品进行共同管理。不必专门引入多个新的类来进行管理

3.当需要产品族时,抽象工厂可以保证客户管始终只使用同一个产品的产品组

4.增强了程序的可扩展性,当增加一个新的产品族的时候,不需要修改源代码。满足开闭原则。

PS:开闭原则:对扩展开放,对修改关闭,即在不修改一个软件实体的基础上去扩展其功能。

能够降低维护带来的新风险;软件系统在拥有适应性和灵活性的同时具备较好的稳定性。

二、应用场景

  抽象工厂模式是工厂方法模式的升级版,工厂方法模式只生产一个等级的产品,而抽象工厂模式可以生产多个等级的产品。系统中有多个产品族,但每次只使用其中的某一族产品。

  如电器工厂中的电视机、洗衣机、空调等。如有人只喜欢穿某一个牌子的衣服鞋子等。

 三、实例展示

package _001_抽象工厂;

/*
 * 海尔产品
 */
abstract class Haier{
	public abstract void methodA();
}
class HaierTV extends Haier{

	@Override
	public void methodA() {
		System.out.println("海尔电视机播放中……");		
	}
	
}
class Haierair extends Haier{

	@Override
	public void methodA() {
		System.out.println("海尔空调制冷中……");
	}
	
}
/*
 * 海信产品
 */
abstract class Haixin{
	public abstract void methodB();
}
/*
 * 海信电视
 */
class HaixinTV extends Haixin{

	@Override
	public void methodB() {
		System.out.println("海信电视机播放中……");
	}
	
}
/*
 * 海信空调
 */
class Haixinair extends Haixin{

	@Override
	public void methodB() {
		System.out.println("海信空调制冷中……");
	}
}
/*
 * 抽象工厂
 */
abstract class AbstractFactory{
	public abstract Haier createProductA();
	public abstract Haixin createProductB();
}

class AirFactory extends AbstractFactory{

	@Override
	public Haier createProductA() {
		System.out.println("海尔工厂生产海尔空调");
		return new Haierair();
	}

	@Override
	public Haixin createProductB() {
		System.out.println("海信工厂生产海信空调");
		return new Haixinair();
	}
	
}
class TVfactory extends AbstractFactory{

	@Override
	public Haier createProductA() {
		System.out.println("海尔工厂生产海尔电视机");
		return new HaierTV();
	}

	@Override
	public Haixin createProductB() {
		System.out.println("海信工厂生产海信电视机");
		return new HaixinTV();
	}
	
}
class Main_AbstractFactory {

	public static void main(String[] args) {
		AbstractFactory factory = new AirFactory();
		Haier productA = factory.createProductA();
		productA.methodA();
		System.out.println("===========");
		Haixin productB = factory.createProductB();
		productB.methodB();
	}

}

四、运行结果

d159d1f0d829415e8f04cbf345ab32c7.png

 代码可能有些混乱,欢迎各位大佬指正

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值