Latest web development tutorials
×

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

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

设计模式其他

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

อะแดปเตอร์รุ่น

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

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

เราแสดงให้เห็นถึงการใช้โหมดอะแดปเตอร์จากตัวอย่างต่อไปนี้ ประเด็นอุปกรณ์เครื่องเล่นเสียงสามารถเล่นไฟล์ MP3 ที่จะเล่น VLC และ MP4 ไฟล์โดยใช้เครื่องเล่นเสียงที่สูงขึ้น

การแนะนำ

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

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

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

วิธีการแก้ไข: สืบทอดหรือการพึ่งพาอาศัยกัน (แนะนำ)

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

ตัวอย่างการใช้งาน: 1, สหรัฐอเมริกาไฟฟ้า 110V, จีน 220V ควรมีอะแดปเตอร์เข้า 110V 220V2, JAVA JDK 1.1 มีอินเตอร์เฟซการแจงนับและมีอินเตอร์เฟซ Iterator ใน 1.2 คุณต้องการใช้ 1.2 JDK ก่อนที่ระบบจะต้องได้รับการแปลงเป็นอินเตอร์เฟซการแจงนับอินเตอร์เฟซ Iterator แล้วคุณจำเป็นต้องมีรูปแบบอะแดปเตอร์ 3 เรียกใช้โปรแกรมบน Windows LINUX 4, JAVA ใน JDBC

ข้อดี: 1 สามารถทำให้ทุกชนิดของการดำเนินการใด ๆ รวมกันทั้งสองไม่เกี่ยวข้องกัน2 การปรับปรุงที่นำมาใช้ในชั้นเรียน 3 เพิ่มความโปร่งใสของการเรียน 4 ความยืดหยุ่นที่ดี

ข้อเสีย: 1, การใช้งานที่มากเกินไปของอะแดปเตอร์ทำให้ระบบยุ่งมากและยากที่จะเข้าใจทั้งหมดยกตัวอย่างเช่นการโทรนั้นจะเห็นได้อย่างชัดเจนอินเตอร์เฟซในความเป็นจริงนำไปปรับใช้เพื่อให้เกิดการติดต่อภายใน B ได้กลายเป็นระบบที่ว่านี้เกิดขึ้นมากเกินไปเป็นประหนึ่งการเกิดภัยพิบัติ ดังนั้นถ้ามันไม่จำเป็นที่คุณจะไม่สามารถใช้อะแดปเตอร์ แต่โดยตรงกับระบบสร้างขึ้นใหม่ 2. ณ วันที่ JAVA มากที่สุดรับช่วงชั้นดังนั้นในการปรับตัวการปรับตัวที่ดีที่สุดโดยชั้นเรียนและต้องกำหนดเป้าหมายระดับเป็นระดับนามธรรม

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

หมายเหตุ: อะแดปเตอร์จะไม่เพิ่มเมื่อการออกแบบรายละเอียด แต่จะแก้ปัญหาในโครงการบริการ

การสำนึก

เรามีอินเตอร์เฟซที่MediaPlayerและความตระหนักของชนชั้นนิติบุคคลอินเตอร์เฟซAudioPlayerMediaPlayerโดยค่าเริ่มต้นAudioPlayer สามารถเล่น MP3 รูปแบบไฟล์เสียง

เรายังมีอินเตอร์เฟซที่อื่นAdvancedMediaPlayerและดำเนินการเรียนนิติบุคคลอินเตอร์เฟซAdvancedMediaPlayerชั้นนี้สามารถเล่นไฟล์ VLC และรูปแบบ MP4

เราต้องการให้AudioPlayerเล่นไฟล์เสียงในรูปแบบอื่น ๆ เพื่อให้บรรลุนี้เราต้องสร้างชั้นอะแดปเตอร์ดำเนินการติดต่อMediaAdapterMediaPlayer และใช้วัตถุAdvancedMediaPlayerการเล่นรูปแบบที่ต้องการ

AudioPlayerใช้อะแดปเตอร์ระดับMediaAdapterโอนประเภทเสียงที่ต้องการไม่จำเป็นต้องรู้ว่ารูปแบบของชั้นที่เกิดขึ้นจริงสามารถเล่นความต้องการของเสียงAdapterPatternDemo เรียนสาธิตของเราโดยใช้ระดับAudioPlayer การเล่นหลากหลายรูปแบบ

รูปแบบอะแดปเตอร์แผนภาพ UML

ขั้นตอนที่ 1

ผู้เล่นและเล่นสื่อที่ทันสมัยมากขึ้นเพื่อสร้างอินเตอร์เฟซสำหรับสื่อ

MediaPlayer.java

MediaPlayer อินเตอร์เฟซที่สาธารณะ {
   ประชาชนเล่นเป็นโมฆะ (String audioType สตริง fileName);
}

AdvancedMediaPlayer.java

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

ขั้นตอนที่ 2

สร้างคลาสนิติบุคคลตระหนักถึงอินเตอร์เฟซAdvancedMediaPlayer

VlcPlayer.java

เรียนสาธารณะ VlcPlayer ดำเนิน AdvancedMediaPlayer {
   @Override
   โมฆะสาธารณะ playVlc (String fileName) {
      System.out.println ( "เล่น VLC ชื่อไฟล์ :. " + FileName);		
   }

   @Override
   โมฆะสาธารณะ playMp4 (String fileName) {
      // ไม่ทำอะไร}
}

Mp4Player.java

เรียนสาธารณะ Mp4Player ดำเนิน AdvancedMediaPlayer {

   @Override
   โมฆะสาธารณะ playVlc (String fileName) {
      // ไม่ทำอะไร}

   @Override
   โมฆะสาธารณะ playMp4 (String fileName) {
      System.out.println ( "เล่นชื่อไฟล์ MP4 :. " + FileName);		
   }
}

ขั้นตอนที่ 3

สร้างคลาสMediaPlayerใช้อะแดปเตอร์อินเตอร์เฟซ

MediaAdapter.java

เรียนสาธารณะ MediaAdapter ดำเนิน MediaPlayer {

   AdvancedMediaPlayer advancedMusicPlayer;

   ประชาชน MediaAdapter (String audioType) {
      ถ้า (audioType.equalsIgnoreCase ( "VLC")) {
         advancedMusicPlayer = ใหม่ VlcPlayer ();			
      } else if (audioType.equalsIgnoreCase ( "mp4")) {
         advancedMusicPlayer = Mp4Player ใหม่ ();
      }	
   }

   @Override
   เล่นโมฆะสาธารณะ (String audioType สตริงชื่อไฟล์) {
      ถ้า (audioType.equalsIgnoreCase ( "VLC")) {
         advancedMusicPlayer.playVlc (ชื่อไฟล์);
      } else if (audioType.equalsIgnoreCase ( "mp4")) {
         advancedMusicPlayer.playMp4 (ชื่อไฟล์);
      }
   }
}

ขั้นตอนที่ 4

สร้างคลาสนิติบุคคลตระหนักถึงอินเตอร์เฟซMediaPlayer

AudioPlayer.java

เรียนสาธารณะ AudioPlayer ดำเนิน MediaPlayer {
   MediaAdapter mediaAdapter; 

   @Override
   เล่นโมฆะสาธารณะ (String audioType สตริงชื่อไฟล์) {		

      // เล่นไฟล์เพลง MP3, การสนับสนุนในตัว (ถ้า audioType.equalsIgnoreCase ( "mp3")) {
         System.out.println ( "เล่นชื่อไฟล์ MP3 :. " + FileName);			
      } 
      // MediaAdapter ให้เล่นรูปแบบไฟล์อื่น ๆ ได้รับการสนับสนุนอื่นถ้า (audioType.equalsIgnoreCase ( "VLC") 
         || AudioType.equalsIgnoreCase ( "mp4")) {
         mediaAdapter = ใหม่ MediaAdapter (audioType);
         mediaAdapter.play (audioType ชื่อไฟล์);
      }
      อื่น {
         System.out.println ( "สื่อไม่ถูกต้อง." +
            audioType + "รูปแบบไม่สนับสนุน");
      }
   }   
}

ขั้นตอนที่ 5

AudioPlayer ใช้ในการเล่นที่แตกต่างกันของรูปแบบเสียง

AdapterPatternDemo.java

AdapterPatternDemo คลาสที่สาธารณะ {
   ประชาชนเป็นโมฆะคง main (String args []) {
      AudioPlayer Audioplayer = AudioPlayer ใหม่ ();

      audioPlayer.play ( "mp3", "เกิน horizon.mp3 ฯ ");
      audioPlayer.play ( "mp4", "alone.mp4");
      audioPlayer.play ( "VLC", "ไกล away.vlc");
      audioPlayer.play ( "AVI", "ใจ me.avi");
   }
}

ขั้นตอนที่ 6

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

เล่นชื่อไฟล์ MP3 :. นอกเหนือ horizon.mp3
เล่นไฟล์ MP4 ชื่อ :. Alone.mp4
เล่น VLC ชื่อไฟล์ :. ฟา away.vlc ไกล
สื่อไม่ถูกต้อง. รูปแบบ Avi ไม่สนับสนุน