質問編集履歴

3

修正

2018/10/28 05:23

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -284,7 +284,7 @@
284
284
 
285
285
  for _, observer := range s.observers {
286
286
 
287
- nObserver(observer)
287
+ observer.notify()
288
288
 
289
289
  }
290
290
 
@@ -292,11 +292,11 @@
292
292
 
293
293
 
294
294
 
295
- func nObserver(n Notify) {
295
+ // func nObserver(n Notify) {
296
-
296
+
297
- n.notify()
297
+ // n.notify()
298
-
298
+
299
- }
299
+ // }
300
300
 
301
301
 
302
302
 

2

追記の追記

2018/10/28 05:23

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -233,3 +233,83 @@
233
233
  // 略
234
234
 
235
235
  ```
236
+
237
+
238
+
239
+
240
+
241
+ 【追記の追記】
242
+
243
+ nobonoboさんのヒントを元に再度修正してみました。
244
+
245
+ (最初の質問時のコードと整合性を取るために付け足しコードになっており、一部命名がおかしいと感じながらもそのままにしている部分があります)
246
+
247
+
248
+
249
+ 「Observerはnotify()メソッドを持ってさえいればいい」。
250
+
251
+ なので、Subject構造体のプロパティobserversの型は、Observer構造体ではなく、Notifyインターフェースであれば良いということでしょうか
252
+
253
+
254
+
255
+ ```go
256
+
257
+ type Subject struct {
258
+
259
+ name string
260
+
261
+ observers []Notify // ココ
262
+
263
+ }
264
+
265
+
266
+
267
+ func newSubject(name string) *Subject {
268
+
269
+ return &Subject{name: name, observers: []Notify{}} // ココ
270
+
271
+ }
272
+
273
+
274
+
275
+ func (s *Subject) addObserver(o Notify) { // ココ
276
+
277
+ s.observers = append(s.observers, o)
278
+
279
+ }
280
+
281
+
282
+
283
+ func (s Subject) notifyObservers() {
284
+
285
+ for _, observer := range s.observers {
286
+
287
+ nObserver(observer)
288
+
289
+ }
290
+
291
+ }
292
+
293
+
294
+
295
+ func nObserver(n Notify) {
296
+
297
+ n.notify()
298
+
299
+ }
300
+
301
+
302
+
303
+ // 具象クラス Observer
304
+
305
+ // =======================
306
+
307
+
308
+
309
+ type Notify interface {
310
+
311
+ notify()
312
+
313
+ }
314
+
315
+ ```

1

追記

2018/10/28 05:15

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -177,3 +177,59 @@
177
177
  どなたかご存知の方がいらっしゃればご教示願えませんでしょうか。
178
178
 
179
179
  よろしくおねがいします。
180
+
181
+
182
+
183
+ 【追記】
184
+
185
+ 少しひらめきました。
186
+
187
+ 以下のように書くというのはどうでしょうか。
188
+
189
+ Notifyインターフェースのみを受け付けるnObserver関数を別に用意し、それをfor文の中で実行しています。
190
+
191
+
192
+
193
+ ```go
194
+
195
+ // 略
196
+
197
+
198
+
199
+ func (s Subject) notifyObservers() {
200
+
201
+ for _, observer := range s.observers {
202
+
203
+ nObserver(observer)
204
+
205
+ }
206
+
207
+ }
208
+
209
+
210
+
211
+ func nObserver(n Notify) {
212
+
213
+ n.notify()
214
+
215
+ }
216
+
217
+
218
+
219
+ // 具象クラス Observer
220
+
221
+ // =======================
222
+
223
+
224
+
225
+ type Notify interface {
226
+
227
+ notify()
228
+
229
+ }
230
+
231
+
232
+
233
+ // 略
234
+
235
+ ```