Telescoping Constructor Pattern


Telescoping Constructor [ Effective Java,p. 11 ] เป็นการสร้าง Constructor เพื่อรองรับรับ property ที่มีจำนวนมากและรูปแบบการสร้างที่หลากหลาย ตัวอย่างโค๊ดที่ผมจะแสดงให้ดู เป็นคลาสของ Vegetables ซึ่งมี Property เป็น vitamin โดยผมกำหนดให้ต้องใส่ vitamin C เป็นอย่างน้อย ลองดูตัวอย่างโค๊ดด้านล่างครับ

/**
 *
 * @author Grean
 */
public class Vegetable {
    //amount of vitamin in vegetable (mg)

    //vegetable in the world have vitamin C
    private int c;
    //another vitamin is option
    private int a;
    private int b1;
    private int b6;
    private int b12;
    private int d;

    public Vegetable(int c) {
        this(c, 0);
    }

    public Vegetable(int c, int a) {
        this(c, a, 0);
    }

    public Vegetable(int c, int a, int b1) {
        this(c, a, b1, 0);
    }

    public Vegetable(int c, int a, int b1, int b6) {
        this(c, a, b1, b6, 0);
    }

    public Vegetable(int c, int a, int b1, int b6, int b12) {
        this(c, a, b1, b6, b12, 0);
    }

    public Vegetable(int c, int a, int b1, int b6, int b12, int d) {
        this.c = c;
        this.a = a;
        this.b1 = b1;
        this.b6 = b6;
        this.b12 = b12;
        this.d = d;
    }
}

จากโค๊ดจะเห็นได้ว่าผมสร้าง Constructor ถึง 6 ตัวด้วยกัน เมื่อผมสร้าง Object ขึ้นมา จะสามารถสร้างได้ดังโค๊ดด้านล่าง

Vegetable tomato = new Vegetable(10);
Vegetable kale = new Vegetable(5,8,1,0,6,3);

ถ้าผมใช้ Constructor ที่มี parameter หนึ่งค่าผลที่ได้คือค่า property ของ vitamin C จะมีค่า 10 และค่าอื่นๆจะมีค่าเป็น 0 ทั้งหมด แต่ถ้าผมต้องการ set ให้ทุกค่าผมก็สามารถทำได้ตามบรรทัดที่สองของโค๊ดด้านบน ลองสังเกตุดูนะครับถ้าเรามองแค่ new Vegetable(5,8,1,0,6,3); เราจะไม่สามารถรู้ได้เลยว่า parameter แต่ละอันเป็น vitamin อะไรและก็ไม่รู้ว่าเราใส่ข้อมูลสลับกันหรือเปล่า นี่เป็นปัญหาของการใช้งาน telescoping constructor pattern หรือการสร้าง Constructor ไว้แบบกว้างๆ ซึ่งสามารถแก้ไขได้โดยใช้ Builder pattern



me on google plus+Jirawong Wongdokpuang

Advertisements

2 thoughts on “Telescoping Constructor Pattern

  1. Pingback: Telescoping Constructor Pattern | Geniustree Blogs
  2. Pingback: Builder Pattern « GreannetworK

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s