代码之家  ›  专栏  ›  技术社区  ›  Bill Karwin

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

  •  13
  • Bill Karwin  · 技术社区  · 14 年前

    我熟悉静态工厂方法的思想和好处,如JoshuaBloch所述。 Effective Java :

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

    现在我试着向那些正在学习Java和OO原理的人解释静态工厂方法。她最好从具体的场景中学习,而不是抽象的场景。如果她能在工作中看到模式,解决一些问题,她就会明白。但她发现,要理解如何应用模式,很难阅读上面这样的抽象特征列表。

    你能帮助我想出一个使用静态工厂方法的实际例子,它使它的好处清楚,但它仍然足够简单,可以在介绍Java类中显示某人吗?

    此人在pl/sql方面确实有编程经验,但从未学习oop模式。

    6 回复  |  直到 14 年前
        1
  •  15
  •   Erick Robertson    14 年前

    javax.swing.BorderFactory

    the javadoc

    • createEmptyBorder() createEtchedBorder()
    • Border
        2
  •  4
  •   Mark Peters    14 年前

    Integer.valueOf(int) Boolean Short Long Byte Integer

    new Integer() new

        3
  •  4
  •   ColinD    14 年前

    Guava ImmutableList

    • ImmutableList public protected
    • ImmutableList.of() EmptyImmutableList
    • ImmutableList.of(E) SingletonImmutableList
    • RegularImmutableList
    • copyOf(Collection) Collection
        4
  •  3
  •   stacker    14 年前

    Calendar.getInstance()

        5
  •  0
  •   Amir Raminfar Hadi Rasouli    14 年前

    Card:
      suit
      rank
    
    Deck:
      card[]
    

        6
  •  0
  •   Vladimir Ivanov    14 年前

    Printer

       public interface Printer {
           print();
        }
    
        class CanonPrinter implements Printer {
           print() {
        // ...
           }
        }
    
    
        public PrinterFactory {
    
        Printer createPrinter() {
       if (... ) {
          return new CanonPrinter();
       } else {
          return new EpsonPrinter();
       }
    }
    }
    

    Printer printer = PrinterFactory.createPrinter();
    printer.print();