抽象工厂模式:
提供了一个接口,用于创建相关或依赖对象家族,而不需要明确指定具体类。在实际的项目中,由于需求的变化,需要创建多个对象,此时,如何防止过多的创建方法,以避免客户程序和服务端的紧耦合,这就需要运用抽象方法来解决,解决的方法时创建接口或者抽象类,由子类去继承或实现。抽象方法
模式主要由抽象工厂、具体工厂、产品族构成。
此类模式在实际项目开发过程中,由于需求的变化,需要创建多个对象。此时,如何防止过多的创建方法,以避免客户程序和服务端的紧耦合,这就需要运用抽象方法模式进行解决,具体操作可以通过创建接口和抽象类,有具体类去实现或者继承。
优势:
可以分离具体类的生成,无需了解何种对象被创建。因此,如需变换具体工厂则更简单。
在一个完整的系统中,使各个模块之间显得尽可能的独立存在。
使客户端调用产品族的同一个对象,无需改变。
时机:
当独立的软件系统需要单独进行产品的创建和展示上。
当独立的软件系统由产品树套餐中单个进行配置上。
联合使用相关对象时,
需要建立一个项目框架的通用库时。
抽象工厂与工厂方法:
不同之处主要体现在
抽象产品类:
抽象工厂类---多个抽象类,每个抽象产品类都可以派生出多个具体产品类。
工厂方法-----一个抽象类,可以派生出多个具体产品。
具体产品类:
抽象工厂类----每个具体工厂类可以派生出多个具体产品类的实例。
工厂方法------每个具体工厂类只能派生出一个具体产品类的实例。
抽象工厂类和具体工厂类都是一样的。
与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>