静态工厂方法的现实用例?

Bil*_*win 13 java oop static-methods design-patterns factory

我熟悉静态工厂方法的想法和好处,如Joshua Bloch的Effective Java中所述:

  • 工厂方法具有名称,因此与构造函数不同,您可以使用多个具有相同签名的工厂方法.
  • 工厂方法不必创建新对象; 他们可以返回以前创建的对象.这适用于不可变对象或值对象.
  • 与构造函数不同,工厂方法可以返回其返回类型的任何子类型的对象.

现在,我正在尝试为正在学习Java和OO原则的人解释静态工厂方法.她从具体场景而不是抽象中学习得最好.如果她能看到工作模式,解决一些问题,她就会明白.但她发现更难以阅读上述特征的抽象列表来理解如何应用模式.

你能帮我提出一个使用静态工厂方法的现实例子,它可以使它的好处变得清晰,但是它仍然足够简单,可以在介绍性的Java类中显示某些人吗?

这个人确实有PL/SQL的编程经验,但从来没有学过OOP模式.

Eri*_*son 15

使用javax.swing.BorderFactory所有三个点的例子.

此类用于为swing对象创建边框.这些边框对象可以很容易地重复使用,这种工厂方法允许这样做.这是javadoc.这个工厂是所有三点的一个很好的例子:

  • 有多个不同名称的静态方法,如createEmptyBorder()createEtchedBorder().
  • 这些方法将尽可能返回先前创建的对象.在整个应用程序中使用相同的边框非常频繁.
  • Border 它本身实际上是一个接口,因此通过这个工厂创建的所有对象实际上都是实现此接口的类.