May 4th, 2008
Basic Java Reflection and Inerface design for plugins
No Comments », Java, by nolifeloverวันนี้อยากจะเขียนบล๊อกเกี่ยวกับที่ทำให้หมดครับเลยเอาโจทย์ข้อถัดมา มาแก้กันเลยครับ สำหรับโจทย์ข้อนี้จะมาเรียนรู้เรื่อง reflection ของ java กัน หากใครไม่ค่อยมีความรู้แนะนำบล๊อก Reflections on Java Reflection รับลองครับว่าเบื้องต้นทุกคนต้องเข้าใจแน่นอนครับ สำหรับโจทย์ที่ได้รับคือ จะมี folder สำหรับเก็บ plugins ของการ apply เพื่อใช้ร่วมกับข้อความที่เราต้องการโดยหากเราเอาไฟล์ .class ไปวางในโฟลเดอร์นั้น String ที่เราส่งค้าไปจะทำการเปลี่ยนสไตล์ตามที่เราตั้งไว้ใน plugins นั้นครับ โดยในที่นี้จะมี plugins 3 ไฟล์คือ DoubleSpace.class NonWordRemove.class UpperCase.class สำหรับในส่วนของการสร้าง interface สำหรับเพื่อให้ plugins ของเราสามารถเรียกใช้ได้พร้อมกัน
package softwareskill; public interface PluginsInterface { String Convert(String senTence); }
ในส่วนของการเขียน plugins ทั้งหมดในการทำการแก้ไขลักษณะของ ตัวอักษรเราจะใช้ การ implement มาจาก interface ที่เราเขียนขึ้น สำหรับโค้ด DoubleSpace เราสามารถเขียนได้ประมาณนี้ครับ
public class DoubleSpace implements PluginsInterface{ public String Convert(String senTence) { return senTence.replaceAll(" ", " "); } }
จากโค้ดเมื่อเรา implemens PluginsInterface ผมจะทำการเขียน method convert ใหม่โดยให้เปลี่ยนจาก space bar เป้น double spacebar โดยการใช้ method replaceAll เพื่อทำการแทนค่าที่เจอด้วย space bar ครั้งตามที่เราต้องการ
สำหรับโค้ดของ Uppercase จะเห็นว่าจะคล้ายๆกัน
public class UpperCase implements PluginsInterface{ public String Convert(String senTence) { return senTence.toUpperCase(); } }
และส่วนสุดท้ายคือหากไม่ใช่ตัวอักษรหรือตัวเลขให้ทำการตัดทิ้งไปครับ ในที่นี้ผมจะใช้ regular expression ที่ได้ทำการศึกษามาแล้วเมื่อบทความก่อนหน้า
public class NonWordRemove implements PluginsInterface{ public String Convert(String senTence) { return Pattern.compile("[^(A-Za-z0-9 ) ]").matcher(senTence).replaceAll(""); } }
สำหรับในส่วนของการนำไปใช้ก็จะเป็นโค้ดประมาณนี้นะครับโดยจะต้องมีการอ้าง path ที่ได้ทำการเก็บไฟล์ของ .class ที่ได้ผ่านการ compile มาแล้วครับ เพื่อจะนำ class ที่ได้ทั้งหมดมาใช้ครับซึ่งจะได้โค้ดประมาณนี้ครับ
public class Reflection { private final String CLASSPATH="/Users/mLri/NetBeansProjects/Softwareskill/build/classes/softwareskill/plugins"; public static void main(String args[]){ Reflection reflection = new Reflection(); String output = reflection.applyAllPlugins("I love you G'meay,,,,,"); System.out.println(output); } public String applyAllPlugins(String input){ String[] plugIns = this.getAllpluginClass(); for(int i=0;i ก้เป็นอันว่าเรียบร้อยครับสำหรับการทำโจทย์ในข้อนี้แต่หรับการ desiเื อาจะยังไม่ดีเท่าไรนะครับ หากใครมีอะไรแนะนำสามารที่จะแนะนำได้เลยนะครับ ขอบคุณครับ สามารถดูเรื่อง <a href="http://www.jaideawhosting.com/nolifelover/?p=126">regular expression </a>
Related posts:
- Java Communications API on Windows ...
- text-shadow on ie with jquery drop shadow plugins สำหรับใครที่เคยใช้ css สำหรับสร้างเงานให้กับตัวอักษรนั้นหลายคนคงไม่ทราบว่าใน ie ไม่มี property นี้ครับ ผมก็ไม่เข้าใจเหมือนกันว่าทำไมว่า ie มันไม่ค่อยเหมือนชาวบ้านเท่าไร...
Related posts brought to you by Yet Another Related Posts Plugin.
