Latest web development tutorials
×

设计模式 หลักสูตร

รูปแบบการออกแบบ รู้เบื้องต้นเกี่ยวกับรูปแบบการออกแบบ โหมดโรงงาน แบบโรงงานย่อ รูปแบบเดี่ยว รุ่นสร้าง รุ่นต้นแบบ อะแดปเตอร์รุ่น สะพานโหมด รูปแบบตัวกรอง โหมดการทำงานร่วมกัน มัณฑนากร รูปแบบซุ้ม ฟลายเวท โหมดพร็อกซี่ ห่วงโซ่ของรูปแบบความรับผิดชอบ โหมดคำสั่ง รูปแบบล่าม โหมดซ้ำแล้วซ้ำอีก รูปแบบที่เป็นสื่อกลาง รูปแบบของที่ระลึก รูปแบบการสังเกตการณ์ รูปแบบของรัฐ null Object Model โหมดกลยุทธ์ โหมดแม่แบบ รูปแบบของผู้เข้าชม MVC โหมด โหมดตัวแทน โหมดนิติบุคคลองค์ประกอบ รูปแบบการเข้าถึงข้อมูลของวัตถุ รูปแบบการควบคุมด้านหน้า intercepting รูปแบบตัวกรอง รูปแบบการบริการผู้แทนจำหน่าย วัตถุ Transfer รุ่น

设计模式其他

ทรัพยากรโหมดออกแบบ

รุ่นต้นแบบ

รุ่นต้นแบบ (Prototype แบบ) จะใช้ในการสร้างวัตถุที่ซ้ำกันในขณะที่มั่นใจประสิทธิภาพ ประเภทของรูปแบบการออกแบบนี้เป็นของสร้างสกีซึ่งมีวิธีที่ดีที่สุดในการสร้างวัตถุ

รุ่นนี้เป็นอินเตอร์เฟซต้นแบบที่ใช้ในการสร้างโคลนของวัตถุในปัจจุบัน เมื่อค่าใช้จ่ายโดยตรงของการสร้างวัตถุมีขนาดใหญ่ค่อนข้างแล้วใช้รุ่นนี้ ยกตัวอย่างเช่นวัตถุที่จะต้องมีการสร้างขึ้นหลังจากที่ฐานข้อมูลคือการดำเนินการค่าใช้จ่าย เราสามารถแคชวัตถุในครั้งต่อไปขอให้กลับไปที่โคลนของเวลาที่จำเป็นในการปรับปรุงฐานข้อมูลในการสั่งซื้อเพื่อลดสายฐานข้อมูล

การแนะนำ

เจตนา: ต้นแบบที่ใช้ในการสร้างอินสแตนซ์ประเภทวัตถุที่ระบุและสร้างวัตถุใหม่โดยการคัดลอกต้นแบบ

เป็นหลักในการแก้ปัญหา: การสร้างและลบต้นแบบที่รันไทม์

เมื่อจะใช้: 1, เมื่อระบบควรจะเป็นอิสระจากการสร้างผลิตภัณฑ์ขององค์ประกอบและการเป็นตัวแทน2 เมื่อตัวอย่างของการเรียนคือการระบุในเวลาทำงานตัวอย่างเช่นโดยการโหลดแบบไดนามิก 3 ในการสั่งซื้อเพื่อหลีกเลี่ยงการสร้างลำดับชั้นแบบขนานและลำดับชั้นของสินค้าเมื่อระดับโรงงาน 4 เมื่อตัวอย่างของการเรียนสามารถมีแตกต่างกันไม่กี่ของรัฐในครั้งเดียว สร้างจำนวนที่สอดคล้องกันของต้นแบบและโคลนพวกเขาอาจจะสะดวกกว่าคู่มือการใช้งานในแต่ละครั้งที่มีสถานะที่เหมาะสมของอินสแตนซ์ของชั้น

วิธีการแก้ปัญหา: การใช้วัตถุต้นแบบที่มีอยู่ได้อย่างรวดเร็วและผลิตวัตถุต้นแบบตามตัวอย่าง

คีย์รหัส: 1 เพื่อให้เกิดการดำเนินการโคลน, JAVA มรดก Cloneable เขียนโคลน () สามารถนำมาใช้ในระดับ MemberwiseClone .NET วัตถุ () วิธีการเพื่อให้บรรลุเป้าหมายของตื้นคัดลอกหรืออนุกรมวิธีการเพื่อให้บรรลุสำเนาลึก2, รุ่นต้นแบบเหมือนกันสำหรับการมีเพศสัมพันธ์ระหว่างผู้ใช้และประเภทที่เฉพาะเจาะจง (ชนิดตัวแปร) การแยกระหว่างวัตถุชั้นก็ยังต้องว่าสิ่งเหล่านี้ "ชนิดตัวแปร" มีอินเตอร์เฟซที่มีเสถียรภาพ

ตัวอย่างการใช้งาน: 1, การแบ่งเซลล์2, JAVA ในโคลนวัตถุ () วิธีการ

ข้อดี: 1, ปรับปรุงประสิทธิภาพการทำงาน2 หนีคอนสตรัค จำกัด

ข้อเสีย: 1 กับวิธีการโคลนต้องคำนึงถึงระดับของการทำงานซึ่งคลาสใหม่ไม่ยาก แต่สำหรับชั้นเรียนที่มีอยู่อาจจะไม่ง่ายมากโดยเฉพาะเมื่อมีการอ้างอิงระดับไม่สนับสนุนอนุกรมของวัตถุทางอ้อม หรือโครงสร้างวงจรที่มีการอ้างอิงถึงเวลา2 ต้องใช้อินเตอร์เฟซ Cloneable 3 หลีกเลี่ยงการคอนสตรัค จำกัด

สถานการณ์การใช้งาน: 1, สถานการณ์เพิ่มประสิทธิภาพของทรัพยากร2, การเริ่มต้นเรียนต้องแยกแยะทรัพยากรจำนวนมากรวมทั้งข้อมูลทรัพยากรทรัพยากรฮาร์ดแวร์ 3 ประสิทธิภาพการทำงานและความปลอดภัยความต้องการของสถานที่เกิดเหตุ 4 โดยการสร้างวัตถุใหม่ต้องเตรียมหรือข้อมูลที่น่าเบื่อมากเข้าถึงคุณสามารถใช้รูปแบบเดิม 5 ซึ่งเป็นส่วนใหญ่ของวัตถุแก้ไขโดยฉาก 6 วัตถุต้องการเพื่อให้สามารถเข้าถึงวัตถุอื่น ๆ และแต่ละโทรอาจต้องปรับเปลี่ยนค่าของมันพิจารณาโดยใช้แบบจำลองต้นแบบสำหรับหลายสำเนาของวัตถุที่ใช้โดยผู 7 ในโครงการที่เกิดขึ้นจริงรุ่นต้นแบบที่ไม่ค่อยเกิดขึ้นเพียงอย่างเดียวและโรงงานรูปแบบวิธีปกติจะปรากฏขึ้นร่วมกันสร้างวิธีการโคลนวัตถุและให้แล้วโทรโดยวิธีโรงงาน และโมเดลต้นแบบ Java ได้รับการจดทะเบียนเป็นทั้งหนึ่งก็สามารถนำมาใช้อย่างง่ายดายในการใช้

หมายเหตุ: การกับการเรียนโดยอินสแตนซ์ที่จะสร้างวัตถุใหม่ที่แตกต่างกันคือรุ่นต้นแบบคือการสร้างวัตถุใหม่โดยการคัดลอกวัตถุที่มีอยู่สำเนาตื้นตระหนัก Cloneable เขียนสำเนาลึกอ่านสตรีมไบนารีโดยการใช้ Serializable

การสำนึก

เราจะสร้างรูปร่างระดับนามธรรมและขยายชั้นเรียนรูปร่างนิติบุคคลขั้นตอนต่อไปคือการกำหนดShapeCache ชั้นรูปร่างของวัตถุดังกล่าวถูกเก็บไว้ในHashtable ในและในเวลาของการร้องขอเพื่อกลับไปยังโคลนของพวกเขา

PrototypPatternDemo เรียนสาธิตของเราโดยใช้ระดับShapeCacheที่จะได้รับวัตถุรูปร่าง

รุ่นต้นแบบแผนภาพ UML

ขั้นตอนที่ 1

สร้างระดับนามธรรมที่ดำเนินClonableอินเตอร์เฟซ

Shape.java

ประชาชนรูปร่างระดับนามธรรมดำเนิน Cloneable {
   
   ID String เอกชน
   ชนิดสตริงคุ้มครอง
   
   นามธรรมเป็นโมฆะวาด ();
   
   String สาธารณะ getType () {
      ส่งกลับชนิด;
   }
   
   String สาธารณะ getId () {
      กลับ ID;
   }
   
   โมฆะสาธารณะ setId (String ID) {
      this.id id =;
   }
   
   โคลนวัตถุสาธารณะ () {
      วัตถุโคลน = null;
      try {
         โคลน = super.clone ();
      } catch (CloneNotSupportedException E) {
         e.printStackTrace ();
      }
      กลับโคลน;
   }
}

ขั้นตอนที่ 2

สร้างคลาสนิติบุคคลดังกล่าวข้างต้นขยายระดับนามธรรม

Rectangle.java

เรียนสาธารณะขยายสี่เหลี่ยมผืนผ้ารูปร่าง {

   ประชาชนสี่เหลี่ยมผืนผ้า () {
     type = "สี่เหลี่ยมผืนผ้า";
   }

   @Override
   วาดโมฆะสาธารณะ () {
      System.out.println ( "ภายในสี่เหลี่ยมผืนผ้า :: วาด () วิธีการ.");
   }
}

Square.java

เรียนสาธารณะสแควร์ขยายรูปร่าง {

   ประชาชนสแควร์ () {
     type = "สแควร์";
   }

   @Override
   วาดโมฆะสาธารณะ () {
      System.out.println ( "สแควร์ภายใน :: วาด () วิธีการ.");
   }
}

Circle.java

วงกลมชั้นสาธารณะขยายรูปร่าง {

   สาธารณะวงกลม () {
     type = "วงกลม";
   }

   @Override
   วาดโมฆะสาธารณะ () {
      System.out.println ( "ภายในวงกลม :: วาด () วิธีการ.");
   }
}

ขั้นตอนที่ 3

สร้างชั้นได้รับการเรียนนิติบุคคลจากฐานข้อมูลและเก็บไว้ในHashtableใน

ShapeCache.java

นำเข้า java.util.Hashtable;

ShapeCache คลาสที่สาธารณะ {
	
   ส่วนตัวคง Hashtable <String, รูปร่าง> shapeMap 
      = ใหม่ Hashtable <String, รูปร่าง> ();

   ประชาชนคงรูปร่าง getShape (String shapeId) {
      รูปร่าง cachedShape = shapeMap.get (shapeId);
      ผลตอบแทน (รูปร่าง) cachedShape.clone ();
   }

   // สำหรับแต่ละคำสั่งรูปร่างวิ่งฐานข้อมูลและสร้างรูปร่าง // shapeMap.put (shapeKey รูปร่าง);
   // ตัวอย่างเช่นเราต้องการที่จะเพิ่มรูปทรงสามประชาชนเป็นโมฆะคง loadCache () {
      วงกลมวงกลมวงกลม = ใหม่ ();
      circle.setId ( "1");
      shapeMap.put (circle.getId () วงกลม);

      ตารางสแควร์สแควร์ = ใหม่ ();
      square.setId ( "2");
      shapeMap.put (square.getId () ตาราง);

      สี่เหลี่ยมผืนผ้าสี่เหลี่ยมผืนผ้า = สี่เหลี่ยมผืนผ้าใหม่ ();
      rectangle.setId ( "3");
      shapeMap.put (rectangle.getId () สี่เหลี่ยมผืนผ้า);
   }
}

ขั้นตอนที่ 4

PrototypePatternDemoใช้คลาสShapeCacheที่จะได้รับรูปของโคลนที่ถูกเก็บไว้ในHashtable

PrototypePatternDemo.java

เรียนสาธารณะ PrototypePatternDemo {
   ประชาชนเป็นโมฆะคง main (String args []) {
      ShapeCache.loadCache ();

      รูปร่าง clonedShape = (รูปร่าง) ShapeCache.getShape ( "1");
      System.out.println ( "รูปร่าง:" + clonedShape.getType ());		

      รูปร่าง clonedShape2 = (รูปร่าง) ShapeCache.getShape ( "2");
      System.out.println ( "รูปร่าง:" + clonedShape2.getType ());		

      รูปร่าง clonedShape3 = (รูปร่าง) ShapeCache.getShape ( "3");
      System.out.println ( "รูปร่าง:" + clonedShape3.getType ());		
   }
}

ขั้นตอนที่ 5

ตรวจสอบการส่งออก

รูปร่าง: วงกลม
รูปร่าง: สแควร์
รูปร่าง: สี่เหลี่ยมผืนผ้า