@@ -122,8 +122,26 @@ abstract class ApplicationFramework {
122
122
123
123
abstract void customize1 ();
124
124
125
- abstract void customize2 (); // "private" means automatically "final": private void templateMethod() { IntStream.range(0, 5).forEach( n -> { customize1(); customize2(); }); }}// Create a new "application": class MyApp extends ApplicationFramework { @Override void customize1() { System.out.print("Hello "); }@Override
125
+ abstract void customize2 ();
126
+
127
+ // "private" means automatically "final":
128
+ private void templateMethod () {
129
+ IntStream . range(0 , 5 ). forEach(
130
+ n - > {
131
+ customize1();
132
+ customize2();
133
+ });
134
+ }
135
+ }
126
136
137
+ // Create a new "application":
138
+ class MyApp extends ApplicationFramework {
139
+ @Override
140
+ void customize1 () {
141
+ System . out. print(" Hello " );
142
+ }
143
+
144
+ @Override
127
145
void customize2 () {
128
146
System . out. println(" World!" );
129
147
}
@@ -134,8 +152,7 @@ public class TemplateMethod {
134
152
new MyApp ();
135
153
}
136
154
}
137
- /*
138
- Output:
155
+ /* Output:
139
156
Hello World!
140
157
Hello World!
141
158
Hello World!
@@ -245,8 +262,20 @@ class State implements StateBase {
245
262
@Override
246
263
public void changeImp (StateBase newImp ) {
247
264
implementation = newImp;
248
- }// Pass method calls to the implementation: @Override public void f() { implementation.f(); } @Override public void g() { implementation.g(); } @Override
265
+ }
249
266
267
+ // Pass method calls to the implementation:
268
+ @Override
269
+ public void f () {
270
+ implementation. f();
271
+ }
272
+
273
+ @Override
274
+ public void g () {
275
+ implementation. g();
276
+ }
277
+
278
+ @Override
250
279
public void h () {
251
280
implementation. h();
252
281
}
@@ -302,7 +331,8 @@ public class StateDemo {
302
331
}
303
332
304
333
public static void main (String [] args ) {
305
- StateBase b = new State (new Implementation1 ());
334
+ StateBase b =
335
+ new State (new Implementation1 ());
306
336
test(b);
307
337
b. changeImp(new Implementation2 ());
308
338
test(b);
@@ -349,9 +379,6 @@ interface State {
349
379
abstract class StateMachine {
350
380
protected State currentState;
351
381
352
- Nap (0 .5 );
353
- System.out.println ("Washing "); new
354
-
355
382
protected abstract boolean changeState ();
356
383
357
384
// Template method:
@@ -362,9 +389,12 @@ System.out.println("Washing"); new
362
389
}
363
390
364
391
// A different subclass for each state:
392
+
365
393
class Wash implements State {
366
394
@Override
367
395
public void run () {
396
+ System . out. println(" Washing" );
397
+ new Nap (0.5 );
368
398
}
369
399
}
370
400
@@ -386,9 +416,11 @@ class Rinse implements State {
386
416
387
417
class Washer extends StateMachine {
388
418
private int i = 0 ;
389
-
390
419
// The state table:
391
- private State [] states = {new Wash (), new Spin (), new Rinse (), new Spin (),};
420
+ private State [] states = {
421
+ new Wash (), new Spin (),
422
+ new Rinse (), new Spin (),
423
+ };
392
424
393
425
Washer () {
394
426
runAll();
@@ -401,7 +433,8 @@ class Washer extends StateMachine {
401
433
// surrogate reference to a new object:
402
434
currentState = states[i++ ];
403
435
return true ;
404
- } else return false ;
436
+ } else
437
+ return false ;
405
438
}
406
439
}
407
440
@@ -410,8 +443,7 @@ public class StateMachineDemo {
410
443
new Washer ();
411
444
}
412
445
}
413
- /*
414
- Output:
446
+ /* Output:
415
447
Washing
416
448
Spinning
417
449
Rinsing
0 commit comments