Latest web development tutorials
×

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

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

设计模式其他

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

แบบโรงงานย่อ

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

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

การแนะนำ

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

เป็นหลักในการแก้ปัญหา: ปัญหาตัวเลือกหลักของอินเตอร์เฟซ

เมื่อใช้: ผลิตภัณฑ์ระบบมีครอบครัวสินค้ามากกว่าหนึ่งและระบบเดียวที่ครอบครัวของสินค้าอุปโภคบริโภค

วิธีการแก้ไข: ในครอบครัวสินค้าภายในกำหนดหลายผลิตภัณฑ์

รหัสสำคัญ: รวมผลิตภัณฑ์ที่คล้ายคลึงกันในหลายโรงงาน

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

จุดเด่น: เมื่อวัตถุครอบครัวผลิตภัณฑ์อื่น ๆ ได้รับการออกแบบให้ทำงานร่วมกันเราสามารถมั่นใจได้ว่าลูกค้ามักจะใช้เพียงแค่วัตถุผลิตภัณฑ์ในตระกูลเดียวกัน

ข้อเสีย: ผลิตภัณฑ์ในตระกูลขยายเป็นเรื่องยากมากที่จะเพิ่มความหลากหลายของผลิตภัณฑ์ทั้งในนามธรรมผู้สร้างรหัสริกา แต่ยังเพิ่มรหัสเฉพาะภายใน

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

หมายเหตุ: ผลิตภัณฑ์ในตระกูลขยายเป็นเรื่องยากและง่ายต่อการขยายระดับผลิตภัณฑ์

การสำนึก

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

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

แบบโรงงานย่อแผนภาพ UML

ขั้นตอนที่ 1

อินเตอร์เฟซในการสร้างรูปร่าง

Shape.java

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

ขั้นตอนที่ 2

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

Rectangle.java

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

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

Square.java

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

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

Circle.java

วงกลมเรียนสาธารณะดำเนินรูปร่าง {

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

ขั้นตอนที่ 3

สร้างอินเตอร์เฟซสำหรับสี

Color.java

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

ขั้นตอนที่ 4

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

Red.java

เรียนสาธารณะแดงใช้สี {

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

Green.java

เรียนสาธารณะกรีนใช้สี {

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

Blue.java

เรียนสาธารณะสีฟ้าใช้สี {

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

ขั้นตอนที่ 5

สร้างระดับนามธรรมสำหรับสีและรูปร่างของวัตถุที่จะได้รับจากโรงงาน

AbstractFactory.java

AbstractFactory ระดับนามธรรมสาธารณะ {
   นามธรรมสี getColor (String สี);
   รูปทรงนามธรรม getShape (รูปร่าง String);
}

ขั้นตอนที่ 6

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

ShapeFactory.java

เรียนสาธารณะ ShapeFactory ขยาย AbstractFactory {
	
   @Override
   รูปร่างประชาชน getShape (String shapeType) {
      ถ้า (shapeType == null) {
         กลับ NULL;
      }		
      ถ้า (shapeType.equalsIgnoreCase ( "วงกลม")) {
         กลับแวดวงใหม่ ();
      } else if (shapeType.equalsIgnoreCase ( "สี่เหลี่ยม")) {
         กลับสี่เหลี่ยมผืนผ้าใหม่ ();
      } else if (shapeType.equalsIgnoreCase ( "สแควร์")) {
         กลับสแควร์ใหม่ ();
      }
      กลับ NULL;
   }
   
   @Override
   สี getColor (สี String) {
      กลับ NULL;
   }
}

ColorFactory.java

เรียนสาธารณะ ColorFactory ขยาย AbstractFactory {
	
   @Override
   รูปร่างประชาชน getShape (String shapeType) {
      กลับ NULL;
   }
   
   @Override
   สี getColor (สี String) {
      ถ้า (สี == null) {
         กลับ NULL;
      }		
      ถ้า (color.equalsIgnoreCase ( "สีแดง")) {
         กลับสีแดงใหม่ ();
      } else if (color.equalsIgnoreCase ( "สีเขียว")) {
         กลับมาใหม่สีเขียว ();
      } else if (color.equalsIgnoreCase ( "สีฟ้า")) {
         กลับมาใหม่สีฟ้า ();
      }
      กลับ NULL;
   }
}

ขั้นตอนที่ 7

สร้างหมวดหมู่โรงงานผู้สร้าง / ผู้สร้างผ่านรูปร่างหรือสีที่จะได้รับข้อมูลโรงงาน

FactoryProducer.java

FactoryProducer คลาสที่สาธารณะ {
   สาธารณะคง getFactory AbstractFactory (String เลือก) {
      ถ้า (choice.equalsIgnoreCase ( "รูปร่าง")) {
         กลับ ShapeFactory ใหม่ ();
      } else if (choice.equalsIgnoreCase ( "COLOR")) {
         กลับ ColorFactory ใหม่ ();
      }
      กลับ NULL;
   }
}

ขั้นตอนที่ 8

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

AbstractFactoryPatternDemo.java

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

      // รับรูปร่างโรงงาน AbstractFactory shapeFactory = FactoryProducer.getFactory ( "รูปร่าง");

      // รับวัตถุทรงกลมรูปร่าง shape1 = shapeFactory.getShape ( "วงกลม");

      // เรียกวิธีการวาดของ shape1.draw วงกลม ();

      // รับวัตถุรูปทรงสี่เหลี่ยมผืนผ้ารูปร่าง shape2 = shapeFactory.getShape ( "สี่เหลี่ยม");

      // เรียกวิธีการวาดของ shape2.draw สี่เหลี่ยมผืนผ้า ();
      
      // รับวัตถุรูปร่างรูปทรงสี่เหลี่ยม shape3 = shapeFactory.getShape ( "สแควร์");

      // เรียกวิธีวาดรูปสี่เหลี่ยม shape3.draw ();

      // รับโรงงานสี AbstractFactory colorFactory = FactoryProducer.getFactory ( "COLOR");

      // ได้สีวัตถุเป็นสีแดง = COLOR1 colorFactory.getColor ( "สีแดง");

      // เรียกวิธีการเติม color1.fill แดง ();

      // ได้สีวัตถุสีเขียว color2 = colorFactory.getColor ( "สีเขียว");

      // เรียกวิธีการเติม color2.fill สีเขียว ();

      // ได้สีวัตถุสีฟ้า color3 = colorFactory.getColor ( "สีฟ้า");

      // เรียกวิธีการเติม color3.fill ฟ้า ();
   }
}

ขั้นตอนที่ 9

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

ภายในวงกลม :: วาด () วิธีการ
ภายในสี่เหลี่ยมผืนผ้า :: วาด () วิธีการ
ภายในจัตุรัส :: วาด () วิธีการ
ภายในสีแดง :: เติม () วิธีการ
ภายในสีเขียว :: เติม () วิธีการ
ภายในสีฟ้า :: เติม () วิธีการ