บทความที่ได้รับความนิยม

วันเสาร์ที่ 18 มิถุนายน พ.ศ. 2554

มารู้จักกับ Factory Method และตัวอย่าง class java ที่ใช้ Factory Method


Factory Method คือ อะไร
    เป็นดีไซน์แพตเทิร์น อีกแบบนึงที่ใช้สร้างอ็อบเจกต์ของคลาสชนิดหนึ่งๆ  Factory Method ในความหมายโดยทั่วไปคือเมธอดที่ทำหน้าที่สร้างอ็อบเจกต์ โดยที่ไม่ใช้ constructor นั่นเอง


หากยังนึกไม่ออก

การสร้าง object แบบปกติ 
ก็ให้นึกถึงการสร้าง object โดยที่ไม่ได้ new ดูสิครับจากปกติในการสร้าง object จาก class ที่ต้องการนั้นจะมีรูปแบบการเขียนตัวอย่างคือ

                       ชื่อclass     ชื่อobject    =     new    ชื่อclass () ;
      เช่น           Student     objstu         =     new     Student();

การสร้าง object แบบใช้ Factory Method
เอะจากข้างบนมันก็การสร้าง object ปกตินินา แล้วถ้าเป็น Factory Method มันจะสร้างobject ยังไงของมันละ เราลองมาดูตัวอย่าง

                       Student objstu  = Cre.creFactory("red");

จากตัวอย่างข้างต้นจะเห็นได้ว่าเป็นการสร้าง object โดยไม่มีการ new แต่เป็นการเรียกmethod
ตัวหนึ่งแทนและมีการส่งค่าในการเลือกประเภทของการสร้าง ในที่นี้ส่งเป็น String คำว่า red เข้าไป
                      

เรามาดู Class ของ java  ที่ใช้ Factory Method  ในการสร้างObject

1. Class SAXParserFactory

java.lang.Object

extended byjavax.xml.parsers.SAXParserFactory  
     Defines a factory API that enables applications to configure and obtain a SAX based parser to parse XML documents.


2. Class ColorChooserComponentFactory
java.lang.Object
  extended byjavax.swing.colorchooser.ColorChooserComponentFactory
     A class designed to produce preconfigured "accessory" objects to insert into color choosers.

3. Class JFormattedTextField.AbstractFormatterFactory
java.lang.Object
  extended byjavax.swing.JFormattedTextField.AbstractFormatterFactory
     Instances of AbstractFormatterFactory are used by JFormattedTextField to obtain instances of AbstractFormatter which in turn are used to format values.
 



4. Class SAXTransformerFactory
java.lang.Object
  extended byjavax.xml.transform.TransformerFactory
      extended byjavax.xml.transform.sax.SAXTransformerFactory
     This class extends TransformerFactory to provide SAX-specific factory methods. It provides two types of ContentHandlers, one for creating Transformers, the other for creating Templates objects.
 
5.  Class Calendar
        Calendar rightNow = Calendar.getInstance();
 


ตัวอย่างของ Factory Method

interface Vehicle {
  public String move();
}
 
public Car extends Vehicle {
  public String move() {
    System.out.println("run on the road."); 
  }
}
 
public Aircraft extends Vehicle {
  public String move() {
    System.out.println("fly in the sky.");
  }
}
 
public VehicleFactory() {
  // duration คือเวลาที่ใช้ในการเดินทางเป็น ชม.
  public static Vehicle createVehicle(int duration) {
    if (duration > 15)
      return new Car();
    else
      return new Aircraft();
  }
}
     จาก code ด้านบนจะเห็นว่า หาคลาสใดต้องการเอายานพาหนะไปใช้สามารถที่จะสร้างยานพาหนะตรงๆ ก็ได้ แต่ก็ต้องเอาข้อกำหนดเรื่องเวลากระจายไปตามคลาสต่างๆ เหล่านั้นด้วย หาก มีการเพิ่มยานพาหนะอีกอย่างขึ้นมา ก็ต้องไปแก้โค้ดในคลาสต่างๆ ที่ใช้ยานพาหนะทั้งหมด หากรวมโค้ดเหล่านั้นไว้ที่จุดเดียวคือ คลาสที่ใช้ในการสร้าง เวลาแก้ไขก็สามารถแก้ไขจุดเดียวได้คือที่ Factory ไม่จำเป็นที่จะต้องแก้ไขตามคลาสต่างๆ อีกต่อไป ทีนี้ก็ลองใช้กันดูน่ะค่ะ
reference : http://download.oracle.com/javase/1.4.2/docs/api/overview-summary.html

2 ความคิดเห็น:

  1. คือจริง ๆ อยากให้ลองค้นว่ามีคลาสใดของ Java บ้าง ยกตัวอย่างมาสักสองคลาส ที่ให้เราสร้างออบเจกต์โดยใช้ Factory method

    ตอบลบ
  2. อ้อแล้วก็มีการ copy and paste ด้วย ไม่ได้นะครับ

    ตอบลบ