|
Задача по проектированию.
|
|||
---|---|---|---|
#18+
Есть группа объектов домов( брусовые, кирпичные, щитовые и тд) - объекты A Есть группа объектов нагревателей ( газовые, электрические, печные и тд) -объекты B объекты B нагревают объекты A Пример ф-ций нагрева для объектов B, где B(t) температура нагреватателя газовые B1(t)=t*t , где t время электрические B2(t)=1.3*t и тд Пример ф-ций нагрева объектов A, где A(t) температура дома кирпичные A(t)=В(t)/2 щитовые A(t)=В(t)/3 и тд Подскажите, есть ли смысл использовать абстрактную фабрику? структурный код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2013, 11:55 |
|
Задача по проектированию.
|
|||
---|---|---|---|
#18+
Grigory_R, Не зная конечно всей задачи целиком, и основываясь лишь на предположениях - то я бы не стал использовать фабрику. У вас связь многие ко многим. Получается, что пока 2 нагревателя и 2 дома - нужно 6 классов в вашей реализации. Если система рассмотрена на расширение: Представьте что у вас есть третий вид нагревателя и третий вид дома - получается 3 (нагреватели) + 3 (дома) + 9 (дом + нагреватель) классов. Теперь прибавьте еще по одному дому и нагревателю - и представьте сколько писанины в коде вам придется делать, сколько классов создавать. Я бы сделал так (c#) Думаю на vb.net перевести труда не составит: З.Ы. Если функция A(t) всегда имеет вид A(t) = B(t) / coefficient, код можно упростить. З.Ы.Ы. Не претендую на идеал, это всего лишь вариант реализации, не зная всех исходных данных, но в сопровождении смотрится намного проще. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2013, 08:17 |
|
Задача по проектированию.
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2013, 08:36 |
|
Задача по проектированию.
|
|||
---|---|---|---|
#18+
Спасибо за ответы. LameUser, LameUserЗ.Ы. Если функция A(t) всегда имеет вид A(t) = B(t) / coefficient, код можно упростить. ну почему же, Ваш код будет работать и в случае A(t) = B(t) * Z(t) где Z(t) восприимчивость домом тепла (на пример кубич. корень t) . кстати, public static int GetTemperature(this HeaterType heaterType, int time), можно подменить вызовом виртуальных методов. Алексей К, согласен, что массив указателей на фун-ции напоминает работу с таблицей виртуальных методов всегда ли это допустимо, не возникнет ли сложностей при развитии проекта . ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2013, 09:27 |
|
Задача по проектированию.
|
|||
---|---|---|---|
#18+
Grigory_Rсогласен, что массив указателей на фун-цииДелегат - это пара указателей: метод + объект (необязателен). Grigory_Rнапоминает работу с таблицей виртуальных методовЕсли в ней один метод. Grigory_Rвсегда ли это допустимо, не возникнет ли сложностей при развитии проекта.Если в общем интерфейсе потребуется несколько методов, наверное, этот способ не подойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2013, 10:49 |
|
|
start [/forum/topic.php?fid=20&tid=1404715]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
123ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 369ms |
total: | 602ms |
0 / 0 |