创建型模式之抽象工厂模式(AbstractFactory)

抽象工厂模式:

         提供了一个接口,用于创建相关或依赖对象家族,而不需要明确指定具体类。在实际的项目中,由于需求的变化,需要创建多个对象,此时,如何防止过多的创建方法,以避免客户程序和服务端的紧耦合,这就需要运用抽象方法来解决,解决的方法时创建接口或者抽象类,由子类去继承或实现。抽象方法

        模式主要由抽象工厂、具体工厂、产品族构成。

此类模式在实际项目开发过程中,由于需求的变化,需要创建多个对象。此时,如何防止过多的创建方法,以避免客户程序和服务端的紧耦合,这就需要运用抽象方法模式进行解决,具体操作可以通过创建接口和抽象类,有具体类去实现或者继承。

优势:
    可以分离具体类的生成,无需了解何种对象被创建。因此,如需变换具体工厂则更简单。
    在一个完整的系统中,使各个模块之间显得尽可能的独立存在。
    使客户端调用产品族的同一个对象,无需改变。
 时机:
    当独立的软件系统需要单独进行产品的创建和展示上。
    当独立的软件系统由产品树套餐中单个进行配置上。
    联合使用相关对象时,
    需要建立一个项目框架的通用库时。

抽象工厂与工厂方法:
    不同之处主要体现在
    抽象产品类:
            抽象工厂类---多个抽象类,每个抽象产品类都可以派生出多个具体产品类。
            工厂方法-----一个抽象类,可以派生出多个具体产品。
    具体产品类:
            抽象工厂类----每个具体工厂类可以派生出多个具体产品类的实例。
            工厂方法------每个具体工厂类只能派生出一个具体产品类的实例。
    抽象工厂类和具体工厂类都是一样的。

与spring:
    Ioc作为spring的核心部分,由于其既可以管理各类普通bean,也可以管理工厂的实例。那么,在软件平台设计时,只需使客户端程序分离与其所调用对象的实现类与
    具体工厂类。既可以实现抽象工厂模式,也就是说,Ioc容器仅需要通过将客户端代码与抽象工厂进行耦合,就体现了抽象工厂模式的相关原理。

实例:当今社会,每个人都需要学习,男生和女生一样平等。

抽象工厂----人类工厂接口

<span style="font-size:18px;">public interface IHumanFactory
{
   IStudy getStudy();
   IMakeMoney getMakeMoney();

}</span>

具体工厂----女生学习赚钱类

<span style="font-size:18px;">public class GirlFactory implements IHumanFactory
{
  public IStudy getStudy()
  {
		return new GirlStudy();
  }
  public IMakeMoney getMakeMoney()
  {
	return new GirlMakeMoney();
  }

}</span>


具体工厂----男生学习赚钱类

<span style="font-size:18px;">public class ManFactory implements IHumanFactory
{
  public IStudy getStudy()
  {
		return new ManStudy();
  }
  public IMakeMoney getMakeMoney()
  {
	return new ManMakeMoney();
  }

}</span>

抽象产品---学习

<span style="font-size:18px;">public interface IStudy
{
   public String doStudy();
}</span>

抽象产品---赚钱

<span style="font-size:18px;">public interface IMakeMoney
{
 public String doMakeMoney();

}</span>


具体产品--男生学习

<span style="font-size:18px;">public class ManStudy implements IStudy
{
	public String doStudy()
	{
		return "男生学习!";
	}
}</span>

具体产品---男生赚钱

<span style="font-size:18px;">public class ManMakeMoney implements IMakeMoney
{
	public String doMakeMoney()
	{
		return "男生赚钱!";
	}
}</span>

具体产品--女生学习

<span style="font-size:18px;">public class GirlStudy implements IStudy
{
	public String doStudy()
	{
		return "女生学习!";
	}
}</span>


具体产品---女生赚钱

<span style="font-size:18px;">public class GirlMakeMoney implements IMakeMoney
{
	public String doMakeMoney()
	{
		return "女生赚钱!";
	}
}</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值