怎么理解Java设计模式的抽象工厂模式
这篇文章主要讲解了"怎么理解Java设计模式的抽象工厂模式",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Java设计模式的抽象工厂模式"吧!
一、什么是抽象工厂模式
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。
抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。
根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。
换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。
二、抽象工厂模式的应用场景
当一个对象都有相同的约束时,可以使用抽象工厂模式。
打个比方说,这个工厂的几个产品都需要经过某些共同的步骤和打上相同的商标,这一组产品可以在一个工厂里面生产,减少很多重复的代码在不同的地方都出现多次。
三、抽象工厂模式和工厂方法模式对比
抽象工厂模式的定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。
工厂方法模式的定义:为某个对象提供一个接口,而且无需指定它们的具体类。
都是子类实现接口的方法,并在子类写具体的代码。
工厂方法模式中也是可以有多个具体工厂,也是可以有多个抽象产品,和多个具体工厂、具体产品类。
区别是在抽象工厂接口类中,能创建几个产品对象。
抽象工厂模式的工厂能创建多个相关的产品对象,而工厂方法模式的工厂只创建一个产品对象。
四、抽象工厂模式的优缺点
优点:
1.它分离了具体的类
2.它使得易于交换产品系列
3.它有利于产品的一致性
缺点:
难以支持新种类的产品。
抽象方法模式的最大缺点就是产品族本身的扩展非常困难。如果在产品族中增加一个新的产品类型,则需要修改多个接口,并影响现已有的工厂类。
上面这句话,有些人不怎么理解,我給大家解释一下,打个比方说,你要在这个工厂创建三个对象,原本只是创建两个对象的,那么你就要在抽象方法中添加一个创建对象的方法,那么所有实现了这个接口的类都是要重新添加这个创建对象的方法,这就是对之前的工厂有影响的原因。
五、抽象工厂模式的实现
首先是抽象工厂,生产对象的抽象。
public abstract class AbstractFactory { abstract Size getSize();}
下面是具体工厂
public class IphoneXFactory: AbstractFactory{ Size getSize() { return new IphoneXSize(); }} public class IphoneXRFactory: AbstractFactory{ Size getSize() { return new IphoneXRSize(); }} public class HuaWeiMate10Factory: AbstractFactory{ Size getSize() { return new HuaWeiMate10Size(); }} public class XiaoMi8Factory: AbstractFactory{ Size getSize() { return new XiaoMi8Size(); }}
下面是对象抽象出来的接口
public interface Size { public void getSize();}
最后是我们要生产的对象
public class IphoneXSize: Size { public void getSize() { System.out.println("IphoneX尺寸."); }}public class IphoneXRSize: Size { public void getSize() { System.out.println("IphoneXR尺寸."); }}public class HuaWeiMate10Size: Size { public void getSize() { System.out.println("HuaWeiMate10尺寸."); }}public class XiaoMi8Size: Size { public void getSize() { System.out.println("小米8尺寸."); }}
客户端调用
public class Test { public static void main(String args[]){ AbstractFactory factory = new IphoneXFactory(); factory.getSize(); }}
感谢各位的阅读,以上就是"怎么理解Java设计模式的抽象工厂模式"的内容了,经过本文的学习后,相信大家对怎么理解Java设计模式的抽象工厂模式这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!