抽象工厂模式

1. 概述

抽象工厂模式相对于工厂方法模式来说,就是工厂方法模式是针对一个产品系列的,而抽象工厂模式是针对多个产品系列的,即工厂方法模式是一个产品系列一个工厂类,而抽象工厂模式是多个产品系列一个工厂类。在抽象工厂模式中,客户端不再负责对象的创建,而是把这个责任丢给了具体的工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。并且当一系列相互关联的产品被设计到一个工厂类里后,客户端的调用将会变得非常简单,而且,如果要更换这一系列的产品,则只需要更换一个工厂类即可。

如果客户端需要创建一些产品结构,而这些产品结构又分别属于不同的产品类别,则可以使用抽象工厂模式,抽象工厂模式中抽象工厂类负责定义创建对象的接口,具体这一系列对象的创建工作由实现抽象工厂的具体工厂类来完成。

2. 角色

抽象工厂模式中存在四种角色,分别是抽象工厂角色,具体工厂角色,抽象产品角色,具体产品角色

  • 抽象工厂角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
  • 具体工厂角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
  • 抽象产品角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
  • 具体产品角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。

3. 举例

在这里插入图片描述
鞋子(Shoes):

  1. NikeShoes
  2. AdidasShoes

衣服(Clothes):

  1. NikeClothes
  2. AdidasClothes

裤子(Pants):

  1. NikePants
  2. AdidasPants

抽象产品接口

鞋子接口:
public interface Shoes{}
衣服接口:
public  interface Clothes{}
裤子接口:
public interface Pants{}

具体产品接口

鞋子
public class NikeShoes implement Shoes{
	public NikeShoes(){
		system.out.println("耐克的鞋子...")}
}
public class AdidasShoes implement Shoes{
	public AdidasShoes(){
		system.out.println("阿迪达斯的鞋子...")}
}
衣服
public class NikeClothes implement Shoes{
	public NikeClothes(){
		system.out.println("耐克的衣服...")}
}
public class AdidasShoesimplement Shoes{
	public AdidasShoes(){
		system.out.println("阿迪达斯的衣服...")}
}
裤子
public class NikePants implement Shoes{
	public NikePants(){
		system.out.println("耐克的裤子...")}
}
public class AdidasPants implement Shoes{
	public AdidasPants(){
		system.out.println("阿迪达斯的裤子...")}
}

工厂行为接口

public interface Factory{
	Shoes createShoes();
	Clothes createClothes();
	Pants createPants();
}

具体工厂类
耐克工厂

public class NikeFactory implements Factory{
	@Override
	public Shoes createShoes(){
		return new NikeShoes();
	}
	@Override
	public Clothes createClothes(){
		return new NikeClothes();
	}
	@Override
	public Pants createPants(){
		return new NikePants();
	}
}
阿迪达斯工厂
public class AdidasFactory implements Factory{
	@Override
	public Shoes createShoes(){
		return new AdidasShoes();
	}
	@Override
	public Clothes createClothes(){
		return new AdidasClothes();
	}
	@Override
	public Pants createPants(){
		return new AdidasPants();
	}
}

4. 功能

抽象工厂模式的一个主要功能是它能够隔离要生成的具体产品类, 由于这些类的实际类名部被隐藏在工厂内部,因此客户端根本不需要关心如何对它们进行实例化的细节。每种设计模式都是针对特定问题的解决方案,而抽象工厂模式面临的问题则是当涉及到有多个产品等级结构寸,如何更好地进行软件体系结构的设计。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值