neven-krcmarek-V4EOZj7g1gw-unsplash

ทำไมต้อง Design Patterns ?ที่การจดโปรแกรมเช่นไรขึ้นลงมาสักอย่างหนึ่งนอกจากงานทำให้โปรแกรมใช้งานได้ ก็อาจจำต้องทบทวนดูถ้าจากไปจรดการพัฒนาทาบ หรืองานปรับปรุงแก้ไขข้างหน้า ซึ่งทั้งหมดก็น่าจะรู้เห็นเป็นใจตวาดเวลาที่จารึกรหัสก็ควรจะเขียนรหัสจ่ายงดงามจ่ายอ่านอ้าน แต่ว่าปัญหาก็คือมาตรฐานสิ่งของโค้ดสถานที่ดีแต่เว้นมนุษย์นั้นไม่เช่นเดียวกัน สมมติว่าจารึกรหัสกับเพื่อนก็คงพิสูจน์กันดุภาพร่างของใครเป็นต่อก็คงยินยอมกักคุมว่าจักเกาะแนวทางการจดภาพร่างไรได้มา แม้ว่ามันจักได้เปรียบรึเปล่าแม้อิฉันมีเกณฑ์มอบเจริญรอยตาม โดยไม่ต้องลองผิดลองถูกขึ้นไปมานวชาตกรอบความคิดสรรพสิ่ง Design Patterns ดำรงฐานะอย่างไร ? Design Pattern ดำรงฐานะพิมพ์เขียว (blueprint) ด้วยงานออกแบบซอฟต์แวร์ เพื่อให้การเขียนโค้ดได้มาตรฐานเดียวกัน จะคว้าแก้ปัญหารหัสห่วยสถานที่นำไปสู่ซอฟต์แวร์แห่งหนพ้นไปคุณภาพได้ เพราะว่า design pattern นี้กระทั่งจะบังเกิดมาแต่ละภาพร่างก็มาจากการทดลองกระหน่ำไม่มีเงินควานหาแนวทางหรือไม่ก็กรรมวิธีแห่งดีสุดขอบที่การแก้ปัญหาแต่ละอย่าง กับพร้อมด้วยคดีแห่งเลี่ยนเป็นแนวทางแห่งหนใช้คืนแก้ปัญหาต่างๆ อิฉันแล้วก็เปล่าสามารถที่จะก็อปปี้ยกมามาใช้งานขวับ เสียแต่ว่าจำเป็นต้องเรียนรู้ของ design pattern นั้นๆกับจับเจียรเกลี่ยใช้กับรหัสสรรพสิ่งอีฉันเองแม่แบบ Design Patterns เด็ด ๆ 7 Pattern แห่งหนทบทวนดูว่ามันขบปัญหาเดิม ๆ ก้าวหน้ามาก ๆ ก่อนอื่นต้องบ่งบอกก่อนกำหนดว่า design pattern นั้นเค้าจำแนกให้กำเนิดได้มาดำรงฐานะ 3 กลุ่มแห่งหนมีจุดหมายปลายทางไม่เหมือนกันออกเจียร มีCreational patterns – ครอบครองกลุ่มแห่งเก็บใช้ก่อสร้าง object แห่งแนวทางต่างๆ มอบประกอบด้วยความอ่อนตัว(flexible) ด้วยกันนำรหัสลงมาชดใช้ซ้ำ(reuse)ได้Structural patterns – กลุ่มตรงนี้จะครอบครองวิธีการจับ object ด้วยกัน class มาใช้งานสมรู้ร่วมคิด สร้างครอบครองแบบสร้างแห่งมีคดีซับซ้อนเพิ่มขึ้น เพราะว่าแห่งหนอีกทั้งมีความหยุ่นด้วยกันปฏิบัติการได้อย่างมีประสิทธิภาพBehavioral patterns – หมวดตอนท้ายเป็นกระบวนการออกแบบงานติดต่อกันระกระทั่งง object ปันออกประกอบด้วยความหยุ่นกับสมรรถติดต่อกันห้ามคว้าชนิดไม่มีปัญหายั่วข้อไหนกดอ่านคว้าพ้น1. Factory Method 2. Builder 3. Singleton 4. Adapter 5. Facade 6. Observer 7. Template Method1. Factory Methodสิงสู่แห่งหมู่ Creational patterns เพราะฉะนี้พอแปลความตามชื่อเสียงเรียงนามอีกด้วยจากนั้น Factory Method ตรงนี้ก็จักดำรงฐานะโรงงานเกี่ยวกับผลิต object นั่นเอง เพราะว่ามีความมุ่งหมายเพื่อให้การสร้าง object สมรรถก่อสร้าง oject มากแนวทางคว้า โดยแห่งหนช่วงเรียกหาใช้คืน ชดใช้กรรมวิธีสถานที่เหมือนกันได้ เสี่ยงตัวอย่างประการการบงการเครื่องดื่มกัน ต่างว่าให้โรงงานในที่นี้ลงความว่าพนักงานแห่งร้าน และ object ก็ตกว่าเครื่องดื่มปะปนกันข้างในร้านค้า ขณะที่ผู้ใช้สั่งเครื่องดื่มนั้น ไม่ว่าจักเรียกร้องกาแฟ, ชาเขียว หรืออะไรก็แล้วแต่ อันแห่งหนจำเป็นต้องตรงนั้นเช่นเดียวกันทั้งเพลงความว่าการบ่งบอกกับพนักงานกับก็จักคว้าเครื่องดื่มนั้นๆหลับมา โดยไม่ต้องตอแยกระบวนงานใเฝือารชงเครื่องดื่มเลย ดังนั้นประโยชน์ที่การพา pattern นี้จากไปใช้คืนก็ลงความว่าลดเหตุ#สลับซับซ้อนแห่งการก่อสร้าง Object ยอมคว้า กับผิมีการเพิ่มประการของ object ก็เปล่าแจะกับดักกระบวนการก่อสร้างให้อลหม่านMain.javaclass Main public static void main(String[] args) Barista barista = new Barista(); // บัญชากาแฟกับดักบาริสต้า Beverage order1 = baristaมันสมองorder(“coffee”); // บงการปันออกก่อลงมาปันออกก็จักได้กาแฟออกมา order1.brew(); // บงการชาเขียวกับดักบาริสต้า Beverage order2 = barista.order(“greentea”); // บงการเช่นเครื่องดื่มอื่นๆ order2.brew(); // สั่งโคไม่ทันเวลากับดักบาริสต้า Beverage order3 = barista.order(“cola”); // บงการเขวหัตถ์นๆกักคุมกับดักเครื่องดื่มอื่น order3.brew(); Barista.javapublic class Barista public Beverage order(String beverageType) if (beverageType.equals(“coffee”)) return new Coffee(); else if (beverageType.equals(“greentea”)) return new Greentea(); else if (beverageTypeมันสมองequals(“cola”)) return new Cola(); return null; Beverage.javapublic interface Beverage void brew(); Coffeeมันสมองjavapublic class Coffee implements Beverage @Override public void brew() make(); System.outมันสมองprintln(“กาแฟได้แล้วครับผม”); private void make() String doSomeThing = “หลุดลุ่ยฝักเทใส่ดาลัดเขียนเติมน้ำร้อน”; Colaมันสมองjavapublic class Cola implements Beverage @Override public void brew() openBottle(); Systemมันสมองoutมันสมองprintln(“โคไม่ทันเวลาได้มาแล้วขอรับ”); private void openBottle() String doSomeThing = “ถลกขวดแล้วเทใส่ดาลัด”; Greenteaมันสมองjavapublic class Greentea implements Beverage @Override public void brew() Systemมันสมองoutมันสมองprintln(“ชาเขียวได้มาแล้วขอรับ”); private void collectingTeaLeaves() String doSomeThing = “ดองจอมอ่อนต่อโลกใบชาจากความสูง 1200 เมตร เหนือน้ำเค็ม”; Output:กาแฟคว้าแล้วขอรับ ชาเขียวได้ต่อจากนั้นครับผม งัวไม่ทันเวลาได้ต่อจากนั้นครับ2. Builderอยู่แห่งหมู่ Creational patterns ด้วย ทดลองลงมาแลดูโจทย์กักคุมก่อนกำหนดว่าไฉนจดประกอบด้วย pattern ตรงนี้ขึ้นมา ยกตัวอย่างการสั่งอาหารติดตามบงการชนิดผัดผ่อนใบกะเพรา แห่งหนสาสมความรู้สึกให้มีวัตถุปัจจัยหลักลงความว่าเม็ดพริก, หอมเทียม, เนื้อสัตว์ และน้ำปลา ซึ่งสมัยประกอบด้วยมนุษย์ลงมาสั่งคนขายของก็จะทำให้อิฉันโดยใช้ Builder pattern ตรงนี้อยู่ทุก ! สาสมความรู้สึกตั้งท้องแลกเปลี่ยนหญิบคนคนนึงบัญชากะเพราหมูสับ อีกมนุชบงการกะเพราไก่ แม้ผู้ขายร้านขายของตรงนี้เปล่าใช้คืน Builder เวลาผู้บริโภคมนุชแรกสั่งก็จะต้องบงการแหว ‘ยกมาใบกะเพราหมูสับ ใส่หอมเทียม ต้นพริก สายธารมัจฉา’ ผู้บริโภคมนุษย์ที่สองลงมาบงการก็จักต้องบัญชาแหว ‘กะเพราไก่ใส่หอมเทียม เปล่าใส่เม็ดพริก เหยาะสายธารมัจฉา’ ซึ่งณเหตุเป็นขริงอิฉันไม่ต้องบงการภาพร่างตรงนั้นด้วย Builder แห่งคนขายของชดใช้สิงสู่ ผู้ขายจะทำกะเพรามอบกับดีฉันพร้อมด้วยวัตถุดิบหลักเขตแห่งกำหนดเอาไว้ ซีกใครแห่งหนหิวเจาะจงกระไรสถานที่เฉพาะเจาะจงก็เบาบอกเท่าที่จำเป็นเมื่อ ผู้ใช้ทั้งสองมนุชก็แทบบงการเท่า ‘ใบกะเพราง่ายเฉาะ’ กับ ‘ใบกะเพราไก่ไม่เหยาะพริก’ ก็ครั้น ผิได้ผลก่อสร้าง class แห่งรหัสแล้วก้จะลดเนื้อความยาว ความยากลำบากณการก่อสร้างลงจรได้มามากๆตัวอย่าง class HolyBasil(กะเพรา) แห่งใช้คืน builder pattern โดยจะไม่ต้องสร้าง setter เหมือนเคย เสียแต่ว่าจะชดใช้ ฺBuilder class แห่งอีฉันก่อสร้างขึ้นไปมาแทนHolyBasil.java public class HolyBasil private final String meat; // จำเป็นจะต้องใส่ private final String fishSauce; // ไม่จำเป็น private final String garlic; // ไม่จำเป็น private final String chili; // ไม่จำเป็น private HolyBasil(HolyBasilBuilder builder) this.meat = builderมันสมองmeat; thisมันสมองfishSauce = builderมันสมองfishSauce; thisมันสมองgarlic = builder.garlic; this.chili = builderมันสมองchili; //จำเป็นต้องมี getter แม้ว่าไม่ต้องมี setter public String getMeat() return meat; public String getfishSauce() return fishSauce; public String getgarlic() return garlic; public String getchili() return chili; @Override public String toString() String order = “HolyBasil “+thisมันสมองmeat + “, fishSauce:”+this.fishSauce+”, garlic:”+this.garlic+”, chili:”+this.chili; return order; HolyBasilBuilder.java – Builder สถานที่ปฏิบัติราชการดำรงฐานะ setter public static class HolyBasilBuilder private final String meat; private String fishSauce; private String garlic; private String chili; public HolyBasilBuilder(String meat) thisมันสมองmeat = meat; public HolyBasilBuilder fishSauce(String fishSauce) thisมันสมองfishSauce = fishSauce; return this; public HolyBasilBuilder garlic(String garlic) this.garlic = garlic; return this; public HolyBasilBuilder chili(String chili) this.chili = chili; return this; //object โหล่ที่จะส่งออกเจียร public HolyBasil build() HolyBasil holyBasil = new HolyBasil(this); return holyBasil; Main.java – การเรียกหาใช้คืน class Main public static void main(String[] args) HolyBasil dish1 = new HolyBasilมันสมองHolyBasilBuilder(“Pork”) .fishSauce(“นิดเดียว”) มันสมองgarlic(“เยอะแยะๆ”) .chili(“เปล่าต้นพริก”) มันสมองbuild(); Systemมันสมองoutมันสมองprintln(dish1); HolyBasil dish2 = new HolyBasilมันสมองHolyBasilBuilder(“Chicken”) .chili(“ขอเผ็ดๆ”) มันสมองbuild(); Systemมันสมองoutมันสมองprintln(dish2); HolyBasil dish3 = new HolyBasilมันสมองHolyBasilBuilder(“Shimp”) มันสมองbuild(); System.outมันสมองprintln(dish3); ผลแห่งออกมา: HolyBasil Pork, fishSauce:ขี้ปะติ๋ว, garlic:อนันต์ๆ, chili:เปล่าพริก HolyBasil Chicken, fishSauce:null, garlic:null, chili:ตะขอเผ็ดๆ HolyBasil Shimp, fishSauce:null, garlic:null, chili:null แค่นี้กาลเวลาอีฉันบัญชาพ่อค้าก็จักไม่ต้องบัญชาจรดวัตถุดิบทั้งสิ้นสามารถบัญชาแค่กะเพรากุ้ง ผู้ขายก็จักสร้างกะเพรากุ้งเพราะสถานที่เหยาะชนิดอื่นติดสอยห้อยตามสูตรสรรพสิ่งผู้ขาย3. Singletonอีกต้นสักตัวนึงแห่งหมวด Creational patterns ด้วยเนื้อตัวตรงนี้ขนมจากชื่อเสียงเรียงนามแล้วก็ควรพอทึกทักได้มาดุเกี่ยวข้องอย่างไรสักอย่างสถานที่มันสันโดษๆ มีชิ้นโดด ในที่นี้ก็ตกว่าการกำหนด object แห่งหนสร้างขึ้นไปมามอบมีเหมือนตัวเนื้อตัว ไม่ไม่ผิดก่อสร้างย้ำไม่มีเงินก่อกำเนิดความซ้ำซ้อน หรือทำงานพลาดพลั้ง มาเผชิญดูแม่แบบขนมจากที่ชีวิตประจำวันของอิฉันกักคุมเหนือกว่า สมมตมอบประกอบด้วยห้องอาบน้ำอยู่ห้องหนึ่งแต่อีกทั้งไม่ได้เหยาะทวาร พอมีคนจะชดใช้ห้องน้ำก็สร้างประตูขึ้นไปมา 1 เบ่งบานต่อจากนั้นเข้าไปใช้งาน พอคนถัดไปจักมาชดใช้ห้องอาบน้ำก็ก่อสร้างประตูใส่เข้าไปพอกพูนอีกแล้วเข้าไปใช้ ครั้นมนุชทาบๆไปมาชดใช้ก็ก่อสร้างทางเข้าออกเพิ่มพูนเข้าอีก นานมากจากไปก็มีทวารชิดสิงสู่แห่งห้องอาบน้ำเต็มไปหมด ระยะล็อกทางเข้าออกก็ยังประกอบด้วยทวารอื่นๆเต็มไปหมด ใช้งานห้องอาบน้ำไม่ไหวสักครั้ง เปรียบครอบครองโค้ดก็เช่นการแห่งหนอิฉันเปล่าควบคุมงานก่อสร้าง object ใหม่จากคลาสบางคลาส พอเรียกหาใช้งานก็สร้างใหม่ตลอดจนมี object อยู่ณกระบิลเยอะแยะเกินควร จะจำกัดการทำงานก็ทุหรือว่าอาจจะสร้างปันออกทรพยาเสพติดมือกระยาเลยไม่ผิดชดใช้จรโดยไม่จำเป็น ดังนั้นจึ่งประกอบด้วย singleton ขึ้นลงมาเพื่อที่จะไว้ชดใช้เพื่อคุมกำเนิดให้ class สมรรถสร้าง object ได้พ่างตัวข้างเดียว เหมือนกันห้องน้ำสถานที่ถ้าสร้างทวารเก็บจึงชดใช้ทางเข้าออกเริ่มแรก ไม่ต้องก่อสร้างใหม่ขึ้นลงมาอีกนั่นเองToiletDoorมันสมองjavapublic class ToiletDoor // สร้างทางเข้าออกสถานที่ประกอบด้วยได้เพียงอันข้างเดียวเอาไว้ private static ToiletDoor instance = new ToiletDoor(); // กำหนดให้ constructor ครอบครอง private จะได้ไม่มีผู้ใดก่อสร้างทางเข้าออกขึ้นมาได้อีก private ToiletDoor() // ให้มนุษย์ที่จะใช้คืนทางเข้าออกเรียกหาใช้คืนผ่าน getInstance() แล้วส่งประตูแห่งหนประกอบด้วยอยู่จากไปให้ชดใช้ public static ToiletDoor getInstance() return instance; public void openTheDoor() Systemมันสมองout.println(“Door is openedมันสมอง”); public void closeTheDoor() Systemมันสมองout.println(“Door is closedมันสมอง”); Main.javapublic class Main public static void main(String[] args) // คนที่จะชดใช้ประตูก็ใช้คืนเปลี่ยน getInstance ToiletDoor toiletDoor = ToiletDoor.getInstance(); // ทดลองใช้งานทางเข้าออกได้มาสามัญ toiletDoorมันสมองopenTheDoor(); toiletDoor.closeTheDoor(); // จะไม่สามารถก่อสร้างประตูนวชาตกระนี้คว้าก็เพราะว่า constructor นั้นดำรงฐานะ private สิงสู่ // ToiletDoor newToiletDoor = new ToiletDoor(); Output:Door is opened. Door is closed. 4. Adapterคราวนี้เปลี่ยนลงมาดูที่หมู่ Structural patterns ห้ามมั่ง อ่านชื่อจึงยกตัวอย่างคว้าเหนาะๆจากชีวิตประจำวันสรรพสิ่งอีฉันพ้นก็ลงความว่าได้ผลดีไซน์เพื่อให้อีฉันสมรรถใช้งานผ่านเนื้อตัวสร้างได้ อาทิเช่นดีฉันประกอบด้วยปลั๊กสามตาเสียแต่ว่าสถานที่บ้านมีเต้ารับแบบแห่งกระเป๋าน 2 รู ก็ไม่สามารถใช้งานได้ อิฉันจึ่งจับจ่ายใช้สอยตัวสร้างลงมาต่อจากนั้นเสียบผ่านตัวสร้างตรงนั้นแทน ซึ่งผิดีฉันจรต่างประเทศพบเห็นรูปลั๊กไฟแห่งต่างให้กำเนิดจรอีฉันก็เท่าปรับเปลี่ยนร่างกายนฤมิตสรรพสิ่งอีฉัน กับแทงใช้งานผ่านร่างกายเนรมิตเหมือนเดิม เหมือนกันกับการเขียนโค้ด อิฉันคงจะใช้งาน library ข้างนอกพร้อมด้วยการก่อสร้าง class มาใช้คืนครอบครอง adapter ถ้าวันหน้า library นั้นมีกาต้มน้ำรอคอยัพเดตต่อจากนั้นประกอบด้วยวิธีเรียกหาใช้งานแปรไป อีฉันก็เท่าแก้ไขที่ส่วน adapter ก็พอ ก็สมรรถใช้งานรหัสหลักได้เพราะไม่ต้องเยียวยากระไร Mainมันสมองjavainterface TypeA public void plugTypeA(); class OutletA implements TypeA public void plugTypeA() Systemมันสมองoutมันสมองprintln(“Plug into type A outlet.”); interface TypeB public void plugTypeB(); class OutletB implements TypeB public void plugTypeB() System.outมันสมองprintln(“Plug into type B outlet.”); // ก่อสร้าง adapter แห่งหน implement type B เพื่อขณะที่ใช้งาน // ครั้นสร้าง object ขนมจากคลาสนี้ต่อจากนั้นจะได้มาสามารถใช้งานคว้าเท่าเทียม type B class B_to_A_Adapter implements TypeB TypeA typeA; // เนื่องจากดีฉันเรียกร้องให้ adapter นี้ชดใช้ความเก่งกาจขนมจากคลาส type A ได้มา // เพราะฉะนี้ดีฉันแล้วก็จำเป็นจะต้องรับ object คลาส type A ในระหว่างที่สร้าง adapter // เฉกงานสถานที่ดีฉันจำเป็นจะต้องเอา adapter สร้างเจียรทิ่มกับดักปลั๊กแห่งหนกำแพง public B_to_A_Adapter(TypeA typeA) thisมันสมองtypeA = typeA; // ก่อสร้างการเรียกใช้งานของปลั๊ฏ type B เช่นเดียวกัน adapter ที่จะมีร่องหน้าตาครอบครองปลั๊กไฟ 3 ค่ะ // เสียแต่ว่าขาที่จะจากไปเสียบกำแพงประกอบด้วยแค่ 2 จ๋า ก็ถือเอาว่าเรียกใช้งาน object type a // ดัง adapter แห่งทิ่มกำแพงสิงสู่ public void plugTypeB() typeAมันสมองplugTypeA(); class Main public static void main(String args[]) // ก่อสร้างร่องปลั๊กไฟแปลน A และแปลน B OutletA myPlugTypeA = new OutletA(); OutletB myPlugTypeB = new OutletB(); // ก่อสร้าง adapter สถานที่ช่องครอบครองแปลน B มี 3 ช่อง // แต่การงานจริงตกว่าประกอบด้วยจ๋า 2 จ๋าเพื่อไว้เจียรเสียบ type A ได้ TypeB myAdapter = new B_to_A_Adapter(myPlugTypeA); // แทงปลั๊ก 2 ขาเข้าจากไปแห่งรูปลั๊ก 2 ร่อง Systemมันสมองout.print(“My Type A Plug: “); myPlugTypeA.plugTypeA(); // เสียบปลั๊ก 3 ขาเข้าเจียรที่ร่องปลั๊ก 3 ช่อง Systemมันสมองoutมันสมองprint(“My Type B Plug: “); myPlugTypeB.plugTypeB(); // เสียบเต้าเสียบ 3 ขาเข้าเจียรแห่งร่องปลั๊ก 2 ร่อง ใช้งานได้มาปกติ System.outมันสมองprint(“My Type B Plug: “); myAdapter.plugTypeB(); Output:My Type A Plug: Plug into type A outlet. My Type B Plug: Plug into type B outlet. My Type B Plug: Plug into type A outlet.5. Facadeด้วยว่าตัวตรงนี้ก็ยังดำรงฐานะ Structural patterns สิงสู่ โดย Facade ตรงนั้นวางชดใช้ขบปัญหาการสถานที่จำเป็นต้องจัดการมากๆประการ ปันออกสมรรถเรียกใช้ได้อีกด้วยคำประกาศิตฝ่ายเดียว เช่นงานที่จะเปลี่ยนแพ็คเกจมือจับ ดีฉันคงจะไม่ต้องไปหาข้อมูลเอง หารายละเอียด หานัมเบอร์คลึงลงสมัคร แต่ทำกันได้ด้วยการโทรควาน call center สรรพสิ่งผู้ให้บริการด้วยกัน call center จะเอาใจช่วยบริหารวิธีการทั้งสิ้นปันออกดีฉันเองตั้งแต่นำเสนอโปรโมชัน บ่งบอกข้อปลีกย่อยและกระทำการลงสมัครมอบดีฉัน แห่งการพา Facade จากไปใช้แห่งรหัสตรงนั้นผิใช้มากเกินไปก็อาจเป็นการทำเอาโค้ดประกอบด้วยเหตุซับซ้อนและแก้ไขยากขึ้นไป จำเป็นต้องเลือกสรรใช้คืนมอบสมน้ำสมเนื้อพร้อมด้วยความรอบคอบ Facade Pattern จักรวมธุรกิจสถานที่มีเหลือแหล่วิธีการ ด้วยกันเรียกหาชดใช้อีกด้วยคำประกาศิตฝ่ายเดียวดังแม่แบบCallCenterFacadeมันสมองjavapublic class CallCenterFacade public void changePackage(String number, String noPackage) Systemมันสมองoutมันสมองprintln(“ตรวจสอบแพคเกจยุคปัจจุบันของเลข”+number); System.out.println(“พิจารณาข่าวการวางเงิน”); System.out.println(“ประกันสิทธิ์การเปลี่ยนแพคเกจ”); System.outมันสมองprintln(“เปลี่ยนแพคเกจดำรงฐานะแพคเกจเลข”+noPackage); System.outมันสมองprintln(“งานปฏิบัติการเสร็จ”); Systemมันสมองout.println(“===================”); public void review(int score, String comment) Systemมันสมองoutมันสมองprintln(“ขอบพระคุณแห่งหนไว้ใจแห่งบริการสรรพสิ่งอิฉัน”); System.out.println(“อีฉันจักเก็บข้อมูลไว้เพื่อที่จะพัฒนาต่อไป”); การเรียกใช้ก็สามารถเรียกหาใช้ด้วยคำประกาศิตข้างเดียวMainมันสมองjavaclass Main public static void main(String[] args) CallCenterFacade userRequest = new CallCenterFacade(); userRequestมันสมองchangePackage(“08XX6XXสิบเอ็ด”, “5”); userRequestมันสมองreview(10, “การงานแจ้นธุรกิจเร็วมากครับผม”); ผลสรุปแห่งหนออกมา:ตรวจสอบแพคเกจปัจจุบันสิ่งของเลข08XX6XX11 สำรวจข้อมูลงานวางเงิน รับรองสิทธิการสับเปลี่ยนแพคเกจ สับเปลี่ยนแพคเกจเป็นแพคเกจลำดับที่5 งานจัดการเสร็จสิ้น =================== ขอบคุณสถานที่ไว้ใจแห่งบริการของอิฉัน ดีฉันจะเก็บข้อมูลไว้เพื่อที่จะปรับปรุงถัดไป 6. Observerมาถึงตัวถัดลงมาบ๊วยกับหมวด Behavioral patterns เกี่ยวกับ Observer ตรงนี้จะได้ผลดีไซน์เพื่อที่จะสร้างงานติดต่อรับสารภาพประกาศกันภาพร่าง one to many ชนิดงานนวด subscribe ช่อง Youtube สักช่องหนึ่ง แม้ประกอบด้วยการลงที่หนีบกระดาษใหม่ๆก็จักมีงานรุ่งเช้าปรามเจียรอีกต่างหากมนุชแห่งนวด subscribe เอาไว้ทุกคนนั่นเอง แม้เป็นแห่งรหัสก็จวนจะเหมือนกันก็ลงความว่าวางใช้ออกแบบพอให้สามารถขจรขจายประกาศเจียรอีกทั้งทั้งปวง object หลักแหล่ง subscribe เอาไว้ได้มานั่นเอง BorntoDevChannelมันสมองjava – ดำรงฐานะ subject ให้ observer ลงมา subscribeimport java.utilมันสมองArrayList; import javaมันสมองutilมันสมองList; public class BorntoDevChannel // สร้าง List วางหยุดมนุชแห่งหน subscribe ทางเข้าออกเอาไว้ private List subscribers = new ArrayList(); // method ด้วยมอบมนุษย์ลงมา subscribe public void subscribe(Viewer viewer) subscribersมันสมองadd(viewer); // ส่งงานรุ่งเช้าปรามเจียรอีกต่างหากทุกคนที่ list public void notifyAllSubscriber(String videoName) for (Viewer viewer : subscribers) viewer.update(videoName); Viewer.javapublic abstract class Viewer protected BorntoDevChannel channel; // สร้าง abstract method พอให้ผู้ชมทุกคนแห่งหนสืบทอดขนมจากคลาสตรงนี้ // สมรรถสารภาพการแจ้งห้ามได้ที่รูปแบบเดียวกัน public abstract void update(String videoName); Jane.javapublic class Jane extends Viewer public Jane(BorntoDevChannel b2d) thisมันสมองchannel = b2d; thisมันสมองchannel.subscribe(this); @Override public void update(String videoName) System.out.println( “เคยชินค่ะ คุ้นชินจ๋า หนูชื่อเสียงเรียงนามชิน มากับนุ่นด้วยกันก็ลงมากับโบว์ และก็จักไปดู ‘” + videoName + “‘ จ๋า”); Noonมันสมองjava public class Noon extends Viewer public Noon(BorntoDevChannel b2d) this.channel = b2d; this.channelมันสมองsubscribe(this); @Override public void update(String videoName) Systemมันสมองoutมันสมองprintln( “นุ่นจ๋า นุ่นค่ะ มุสิกชื่อเสียงเรียงนามนุ่น มากับคุ้นชินกับก็มากับดักโบว์ กับก็จะไปดู ‘” + videoName + “‘ หนอค่ะ”); Bowมันสมองjavapublic class Bow extends Viewer public Bow(BorntoDevChannel b2d) this.channel = b2d; thisมันสมองchannel.subscribe(this); @Override public void update(String videoName) Systemมันสมองout.println( “โบว์ค่ะ โบว์ค่ะ มูสิกชื่อโบว์ มากับดักนุ่นและก็ลงมากับชิน และก็จะไปดู ‘” + videoName + “‘ ด้วยค่ะ”); Mainมันสมองjavaclass Main public static void main(String[] args) BorntoDevChannel b2d = new BorntoDevChannel(); // สร้างคนชมทั่วไตรมนุษย์พร้อมส่งทวาร BorntoDev เจียรให้ Subscribe new Jane(b2d); new Noon(b2d); new Bow(b2d); // รุ่งเช้าปรามจรอีกทั้งผู้ชมทุกคนแหวประกอบด้วยวีดิทัศน์นวชาต b2dมันสมองnotifyAllSubscriber(“เริ่มจารึกโปรแกรมอีกด้วย Java ระบิลรวดเร็ว ๆ แจ้งสุดขอบแห่งพื้นแผ่นดิน”); Output:ชินขา คุ้นชินขา มูสิกชื่อเสียงเรียงนามคุ้นชิน มากับดักนุ่นด้วยกันก็ลงมากับโบว์ กับก็จักไปดู ‘ริเริ่มสลักรายการพร้อมด้วย Java ระบิลรวดเร็ว ๆ แจ้งตกขอบณพื้นแผ่นดิน’ ขา นุ่นขา นุ่นจ๋า มุสิกชื่อเสียงเรียงนามนุ่น ลงมากับชินด้วยกันก็มากับโบว์ ด้วยกันก็จักไปดู ‘เริ่มสลักโปรแกรมด้วย Java ระบิลด่วน ๆ รู้ตกขอบแห่งแหล่งหล้า’ นะจ๋า โบว์ขา โบว์ค่ะ หนูชื่อโบว์ ลงมากับดักนุ่นและก็ลงมากับชิน ด้วยกันก็จะไปดู ‘ริเริ่มสลักโปรแกรมพร้อมด้วย Java ระบิลเร็ว ๆ เข้าใจสุดโต่งณแหล่งหล้า’ ด้วยค่ะ7. Template Methodเข้าตัวบ๊วยแห่งหนยกมาที่วันนี้ห้ามกับ Template Method ถิ่นที่อยู่ณหมู่ Behavioral patterns อ่านจึ่งน่าคุ้นๆ เพราะว่ามันเป็นการใช้งานขนมจากแปลนเวลาแห่งอิฉันชดใช้ template class แห่งภาษามนุษย์เหล่า Java หรือว่า C นั่นเอง จุดหมายปลายทางก็เพื่อจะตัดทอนโค้ดแห่งมีธุรกิจซ้ำซ้อนกันณแต่ละคลาส ตัวอย่างเช่นแม้ดีฉันมี class เกี่ยวกับก่อบะหมี่ครึ่งหนึ่งสำเร็จรูปกับดักคลาสด้วยว่าชงชา ชไมคลาสจักต้องประกอบด้วยฟังก์ชันที่การต้มธารากับกรอกน้ำลงที่เครื่องใช้เฉมือนๆห้าม ทำแทนอิฉันจะจารึกวางย้ำห้ามที่ญิบคลาสก็สร้างวางดำรงฐานะ template class แห่งประกอบด้วยฟังก์ชันการต้มตุ๋นธารากับเติมธาราเอาไว้ และมอบทั้งสองคลาสนำเอาจรใช้งานสมรู้ร่วมคิดได้มา แบบอย่างดีฉันจักสร้าง abstract class ชื่อ CookProcess ครอบครอง templete ของการชงชาและสร้างบะหมี่โดยประกอบด้วย method ถือเอาว่า boilWater, pourWater, addIngredient ด้วยกัน waitAMinute สถานที่เรียกหาใช้คืนโดย method cook เพราะว่าการโกงธาราด้วยกันการรินสายธารไม่ผิดกำหนดการทำงานเก็บแล้ว CookProcess.javapublic abstract class CookProcess public final void cook() boilWater(); addIngredient(); pourWater(); waitAMinute(); public abstract void addIngredient(); public abstract void waitAMinute(); private final void boilWater() System.out.println(“I’m water and I’m boiledมันสมอง”); private final void pourWater() System.out.println(“Pour water in container”); ถัดไปก่อสร้าง class Tea แห่ง extend CookProcess ขึ้นมากับตารางจัดการของ method addIngredient และ waitAMinuteTea.javapublic class Tea extends CookProcess @Override public void addIngredient() System.out.println(“add tea bag”); @Override public void waitAMinute() Systemมันสมองout.println(“Wait 1 minute”); สร้างภาพร่างเดียวกันกับดัก class NoodleNoodleมันสมองjavapublic class Noodle extends CookProcess @Override public void addIngredient() System.out.println(“add noodle and seasoning”); @Override public void waitAMinute() System.outมันสมองprintln(“Wait 3 minutes”); งานจักชงชาแทบสร้างobject Tea โดยข่าวเป็นตัวเปลี่ยนแบบ CookProcess แห่ง Tea extend มาจากนั้นชดใช้ method cook() สรรพสิ่ง class CookProcess ก็ดำรงฐานะชิ้นสุภาพเรียบร้อยMainมันสมองjavaclass Main public static void main(String[] args) Systemมันสมองoutมันสมองprintln(“I’ll cook tea”); CookProcess tea = new Tea(); tea.cook(); System.out.println(“Tea is delicious!!!”); System.out.println(“”); System.out.println(“I’ll cook noodle”); CookProcess noodle = new Noodle(); noodleมันสมองcook(); System.outมันสมองprintln(“This noodle is too spicy :(“); Output:I’ll cook tea I’m water and I’m boiled. add tea bag Pour water in container Wait 1 minute Tea is delicious!!! I’ll cook noodle I’m water and I’m boiledมันสมอง add noodle and seasoning Pour water in container Wait 3 minutes This noodle is too spicy 🙁 เกี่ยวกับตัวอย่างแห่งเอ่ยถึงดำรงฐานะเหมือนส่วนหนึ่งส่วนใดของ design pattern แห่งมีอยู่มากมาย และแม้ใครใคร่รู้จะกับ design pattern เพิ่มเติม ก็สามารถเข้าไปเรียนรู้ทาบเหมาะ https://refactoringมันสมองguru/design-patterns/what-is-pattern บ๊วยจึ่งอย่าเลอะเลือนว่าแต่เว้น pattern นั้นมีข้อได้เปรียบจุดอ่อนผิดแผกกันให้กำเนิดเจียร ดังนั้นก่อนที่จะจับตัวไรเจียรใช้คืน ควรจะเรียนรู้ตัวนั้นโดยละเอียดแหวสมควรกับดักการงานแห่งหนอีฉันจะใช้ประโยชน์หรือไม่ ก็เพราะว่า design pattern ครอบครองเหมือนหลักการจดโค้ดเท่านั้น การนำเจียรชดใช้แบบผิดๆ คงจะทำเอาอีฉันเขียนโค้ดได้ยากขึ้นชนิดไม่เกิดผลดีก็อาจจะถ้าเจ้าเอ็งสนใจปฏิรูป สตาร์ถักัพ แอปพลิเคชัน และ เทคโนโลยีของตัวเอง ?อย่ารอช้า ! เรียนรู้ความถนัดปีกดิจิทัลเพื่อที่จะอัพเกรดความเก่งกาจของเธอ เริ่มตั้งแต่ฐานราก ครบครันปฏิบัติแน่นอนณครรลองหลักสูตรออนไลน์วันนี้ Advance Problem Solving ฿2,590.00 ฿2,090.00฿2,590.00 ฿2,090.00Add to cart Basic Motion Graphic & Animation ฿1,990.00 ฿1,290.00฿1,990.00 ฿1,290.00Add to cart Complete Arduino For Beginner ฿3,290.00 ฿1,990.00฿3,290.00 ฿1,990.00Add to cart COMPLETE ARDUINO FOR BEGINNER WITH ELECTRO KIT I ฿5,180.00 ฿2,590.00฿5,180.00 ฿2,590.00Add to cart