Java工厂模式怎么实现

61次阅读
没有评论

共计 2319 个字符,预计需要花费 6 分钟才能阅读完成。

本篇内容介绍了“Java 工厂模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

概念:工厂模式负责将大量有共同接口的类实例化。

相关角色:抽象工厂:创建对象的具体工厂类必须实现这个接口
 具体工厂:实现了抽象工厂接口的具体工厂类
 抽象产品:创建的具体对象的超类型(父抽象类或父接口)
 具体产品:创建的具体对象。

1)简单工厂模式(静态工厂方法模式):

概念:新建一个工厂类,该工厂类有一个静态的工厂方法,根据这个静态工厂方法的入参来决定创建的对象是哪个类型。//  工厂类
 public class Creator {
 //  静态工厂方法:根据入参 condition 来决定返回对象的类型。public static ConcreteProduct factory(condition){if (condition  满足   条件 A) {return new ConcreteProductA();  //  注:ConcreteProduct 是 ConcreteProductA 和 ConcreteProductB 的超类
 } else if (condition  满足   条件 B) {return new ConcreteProductB();
 } else {
 //  返回一个默认 ConcreteProductX 对象   或   直接抛出异常
 缺点:新增类型 (eg:ConcreteProductC) 时,需要修改静态工厂方法,没有开闭原则的要求。举例:java.text.DateFormat 的 getDateInstance()方法。注:DateFormat 这个工厂类,是通过重载 getDateInstance()方法的方式来进行条件的判断。

2)工厂方法模式:

概念:新建一个工厂接口(或工厂抽象类)、多个具体工厂类,所有的具体工厂类都实现了工厂接口中定义的工厂方法,每个具体工厂类只产生特定类型的对象。//  抽象工厂
 public interface Creator {
 //  工厂方法
 public Product factory();
 //  具体工厂 ConcreteCreatorA  实现了工厂接口 Creator
 public class ConcreteCreatorA implements Creator {
 //  工厂方法
 public Product factory() {return new ProductA();
 //  具体工厂 ConcreteCreatorB  实现了工厂接口 Creator
 public class ConcreteCreatorA implements Creator {
 //  工厂方法
 public Product factory() {return new ProductB();
 缺点:新增类型 (eg:ProductC) 时,需要新增对应的具体工厂,当类型较多时(具体工厂类也会随之增多),不容易维护。工厂方法模式和模板方法模式的比较:1)二者都是基于方法的,都是将具体工作交给子类。2)工厂方法模式将创建的工作推延给子类,模板方法模式将剩余的逻辑交给子类。举例:java 集合中的工厂模式://  抽象工厂
 public interface List E  extends Collection E  {Iterator E  iterator(); //  工厂方法
 //  具体工厂
 public class ArrayList E  implements List E  {public Iterator E  iterator() {return new Itr(); // java.util.Vector.Itr  实现了 Iterator E 接口
 //  具体工厂
 public class Vector E  implements List E  {public synchronized Iterator E  iterator() {return new Itr(); // java.util.ArrayList.Itr  实现了 Iterator E 接口
 }

3)抽象工厂模式:

概念:新建一个工厂接口(或工厂抽象类)、一个具体工厂类,这个具体工厂类实现了工厂接口中定义的多个工厂方法,故这个具体工厂类可以产生多种类型的对象。//  抽象工厂:规定了多个工厂方法
 public interface Creator {
 //  创建 A 系列产品对象的工厂方法
 public ProductA factoryA();
 //  创建 B 系列产品对象的工厂方法
 public ProductB factoryB();
 //  具体工厂:实现了抽象工厂的多个工厂方法
 public class ConcreteCreator implements Creator {
 //  创建 A 类产品对象的工厂方法
 public ProductA factoryA() {return new ProductA1();  //  注:ProductA1 implements ProductA
 //  创建 B 类产品对象的工厂方法
 public ProductB factoryB() {return new ProductB1(); //  注:ProductB1 implements ProductB
 缺点:新增其它系列 (eg:ProductC) 的产品时,需要修改抽象工厂(在抽象工厂中添加新的工厂方法)。

“Java 工厂模式怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计2319字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)