Latest web development tutorials
×

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

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

设计模式其他

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

ฟลายเวท

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

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

การแนะนำ

เจตนา: ใช้ร่วมกันให้การสนับสนุนจำนวนมากของวัตถุที่ละเอียด

เป็นหลักในการแก้ปัญหา: ในจำนวนมากของวัตถุก็อาจทำให้หน่วยความจำล้นเราใส่กันเป็นส่วนหนึ่งในนั้นเป็นนามธรรมถ้าคุณมีการร้องขอบริการเดียวกันโดยตรงกลับวัตถุที่มีอยู่ในหน่วยความจำเพื่อหลีกเลี่ยงการสร้างขึ้นใหม่

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

วิธีการแก้ไข: การวิเคราะห์ที่มีรหัสประจำตัวที่ไม่ซ้ำกันถ้ามีอยู่ในหน่วยความจำรหัสประจำตัวที่ไม่ซ้ำกันของวัตถุที่ระบุจะถูกส่งกลับ

รหัสสำคัญ: HashMap เก็บไว้กับวัตถุเหล่านี้

ตัวอย่างการใช้งาน: 1, JAVA ในสตริงถ้ามันกลับมาถ้าไม่ได้แล้วสร้างสตริงเก็บไว้ในสระว่ายน้ำสตริงบัฟเฟอร์ภายใน2, ฐานข้อมูลข้อมูลที่สระว่ายน้ำ

ข้อดี: ลดการสร้างวัตถุลดหน่วยความจำของระบบเพื่อให้มีประสิทธิภาพดีขึ้น

ข้อเสีย: การเพิ่มขึ้นของค่าใช้จ่ายในระบบเราต้องแยกสถานะรัฐภายในและภายนอกและรัฐภายนอกของธรรมชาติเป็นอย่างโดยเนื้อแท้ไม่ควรเปลี่ยนกับรัฐภายในของการเปลี่ยนแปลงเป็นอย่างอื่นก็จะสร้างระบบความวุ่นวาย

สถานการณ์การใช้งาน: 1, ระบบที่มีจำนวนมากของวัตถุที่คล้ายกัน2 ต้องสระว่ายน้ำที่เกิดเหตุ

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

การสำนึก

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

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

FlyWeightPatternDemo สาธิตของเราที่จะได้รับการเรียนการใช้วัตถุรูปร่างShapeFactory มันจะส่งข้อมูล(แดง / สีเขียว / สีฟ้า / สีดำ/ สีขาว) เพื่อShapeFactory ก็ต้องเพื่อให้ได้สีของวัตถุ

รูปแบบฟลายเวทแผนภาพ UML

ขั้นตอนที่ 1

สร้างอินเตอร์เฟซ

Shape.java

รูปร่างอินเตอร์เฟซที่สาธารณะ {
   วาดเป็นโมฆะ ();
}

ขั้นตอนที่ 2

สร้างคลาสนิติบุคคลที่ใช้อินเตอร์เฟซ

Circle.java

วงกลมเรียนสาธารณะดำเนินรูปร่าง {
   สี String เอกชน
   int ส่วนตัว x;
   Y int เอกชน
   รัศมี int เอกชน

   วงกลมสาธารณะ (สี String) {
      this.color = สี;		
   }

   setX โมฆะสาธารณะ (int x) {
      this.x = x;
   }

   โมฆะสาธารณะ Sety (int y) {
      this.y y =;
   }

   โมฆะสาธารณะ setRadius (int รัศมี) {
      this.radius = รัศมี;
   }

   @Override
   วาดโมฆะสาธารณะ () {
      System.out.println ( "วงกลม: วาด () [สี:" + สี 
         + "X" + X + "Y:" + Y + "รัศมี:" + รัศมี);
   }
}

ขั้นตอนที่ 3

สร้างโรงงานเพื่อผลิตชั้นเรียนนิติบุคคลวัตถุที่อยู่บนพื้นฐานของข้อมูลที่ได้รับมา

ShapeFactory.java

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

ShapeFactory คลาสที่สาธารณะ {
   ส่วนตัวคง HashMap สุดท้าย <String, รูปร่าง> circleMap = HashMap ใหม่ ();

   สาธารณะคงรูปร่าง getCircle (สี String) {
      วงกลม = (วงกลม) circleMap.get (สี);

      ถ้า (วงกลม == null) {
         วงกลม = แวดวงใหม่ (สี);
         circleMap.put (สีวงกลม);
         System.out.println ( "การสร้างวงกลมสี:" + สี);
      }
      กลับวงกลม;
   }
}

ขั้นตอนที่ 4

ใช้โรงงานที่จะได้รับวัตถุนิติบุคคลของการเรียนโดยการส่งผ่านข้อมูลสี

FlyweightPatternDemo.java

เรียนสาธารณะ FlyweightPatternDemo {
   ส่วนตัวคงสี String สุดท้าย [] = 
      { "สีแดง" "กรีน", "สีฟ้า", "สีขาว", "สีดำ"};
   ประชาชนเป็นโมฆะคง main (String args []) {

      for (int i = 0; i <20; ++ i) {
         วงกลม = 
            (วงกลม) ShapeFactory.getCircle (getRandomColor ());
         circle.setX (getRandomX ());
         circle.setY (getRandomY ());
         circle.setRadius (100);
         circle.draw ();
      }
   }
   ส่วนตัวคงที่ String getRandomColor () {
      กลับสี [(int) (Math.random () * colors.length)];
   }
   ส่วนตัวคง int getRandomX () {
      ผลตอบแทน (int) (Math.random () * 100);
   }
   ส่วนตัวคง int getRandomY () {
      ผลตอบแทน (int) (Math.random () * 100);
   }
}

ขั้นตอนที่ 5

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

การสร้างวงกลมของสี: สีดำ
วงกลม: วาด () [สีดำ, x: 36, Y: 71, รัศมี: 100
การสร้างวงกลมสี: สีเขียว
วงกลม: วาด () [สี: สีเขียว X: 27 Y: 27, รัศมี: 100
การสร้างวงกลมของสี: สีขาว
วงกลม: วาด () [สี: สีขาว, x: 64, y: 10 รัศมี: 100
การสร้างวงกลมสี: สีแดง
วงกลม: วาด () [สี: สีแดง, X: 15 Y: 44, รัศมี: 100
วงกลม: วาด () [สี: สีเขียว X: 19 Y: 10 รัศมี: 100
วงกลม: วาด () [สี: สีเขียว, x: 94, y: 32, รัศมี: 100
วงกลม: วาด () [สี: สีขาว, x: 69, y: 98 รัศมี: 100
การสร้างวงกลมของสี: สีฟ้า
วงกลม: วาด () [สี: สีฟ้า, X: 13 Y: 4, รัศมี: 100
วงกลม: วาด () [สี: สีเขียว X: 21 Y: 21 รัศมี: 100
วงกลม: วาด () [สี: สีฟ้า, x: 55, y: 86 รัศมี: 100
วงกลม: วาด () [สี: สีขาว, x: 90, y: 70 รัศมี: 100
วงกลม: วาด () [สี: สีเขียว X: 78 Y: 3, รัศมี: 100
วงกลม: วาด () [สี: สีเขียว X: 64 Y: 89, รัศมี: 100
วงกลม: วาด () [สี: สีฟ้า, X: 3, y: 91 รัศมี: 100
วงกลม: วาด () [สี: สีฟ้า, x: 62, y: 82 รัศมี: 100
วงกลม: วาด () [สี: สีเขียว X: 97 Y: 61, รัศมี: 100
วงกลม: วาด () [สี: สีเขียว X: 86 Y: 12 รัศมี: 100
วงกลม: วาด () [สี: สีเขียว X: 38 Y: 93, รัศมี: 100
วงกลม: วาด () [สี: สีแดง, x: 76, y: 82 รัศมี: 100
วงกลม: วาด () [สี: สีฟ้า, X: 95 Y: 82 รัศมี: 100