ທ່ານຈື່ຄວາມແຕກຕ່າງລະຫວ່າງຮູບແບບໂຮງງານທີ່ບໍ່ມີຕົວຕົນແລະວິທີການຂອງໂຮງງານໃນຮູບແບບການອອກແບບແນວໃດ?


ຕອບ 1:

ຮູບແບບການອອກແບບໂຮງງານ:

  • ມັນຕົກຢູ່ພາຍໃຕ້ຮູບແບບຂອງ Creational Design Pattern.Factory design ລະບຸວ່າການສ້າງວັດຖຸຖືກຈັດການໂດຍຫ້ອງຮຽນອື່ນໂດຍໃຊ້ປະເພດປ້ອນຂໍ້ມູນ.

ຂໍ້ດີ:

  • ມັນຊ່ວຍໃຫ້ມີການຈັບຄູ່ທີ່ວ່າງ.

ຮູບແບບການອອກແບບຂອງໂຮງງານແມ່ນໃຊ້ເມື່ອໃດ?

  • ຮູບແບບການອອກແບບຂອງໂຮງງານແມ່ນຖືກ ນຳ ໃຊ້ເມື່ອພວກເຮົາມີຊັ້ນ Super ທີ່ມີຫຼາຍຊັ້ນຮຽນຍ່ອຍແລະ ຈຳ ເປັນຕ້ອງໄດ້ກັບຄືນ ໜຶ່ງ ໃນຊັ້ນຍ່ອຍໂດຍອີງໃສ່ວັດສະດຸປ້ອນ. ຕົວຢ່າງ: ເມື່ອຮ້ານອາຫານຮັບໃຊ້ອາຫານເຈທີ່ບໍ່ແມ່ນນັກອາຫານເຈແລະອິຕາລີ. ປະຕິບັດຕໍ່ VegFood, NonVegFood ແລະ ItalianFood ເປັນສາມຊັ້ນ, ຊັ້ນຊັ້ນຕົ້ນແມ່ນອາຫານ. ເມື່ອລູກຄ້າຖາມ "Veg", ວິທີການຂອງໂຮງງານກັບຄືນຫ້ອງ "VegFood".

ຕົວຢ່າງ:

ຂັ້ນຕອນທີ 1: ສ້າງຊັ້ນຮຽນທີ່ບໍ່ມີຕົວຕົນ "ອາຫານ" ທີ່ມີຕົວແປສອງຢ່າງທີ່ເອີ້ນວ່າ "billPerPerson" ແລະ "ລາຍການ".

ອາຫານເສີຍໆທີ່ບໍ່ມີຕົວຕົນສາທາລະນະ {ປ້ອງກັນ billPerPerson ສອງເທົ່າ; ລາຍການທີ່ໄດ້ຮັບການປົກປ້ອງ; ອາຫານສາທາລະນະ (double billPerPerson) {this.billPerPerson = billPerPerson; this.items = HashSet ໃໝ່ <> (); } ສາທາລະນະ double getBill () {ກັບຄືນ billPerPerson; } public set getItems () {ບົດຄວາມກັບຄືນ; }}

ຂັ້ນຕອນທີ 2: ສ້າງຫ້ອງຮຽນຊີມັງທີ່ຂະຫຍາຍຊັ້ນຮຽນທີ່ບໍ່ມີຕົວຕົນ "ອາຫານ"

ຫ້ອງຮຽນສາທາລະນະ VegFood ຂະຫຍາຍອາຫານ {ສາທາລະນະ VegFood () {super (100); items.add ("Idly"); items.add ("Dosa"); items.add ("ວາດາ"); }} ຫ້ອງຮຽນສາທາລະນະ NonVegFood ຂະຫຍາຍອາຫານ {public NonVegFood () {super (120); items.add ("Biriyani"); items.add ("ໄກ່ 65"); }}

ຂັ້ນຕອນທີ 3: ສ້າງ FoodServer ທີ່ເປັນຊັ້ນໂຮງງານເພື່ອສ້າງວັດຖຸ ສຳ ລັບຄອນກີດໂດຍອີງໃສ່ຂໍ້ມູນຕໍ່ໄປນີ້:

ຫ້ອງຮຽນສາທາລະນະ FoodServer {public static Food getFood (string foodType) {ຖ້າ (foodType.equals ("veg")) {ກັບຄືນ ໃໝ່ VegFood (); } ອື່ນຖ້າ (foodType.equals ("non veg")) {ກັບຄືນ ໃໝ່ NonVegFood (); } else {System.out.println ("ພວກເຮົາບໍ່ໃຫ້ບໍລິການ" + foodType); return null; }}}

ຂັ້ນຕອນທີ 4: ຊັ້ນຕົ້ນຕໍ "ລູກຄ້າ" ເພື່ອໃຫ້ໄດ້ອາຫານທີ່ຕ້ອງການໂດຍອີງໃສ່ປະເພດອາຫານ.

ລູກຄ້າສາທາລະນະ {public static void main (String [] args) {food customer1Food = FoodServer.getFood ("veg"); System.out.println ("ລູກຄ້າ 1"); System.out.println ("ລາຍການ:" + customer1Food.getItems (). ToString ()); System.out.println ("ໃບບິນ:" + customer1Food.getBill ()); customer2Food ອາຫານ = FoodServer.getFood ("non veg"); System.out.println ("ລູກຄ້າ 1"); System.out.println ("ລາຍການ:" + customer2Food.getItems (). ToString ()); System.out.println ("ໃບບິນ:" + customer2Food.getBill ()); }}

ຮູບແບບການອອກແບບໂຮງງານຫຍໍ້:

  • ມັນຕົກຢູ່ພາຍໃຕ້ຮູບແບບການອອກແບບແບບ Creational. ມັນສະຫນອງການໂຕ້ຕອບສໍາລັບການສ້າງຄອບຄົວຂອງວັດຖຸທີ່ກ່ຽວຂ້ອງຫຼືເພິ່ງພາອາໄສໂດຍບໍ່ຕ້ອງລະບຸຊັ້ນຮຽນສະເພາະຂອງມັນ. ຮູບແບບໂຮງງານຫຍໍ້ແມ່ນໂຮງງານໃຫຍ່ທີ່ສົ່ງຄືນໂຮງງານທີ່ດີທີ່ສຸດໂດຍອີງໃສ່ວັດສະດຸປ້ອນ. ມັນເຮັດ ໜ້າ ທີ່ເປັນໂຮງງານຂອງໂຮງງານມັນເຮັດໃຫ້ລູກຄ້າຂາດຄວາມຮູ້ວ່າໂຮງງານໃດຈະຖືກສົ່ງຄືນ.

ຕົວຢ່າງຂອງຊີວິດຈິງ:

  • ຈິນຕະນາການໂຮງງານຜະລິດສະບູໃຫຍ່. ບໍ່ແມ່ນຜະລິດຕະພັນສະບູທັງ ໝົດ ທີ່ຜະລິດຢູ່ໃນໂຮງງານນີ້. ມີຫລາຍໂຮງງານຍ່ອຍທີ່ຜະລິດ "ບາສະບູ", "ການຫຸ້ມຫໍ່ສະບູ", ອື່ນໆ. ທຸກສິ່ງທຸກຢ່າງແມ່ນປະກອບໂດຍໂຮງງານຕົ້ນຕໍ.

ຮູບແບບການອອກແບບໂຮງງານຫຍໍ້ຫຍໍ້ຖືກໃຊ້ເມື່ອໃດ?

  • ລູກຄ້າຄວນຈະເປັນເອກະລາດຂອງວິທີການແລະວັດຖຸປະເພດຂອງວັດຖຸທີ່ຖືກສ້າງຂື້ນ. ມັນເປັນປະໂຫຍດເມື່ອວັດຖຸຕ້ອງໄດ້ຖືກສ້າງຂື້ນຈາກຄອບຄົວຊັ້ນຮຽນ.

ຫມາຍເຫດ: ມັນສາມາດສັບສົນ. ກວດເບິ່ງວິດີໂອທີ່ຂ້ອຍໄດ້ຝັງຢູ່ດ້ານລຸ່ມຂອງ ໜ້າ ນີ້.

ຕົວຢ່າງ:

ຂັ້ນຕອນທີ 1:

  • ສ້າງອິນເຕີເຟດທີ່ເອີ້ນວ່າ "ຫລັກສູດ".
ຫລັກສູດການໂຕ້ຕອບຂອງສາທາລະນະ {ສາທາລະນະ String getCourseName (); }

ຂັ້ນຕອນທີ 2:

  • ສ້າງຫ້ອງຮຽນສີມັງທີ່ປະຕິບັດການໂຕ້ຕອບ "ຫລັກສູດ".
ສາທາລະນະຫ້ອງຮຽນ ProgrammingCourse ປະຕິບັດຫຼັກສູດ {@Override public string String getCourseName () {return "Java"; }} ຫ້ອງຮຽນສາທາລະນະ NonProgrammingCourse ປະຕິບັດຫຼັກສູດ {@Override public String getCourseName () {return "DSP"; }}

ຂັ້ນຕອນທີ 3:

  • ສ້າງອິນເຕີເຟດທີ່ເອີ້ນວ່າ "ແຫຼ່ງຂໍ້ມູນ".
ແຫຼ່ງຂໍ້ມູນໂຕ້ຕອບສາທາລະນະ {ສາທາລະນະ getSourceName (); }

ຂັ້ນຕອນທີ 4:

  • ສ້າງຊັ້ນຮຽນຊີມັງທີ່ປະຕິບັດການໂຕ້ຕອບ "ແຫຼ່ງ".
ຫ້ອງຮຽນສາທາລະນະປະຕິບັດ offline ແຫຼ່ງຂໍ້ມູນ {@Override public String getSourceName () {ກັບຄືນ "ປື້ມ"; }} ຊັ້ນຮຽນສາທາລະນະ online ທີ່ປະຕິບັດແຫຼ່ງຂໍ້ມູນ {@override public string getSourceName () {ກັບຄືນ "YouTube"; }}

ຂັ້ນຕອນທີ 5:

  • ສ້າງຫ້ອງຮຽນທີ່ບໍ່ມີຕົວຕົນ "SourceCourseFactory".
ຫ້ອງຮຽນບົດຄັດຫຍໍ້ສາທາລະນະ SourceCourseFactory {ແຫຼ່ງຂໍ້ມູນທີ່ບໍ່ມີຕົວຕົນສາທາລະນະ getSource (String sourceType); getCourse ແບບບໍ່ມີຕົວຕົນສາທາລະນະ (string courseType); }

ຂັ້ນຕອນທີ 6:

  • ສ້າງຫ້ອງຮຽນໂຮງງານ CourseFactory ທີ່ຂະຫຍາຍ SourceCourseFactory.
ຫ້ອງຮຽນສາທາລະນະ CourseFactory ຂະຫຍາຍ SourceCourseFactory {@Override public source getSource (String sourceType) {return null; } @Override public Course getCourse (String courseType) {ຖ້າ (courseType.equalsIgnoreCase ("Programming")) {ສົ່ງຄືນ ProgrammingCourse ໃໝ່ (); } ອີກຖ້າຫາກວ່າ (courseType.equalsIgnoreCase ("ບໍ່ແມ່ນໂປແກຼມໂປແກຼມ")) {ກັບຄືນ ໃໝ່ NonProgrammingCourse (); } else {ກັບຄືນ null; }}}

ຂັ້ນຕອນທີ 7:

  • ສ້າງຊັ້ນໂຮງງານ SourceFactory ທີ່ຂະຫຍາຍ SourceCourseFactory.
ຫ້ອງຮຽນສາທາລະນະ SourceFactory ຂະຫຍາຍ SourceCourseFactory {@Override public source getSource (String sourceType) {ຖ້າ (sourceType.equalsIgnoreCase ("online")) {{ກັບຄືນ Online ໃໝ່ (); } ອີກຖ້າຫາກວ່າ (sourceType.equalsIgnoreCase ("offline")) {ກັບມາ Offline ໃໝ່ (); } else {ກັບຄືນ null; }} @Override public Course getCourse (ສະຕິງຕາມຫລັກສູດປະເພດ) {return null; }}

ຂັ້ນຕອນທີ 8:

  • ສ້າງຊັ້ນຮຽນຕົ້ນຕໍທີ່ເອີ້ນວ່າ Class Abstract Factory ເພື່ອເອົາວັດຖຸຫ້ອງຮຽນຂອງໂຮງງານແທ້, ແລະຈາກນັ້ນໃຊ້ວັດຖຸນັ້ນເພື່ອປະຕິບັດວຽກງານອື່ນ.
ຫ້ອງຮຽນສາທາລະນະ ExampleMain {public static void main (String [] args) {ຫລັກສູດການສອນຫຼັກສູດ = ໂຮງງານCreator.getSourceCourseFactory ("ຫລັກສູດ"); ລະບົບ .out.println (course.getCourse ("ການຂຽນໂປແກຼມ"). GetCourseName ()); ແຫຼ່ງຂໍ້ມູນ SourceCourseFactory = FactoryCreator.getSourceCourseFactory ("source"); ລະບົບ .out.println (source.getSource ("online"). GetSourceName ()); }}