วันอังคารที่ 3 มีนาคม พ.ศ. 2558

TrafficLight ด้วย EventBus (สัญญาณไฟจราจร)


>> เนื่องจากวันนี้ฝึกการใช้และทำความเข้าใจกับสิ่งที่เรียกว่า event bus เพื่อนคนไหนที่เขียน android คงจะได้ยินได้อ่านผ่านหูผ่านตามาบ้าง สำหรับผมแล้วเพิ่งจะรู้จักกับ event bus ผ่านทาง GWT นี่แหละครับ

>> GWT เป็นเครื่องมือที่จะเปลี่ยนภาษาจาวาเป็นภาษาจาวาสคริปต์ โดยที่เราไม่ต้องโค้ดจาวาสคริปต์เลยแม้สักบรรทัดหนึ่ง (ตัดความยุ่งยากออกไป แล้วเรียนรู้วิธีการใช้งานมันผ่านทางภาษาจาวาก็พอ) แหม ได้ยินแบบนี้แล้ว ใครที่เบื่อไวยากรณ์จาวาสคริปต์ก็หันมาพึ่งเครื่องมืออย่าง GWT ได้นะครับ เป็นอีกทางเลือกหนึ่งที่ฟรีและมีประสิทธิภาพมากๆ

>> สัญญาณไฟจราจรมีสามสี แดง เหลืองและเขียว ในกรณีนี้คืออยากให้
- สีแดงสว่างก่อน นาน 3 วินาที
- แล้วสีเขียวจึงสว่าง นาน 5 วินาที
- ก่อนที่สีเหลืองจะสว่างเพื่อเตือนอีก 2 วินาทีแล้ววนไปที่สีแดง เป็นเช่นนี้ทุกรอบ เราจะเขียนโค้ดด้วย GWT โดยใช้ EventBus ได้อย่างไร?

>> EventBus คือ queue (คิว) ที่ใช้เก็บ event ประมาณว่าเป็นกล่องปลายเปิดสองด้านที่เราสามารถใส่ event เข้าไปได้ จากด้านหนึ่งทะลุสู่อีกด้านหนึ่ง เข้าก่อนก็ทำก่อนเป็นลำดับตามคิวไป (เข้าแถวซื้อกับข้าวไง) ดังนั้นสำหรับเรื่องนี้แน่นอนว่าเราจะต้องมี event อยู่สามตัว (ขอเรียกเป็นตัวแล้วกันนะครับ) ได้แก่
- event ของไฟแดง ชื่อว่า RedLightEvent
- event ของไฟเหลือง ชื่อว่า YellowLightEvent
- event ของไฟเขียว ชื่อว่า GreenLightEvent
สามตัวนี้จะถูกสร้างขึ้นเรื่อยๆแล้วทยอยส่งเข้าคิวไป

>> มี event แล้วก็ต้องมีตัวจัดการซึ่งเรียกว่า handler หรือตัวคอยตรวจจับว่าเมื่อพบ event เหล่านี้จะให้ทำงานอะไร ฮั่นแน่ เรามีสาม event เราก็จะสร้างสาม handler (เอาอย่างนี้ไปก่อนนะ)
- handler ของไฟแดง ได้ว่า RedLightEventHandler
- handler ของไฟเหลือง ได้ว่า YellowLightEventHandler
- handler ของไฟเขียว ได้ว่า GreenLightEventHandler

>> ลำดับของสัญญาณไฟจะเกิดจากการที่ event ไปกระตุ้นให้ handler ทำงาน ตามความต้องการข้างต้นนั้น เราจะกระตุ้น RedLightEvent ก่อน เพื่อให้ RedLightEventHandler ทำงาน เมื่อเจ้า handler ตัวนี้ทำงาน เราจะหน่วงเวลาด้วย Timer เป็นเวลา 3 วินาทีก่อนที่เราจะสั่งให้มันกระตุ้น GreenLightEvent ต่อไป และต่อไปด้วยโค้ดลักษณะเดียวกันนี้ตามลำดับที่ได้วางไว้

>> พอมองเห็นภาพลางๆแล้วใช่ไหมว่าสัญญาณไฟของเราจะวนเป็นรอบได้อย่างไร สำหรับโพสต์นี้ผมไม่ขอยกโค้ดให้วุ่นวาย แต่แนบเป็นไฟล์ source code แทน ตามลิงค์นี้ครับสำหรับเพื่อนที่สนใจ
- TrafficLightEventBus.java

>> ผิดพลาดประการใดขออภัยด้วย อย่างไรชี้แนะผมได้เสมอนะครับเพื่อนๆ ฝันดีครับผม

ไม่มีความคิดเห็น:

แสดงความคิดเห็น