प्रौद्योगिकी साझेदारी

डिजाइन पैटर्न निर्माता पैटर्न

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

डिजाइन-प्रतिमानयोः Builder Pattern इति सामान्यतया प्रयुक्तः वस्तुनिर्माण-डिजाइन-प्रतिरूपः अस्ति, यस्य उपयोगः मुख्यतया जटिल-वस्तुनिर्माण-समस्यानां समाधानार्थं भवति । अत्र builder mode इत्यस्य विस्तृतः परिचयः अस्ति ।

1. परिभाषा

निर्माता प्रतिमानं जटिलवस्तुनः निर्माणं तस्य प्रतिनिधित्वात् पृथक् करोति, येन समाननिर्माणप्रक्रिया भिन्नप्रतिपादनानि निर्मातुं शक्नोति । अन्येषु शब्देषु, जटिलवस्तूनाम् निर्माणप्रक्रियाम् सरलपदमालायां विभज्य एतेषां पदानां क्रमं मापदण्डं च निर्दिश्य उपयोक्तृभ्यः भिन्नानि वस्तूनि निर्मातुं अनुमतिं दत्त्वा कार्यं करोति

2. वर्गचित्रं संरचना च

कक्षा आरेख

बिल्डर् मोड् मध्ये प्रायः निम्नलिखित भूमिकाः समाविष्टाः भवन्ति ।

  1. उत्पाद भूमिका (उत्पाद) ९.: निर्माणं क्रियमाणं जटिलं वस्तु प्रतिनिधियति, यत्र प्रायः बहुघटकाः सन्ति ।
  2. अमूर्त निर्माता: उत्पादवस्तूनाम् विभिन्नघटकानाम् निर्माणार्थं अमूर्तं अन्तरफलकं परिभाषयन्तु ।
  3. कंक्रीटनिर्माता: Builder अन्तरफलकं कार्यान्वितं कुर्वन्तु, जटिल-उत्पादस्य प्रत्येकस्य घटकस्य विशिष्टानि निर्माण-विधयः सम्पूर्णं कुर्वन्तु, अन्तिम-उत्पादं प्रत्यागच्छति इति अन्तरफलकं परिभाषयन्तु ।
  4. निर्देशकः : जटिलवस्तूनाम् निर्माणं पूर्णं कर्तुं बिल्डर ऑब्जेक्ट् इत्यस्मिन् घटकनिर्माणं संयोजनविधिं च आह्वयितुं उत्तरदायी। अस्मिन् उत्पादविशिष्टसूचना न समाविष्टा, अपितु केवलं ग्राहकं निर्मातृणां वियुग्मनं करोति ।

3. प्रयोज्यपरिदृश्यानि

निर्माता प्रतिमानं निम्नलिखितपरिदृश्यानां कृते उपयुक्तम् अस्ति:

  1. वस्तुसंरचना जटिला भवति: यदा यस्य वस्तुनः निर्माणं कर्तव्यं तस्य जटिला आन्तरिकसंरचना भवति तथा च बहुगुणाः पद्धतयः च सन्ति तदा बिल्डर-प्रतिमानस्य उपयोगेन निर्माणप्रक्रिया सरलं कर्तुं शक्यते
  2. निर्माणप्रक्रिया जटिला अस्ति: यदा कस्यचित् वस्तुनः निर्माणप्रक्रियायां बहुपदानि सन्ति, तथा च एतेषां पदानां क्रमः, मापदण्डाः च भिन्नाः भवितुम् अर्हन्ति, तदा निर्माता प्रतिमानं स्पष्टं निर्माणप्रक्रियाम् अदातुम् अर्हति
  3. वियुग्मितं सृष्टिः उपयोगः च: यदा भवान् वस्तुनां निर्माणं उपयोगं च प्रक्रियां पृथक् कर्तुम् इच्छति येन उपयोक्तृभ्यः केवलं वस्तुनः अन्तिमप्रतिपादनस्य चिन्ता आवश्यकी भवति तथा च वस्तुनिर्माणस्य विवरणस्य चिन्ता न भवति तदा बिल्डर-प्रतिमानः उत्तमः विकल्पः भवति

4. लाभाः हानिः च

लाभ
  1. उत्तमं एन्कैप्सुलेशनम्: निर्मातुः अन्तः जटिलवस्तूनाम् निर्माणप्रक्रियाम् समाहितं कुर्वन्तु ग्राहकस्य केवलं निर्माणप्रक्रियायाः विवरणं न ज्ञात्वा अन्तिमउत्पादं प्राप्तुं निर्माणस्य प्रकारं मापदण्डं च निर्दिष्टुं आवश्यकम्।
  2. उत्तमं मापनीयता: यदि भवन्तः नूतनं बिल्ड् प्रकारं योजयितुं वा बिल्ड् प्रक्रियां परिवर्तयितुं वा इच्छन्ति तर्हि केवलं बिल्डर् क्लास् योजयितुं परिवर्तयितुं वा आवश्यकं भवति, यत् क्लायन्ट् कोड् प्रभावितं न करिष्यति ।
  3. उच्च लचीलता: निर्मातुः निर्माणक्रमं वा पैरामीटर् वा परिवर्त्य भिन्नानि उत्पाददृष्टान्तानि निर्मातुं लचीलापनम्।
अभावः
  1. वर्गानां संख्यां वर्धयन्तु: बिल्डर् इन्टरफेस्, विशिष्ट बिल्डर् क्लास्, सेमाण्डर् क्लास् इत्यादीनां बहुवर्गाणां निर्माणस्य आवश्यकतायाः कारणात् प्रणाल्यां क्लास्-सङ्ख्या वर्धिता भवितुम् अर्हति
  2. आन्तरिकसंशोधनस्य कठिनता: यदि उत्पादस्य आन्तरिकसंरचना परिवर्तते तर्हि बहुविधनिर्मातृवर्गाणां परिवर्तनस्य आवश्यकता भवितुम् अर्हति, येन प्रणाल्याः अनुरक्षणव्ययः वर्धते ।

5. उदाहरणम्

निम्नलिखित उदाहरणे वयं गृहस्य नवीनीकरणप्रणालीं डिजाइनं कर्तुं Builder pattern इत्यस्य उपयोगं करिष्यामः ।वयं क इति परिभाषयिष्यामःHouse वर्गाः जटिलवस्तूनि सन्ति येषु बहुविधाः अलङ्कारघटकाः (यथा छत, रङ्गः, तलः, तलस्य टाइल् इत्यादयः) सन्ति ।ततः, वयं क परिभाषयामःHouseBuilder एतेषां घटकानां निर्माणार्थं अमूर्तविधयः समाविष्टाः अन्तरफलकम् । तदनन्तरं, वयं प्रत्येकस्य विशिष्टस्य अलङ्कारशैल्याः कृते विशिष्टानि निर्मातावर्गाणि निर्मामः (यथा विलासिता यूरोपीयशैली, हल्की विलासिता गोपालनात्मकः, आधुनिकः न्यूनतमः)।अन्ते वयं कDirectorclass इति निर्माणप्रक्रियायाः मार्गदर्शनाय, परन्तु अस्मिन् उदाहरणे एतत् आवश्यकं न भवेत् यतः वयं builder class मध्ये प्रत्यक्षतया सम्पूर्णं building logic परिभाषितुं शक्नुमः ।

तथापि चालकभूमिकायाः ​​अवधारणां प्रदर्शयितुं वयं कDirectorclass, परन्तु केवलं दृष्टान्तार्थं, वस्तुतः निर्माणप्रक्रिया प्रत्यक्षतया निर्मातावर्गे कर्तुं शक्यते ।

  1. // 房屋类
  2. public class House {
  3. private String ceiling; // 吊顶
  4. private String paint; // 涂料
  5. private String floor; // 地板
  6. private String tiles; // 地砖
  7. // 私有构造函数
  8. private House() {}
  9. // Getter 方法
  10. public String getCeiling() {
  11. return ceiling;
  12. }
  13. public String getPaint() {
  14. return paint;
  15. }
  16. public String getFloor() {
  17. return floor;
  18. }
  19. public String getTiles() {
  20. return tiles;
  21. }
  22. // 建造者接口
  23. public interface HouseBuilder {
  24. HouseBuilder buildCeiling(String ceiling);
  25. HouseBuilder buildPaint(String paint);
  26. HouseBuilder buildFloor(String floor);
  27. HouseBuilder buildTiles(String tiles);
  28. House build();
  29. }
  30. // 豪华欧式建造者 ,注意是静态内部类
  31. public static class LuxuryEuropeanBuilder implements HouseBuilder {
  32. private House house;
  33. public LuxuryEuropeanBuilder() {
  34. this.house = new House();
  35. }
  36. @Override
  37. public HouseBuilder buildCeiling(String ceiling) {
  38. house.ceiling = "豪华欧式吊顶: " + ceiling;
  39. return this;
  40. }
  41. @Override
  42. public HouseBuilder buildPaint(String paint) {
  43. house.paint = "豪华欧式涂料: " + paint;
  44. return this;
  45. }
  46. @Override
  47. public HouseBuilder buildFloor(String floor) {
  48. house.floor = "豪华欧式地板: " + floor;
  49. return this;
  50. }
  51. @Override
  52. public HouseBuilder buildTiles(String tiles) {
  53. house.tiles = "豪华欧式地砖: " + tiles;
  54. return this;
  55. }
  56. @Override
  57. public House build() {
  58. return house;
  59. }
  60. }
  61. // ... 可以为其他风格创建类似的建造者类
  62. // 指挥者类(可选,这里主要用于展示概念)
  63. public static class Director {
  64. private HouseBuilder builder;
  65. public Director(HouseBuilder builder) {
  66. this.builder = builder;
  67. }
  68. // 这里可以添加方法来指导建造过程,但在这个例子中,我们直接在建造者中完成了所有工作
  69. public House constructHouse() {
  70. // 假设这是由指挥者指导的步骤,但在这里我们直接返回建造者的结果
  71. return builder
  72. .buildCeiling("水晶吊灯")
  73. .buildPaint("金色镶边涂料")
  74. .buildFloor("大理石地板")
  75. .buildTiles("马赛克地砖")
  76. .build();
  77. }
  78. }
  79. // 主函数,用于演示
  80. public static void main(String[] args) {
  81. HouseBuilder luxuryBuilder = new LuxuryEuropeanBuilder();
  82. // Director director = new Director(luxuryBuilder); // 如果使用指挥者
  83. House house = luxuryBuilder
  84. .buildCeiling("水晶吊灯")
  85. .buildPaint("金色镶边涂料")
  86. .buildFloor("大理石地板")
  87. .buildTiles("马赛克地砖")
  88. .build();
  89. System.out.println("Ceiling: " + house.getCeiling());
  90. System.out.println("Paint: " + house.getPaint());
  91. System.out.println("Floor: " + house.getFloor());
  92. System.out.println("Tiles: " + house.getTiles());
  93. }
  94. }

कृपया ज्ञातव्यं यत् अस्मिन् उदाहरणेDirectorवर्गाः वस्तुतः बहु मूल्यं न योजयन्ति यतः सर्वाणि build logic पूर्वमेव encapsulated अस्तिHouseBuilder अन्तरफलकं कार्यान्वितम् अस्ति । परन्तु अधिकजटिलप्रयोगेषु .Directorवर्गानां उपयोगः निर्माणप्रक्रियायाः क्रमं तर्कं च समाहितं कर्तुं शक्यते, विशेषतः यदा निर्माणप्रक्रिया बहुविधनिर्माणकर्तृभ्यः व्याप्ता भवति ।

6. उपसंहारः

उपर्युक्तपरिचयस्य माध्यमेन द्रष्टुं शक्यते यत् जटिलवस्तूनाम् निर्माणकाले निर्मातृप्रतिमानस्य महत् लाभं भवति यत् एतत् निर्माणप्रक्रियायाः प्रतिनिधित्वात् पृथक् कृत्वा कोडस्य एन्कैप्सुलेशनं, मापनीयतां च सुधरयति, तथा च ग्राहकस्य विशिष्टस्य च मध्ये संचारं न्यूनीकरोति उत्पादः मध्ये युग्मनस्य डिग्री।

यदि एषः लेखः भवतः अध्ययनाय सहायकः अस्ति तर्हि कृपया तत् पसन्दं कृत्वा संग्रहीतुं स्मर्यताम्।