From 67842acc6601c73343f2ed580e9a9190aa1e7997 Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Sun, 8 Jan 2023 21:51:23 +0100 Subject: [PATCH 01/37] Update readme.md --- chapter07_adapter_facade/readme.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/chapter07_adapter_facade/readme.md b/chapter07_adapter_facade/readme.md index 3710d57..caf3bd8 100644 --- a/chapter07_adapter_facade/readme.md +++ b/chapter07_adapter_facade/readme.md @@ -1,18 +1,23 @@ # Chapter 7: Adapter and Facade design patterns -I find myself using the adapter and facade patterns a lot when refactoring existing code. I know how I want it to work -and I know how it works now, but I don't have time _right now_ to fix it, so I add an adapter or facade to give it a clean -interface and I only change the underlying code if I need to make significant changes to the underlying implementation. - > **Adapter**: Converts the interface of a class into another interface the clients expect. Adapter lets classes work > together that couldn't otherwise because of incompatible interfaces. Compiled C modules in Python could be seen as examples of the adapter pattern: the Python implementation provides an interface for python code to work with the incompatible underlying C code. +I find the adapter pattern useful when using external libraries like skipy spatial to support my own code. +I want features from the external library but I want to use it with my own objects and the library api doesnt +exactly fit my own. I write a small adapter to make the external library feel right and work well with my own +objects. + > **Facade**: Provides a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level > interface that makes the subsystem easier to use. +I also find myself using the adapter and facade patterns a lot when refactoring existing code. I know how I want it to work +and I know how it works now, but I don't have time _right now_ to fix it, so I add an adapter or facade to give it a clean +interface and I make a plan to change the underlying code when it suits me. + The [pathlib](https://github.com/python/cpython/blob/main/Lib/pathlib.py) Python library provides a simplified high-level cross-platform interface to methods and attributes from the `os`, `sys`, `io` and other modules. From e0ef8d719d635dee26e8f2d28a4a984533b4569f Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Sun, 8 Jan 2023 22:10:10 +0100 Subject: [PATCH 02/37] correct code snippet --- chapter07_adapter_facade/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter07_adapter_facade/readme.md b/chapter07_adapter_facade/readme.md index caf3bd8..bf1e523 100644 --- a/chapter07_adapter_facade/readme.md +++ b/chapter07_adapter_facade/readme.md @@ -24,5 +24,5 @@ high-level cross-platform interface to methods and attributes from the `os`, `sy ## Running the code ```bash -python duck.py +python duck_adapter.py ``` From 133e3a0112c20ab8ea0d138879cf285fe836c7b5 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Mon, 9 Jan 2023 09:01:41 +0100 Subject: [PATCH 03/37] wip: home theatre facade working with only 2 / 7 separates --- .gitignore | 1 + chapter07_adapter_facade/home_theatre.py | 139 +++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 chapter07_adapter_facade/home_theatre.py diff --git a/.gitignore b/.gitignore index b616aca..446bb0e 100644 --- a/.gitignore +++ b/.gitignore @@ -130,3 +130,4 @@ dmypy.json # Pyre type checker .pyre/ .vscode/ +.idea/ \ No newline at end of file diff --git a/chapter07_adapter_facade/home_theatre.py b/chapter07_adapter_facade/home_theatre.py new file mode 100644 index 0000000..abe6e2f --- /dev/null +++ b/chapter07_adapter_facade/home_theatre.py @@ -0,0 +1,139 @@ +class Amplifier: + def __init__(self, description): + self.description = description + self.tuner = None + self.player = None + + def __str__(self): + return self.description + + def on(self): + print(f"{self.description} on") + + def off(self): + print(f"{self.description} off") + + def set_stereo_sound(self): + print(f"{self.description} stereo mode on") + + def set_surround_sound(self): + print(f"{self.description} surround sound on (5 speakers, 1 subwoofer)") + + def set_volume(self, level): + print(f"{self.description} setting volume to {level}") + + def set_tuner(self, tuner): + print(f"{self.description} setting tuner to {tuner}") + self.tuner = tuner + + def set_streaming_player(self, player): + print(f"{self.description} setting Streaming player to {player}") + self.player = player + + +class Tuner: + def __init__(self, description, amplifier): + self.description = description + self.amplifier = amplifier + self.frequency = None + + def __str__(self): + return self.description + + def on(self): + print(f"{self.description} on") + + def off(self): + print(f"{self.description} off") + + def set_frequency(self, frequency): + print(f"{self.description} setting frequency to {frequency}") + self.tuner = frequency + + def set_am(self): + print(f"{self.description} setting AM mode") + + def set_fm(self): + print(f"{self.description} setting FM mode") + + +class HomeTheaterFacade: + + def __init__(self, amp, tuner, + # player, + # projector, + # screen, + # lights, + # popper + ): + self.amp = amp + self.tuner = tuner + # self.player = player + # self.projector = projector + # self.screen = screen + # self.lights = lights + # self.popper = popper + + def watchMovie(self, movie): + print("Get ready to watch a movie...") + # self.popper.on() + # self.popper.pop() + # self.lights.dim(10) + # self.screen.down() + # self.projector.on() + # self.projector.wideScreenMode() + self.amp.on() + # self.amp.set_streaming_player(self.player) + self.amp.set_surround_sound() + self.amp.set_volume(5) + # self.player.on() + # self.player.play(movie) + + def endMovie(self): + print("Shutting movie theater down...") + # self.popper.off() + # self.lights.on() + # self.screen.up() + # self.projector.off() + self.amp.off() + # self.player.stop() + # self.player.off() + + def listenToRadio(self, frequency): + print("Tuning in the airwaves...") + self.tuner.on() + self.tuner.setFrequency(frequency) + self.amp.on() + self.amp.setVolume(5) + self.amp.setTuner(self.tuner) + + def endRadio(self): + print("Shutting down the tuner...") + self.tuner.off() + self.amp.off() + + +def theatre_test_drive(): + amp = Amplifier("Amplifier") + tuner = Tuner("AM/FM Tuner", amp) + # player = StreamingPlayer("Streaming Player", amp) + # cd = CdPlayer("CD Player", amp) + # projector = Projector("Projector", player) + # lights = TheaterLights("Theater Ceiling Lights") + # screen = Screen("Theater Screen") + # popper = PopcornPopper("Popcorn Popper") + + homeTheater = HomeTheaterFacade(amp, tuner, + # player, + # projector, + # screen, + # lights, + # popper + ) + + homeTheater.watchMovie("Raiders of the Lost Ark") + homeTheater.endMovie() + + +if __name__ == '__main__': + theatre_test_drive() From 8681ea94acbce7b452a478c35ca4a0cd649e4568 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Mon, 9 Jan 2023 09:10:05 +0100 Subject: [PATCH 04/37] refactor: tidy up --- chapter07_adapter_facade/__init__.py | 0 chapter07_adapter_facade/facade/__init__.py | 0 .../facade/home_theatre_facade.py | 54 +++++++ chapter07_adapter_facade/home_theatre.py | 133 ++---------------- .../separates/__init__.py | 0 .../separates/separates.py | 57 ++++++++ 6 files changed, 122 insertions(+), 122 deletions(-) create mode 100644 chapter07_adapter_facade/__init__.py create mode 100644 chapter07_adapter_facade/facade/__init__.py create mode 100644 chapter07_adapter_facade/facade/home_theatre_facade.py create mode 100644 chapter07_adapter_facade/separates/__init__.py create mode 100644 chapter07_adapter_facade/separates/separates.py diff --git a/chapter07_adapter_facade/__init__.py b/chapter07_adapter_facade/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/chapter07_adapter_facade/facade/__init__.py b/chapter07_adapter_facade/facade/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/chapter07_adapter_facade/facade/home_theatre_facade.py b/chapter07_adapter_facade/facade/home_theatre_facade.py new file mode 100644 index 0000000..cf007db --- /dev/null +++ b/chapter07_adapter_facade/facade/home_theatre_facade.py @@ -0,0 +1,54 @@ +class HomeTheaterFacade: + + def __init__(self, amp, tuner, + # player, + # projector, + # screen, + # lights, + # popper + ): + self.amp = amp + self.tuner = tuner + # self.player = player + # self.projector = projector + # self.screen = screen + # self.lights = lights + # self.popper = popper + + def watch_movie(self, movie): + print("Get ready to watch a movie...") + # self.popper.on() + # self.popper.pop() + # self.lights.dim(10) + # self.screen.down() + # self.projector.on() + # self.projector.wideScreenMode() + self.amp.on() + # self.amp.set_streaming_player(self.player) + self.amp.set_surround_sound() + self.amp.set_volume(5) + # self.player.on() + # self.player.play(movie) + + def end_movie(self): + print("Shutting movie theater down...") + # self.popper.off() + # self.lights.on() + # self.screen.up() + # self.projector.off() + self.amp.off() + # self.player.stop() + # self.player.off() + + def listen_to_radio(self, frequency): + print("Tuning in the airwaves...") + self.tuner.on() + self.tuner.setFrequency(frequency) + self.amp.on() + self.amp.setVolume(5) + self.amp.setTuner(self.tuner) + + def end_radio(self): + print("Shutting down the tuner...") + self.tuner.off() + self.amp.off() diff --git a/chapter07_adapter_facade/home_theatre.py b/chapter07_adapter_facade/home_theatre.py index abe6e2f..65433a7 100644 --- a/chapter07_adapter_facade/home_theatre.py +++ b/chapter07_adapter_facade/home_theatre.py @@ -1,116 +1,5 @@ -class Amplifier: - def __init__(self, description): - self.description = description - self.tuner = None - self.player = None - - def __str__(self): - return self.description - - def on(self): - print(f"{self.description} on") - - def off(self): - print(f"{self.description} off") - - def set_stereo_sound(self): - print(f"{self.description} stereo mode on") - - def set_surround_sound(self): - print(f"{self.description} surround sound on (5 speakers, 1 subwoofer)") - - def set_volume(self, level): - print(f"{self.description} setting volume to {level}") - - def set_tuner(self, tuner): - print(f"{self.description} setting tuner to {tuner}") - self.tuner = tuner - - def set_streaming_player(self, player): - print(f"{self.description} setting Streaming player to {player}") - self.player = player - - -class Tuner: - def __init__(self, description, amplifier): - self.description = description - self.amplifier = amplifier - self.frequency = None - - def __str__(self): - return self.description - - def on(self): - print(f"{self.description} on") - - def off(self): - print(f"{self.description} off") - - def set_frequency(self, frequency): - print(f"{self.description} setting frequency to {frequency}") - self.tuner = frequency - - def set_am(self): - print(f"{self.description} setting AM mode") - - def set_fm(self): - print(f"{self.description} setting FM mode") - - -class HomeTheaterFacade: - - def __init__(self, amp, tuner, - # player, - # projector, - # screen, - # lights, - # popper - ): - self.amp = amp - self.tuner = tuner - # self.player = player - # self.projector = projector - # self.screen = screen - # self.lights = lights - # self.popper = popper - - def watchMovie(self, movie): - print("Get ready to watch a movie...") - # self.popper.on() - # self.popper.pop() - # self.lights.dim(10) - # self.screen.down() - # self.projector.on() - # self.projector.wideScreenMode() - self.amp.on() - # self.amp.set_streaming_player(self.player) - self.amp.set_surround_sound() - self.amp.set_volume(5) - # self.player.on() - # self.player.play(movie) - - def endMovie(self): - print("Shutting movie theater down...") - # self.popper.off() - # self.lights.on() - # self.screen.up() - # self.projector.off() - self.amp.off() - # self.player.stop() - # self.player.off() - - def listenToRadio(self, frequency): - print("Tuning in the airwaves...") - self.tuner.on() - self.tuner.setFrequency(frequency) - self.amp.on() - self.amp.setVolume(5) - self.amp.setTuner(self.tuner) - - def endRadio(self): - print("Shutting down the tuner...") - self.tuner.off() - self.amp.off() +from facade.home_theatre_facade import HomeTheaterFacade +from separates.separates import Amplifier, Tuner def theatre_test_drive(): @@ -123,16 +12,16 @@ def theatre_test_drive(): # screen = Screen("Theater Screen") # popper = PopcornPopper("Popcorn Popper") - homeTheater = HomeTheaterFacade(amp, tuner, - # player, - # projector, - # screen, - # lights, - # popper - ) + home_theater = HomeTheaterFacade(amp, tuner, + # player, + # projector, + # screen, + # lights, + # popper + ) - homeTheater.watchMovie("Raiders of the Lost Ark") - homeTheater.endMovie() + home_theater.watch_movie("Raiders of the Lost Ark") + home_theater.end_movie() if __name__ == '__main__': diff --git a/chapter07_adapter_facade/separates/__init__.py b/chapter07_adapter_facade/separates/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/chapter07_adapter_facade/separates/separates.py b/chapter07_adapter_facade/separates/separates.py new file mode 100644 index 0000000..5ca383b --- /dev/null +++ b/chapter07_adapter_facade/separates/separates.py @@ -0,0 +1,57 @@ +class Amplifier: + def __init__(self, description): + self.description = description + self.tuner = None + self.player = None + + def __str__(self): + return self.description + + def on(self): + print(f"{self.description} on") + + def off(self): + print(f"{self.description} off") + + def set_stereo_sound(self): + print(f"{self.description} stereo mode on") + + def set_surround_sound(self): + print(f"{self.description} surround sound on (5 speakers, 1 subwoofer)") + + def set_volume(self, level): + print(f"{self.description} setting volume to {level}") + + def set_tuner(self, tuner): + print(f"{self.description} setting tuner to {tuner}") + self.tuner = tuner + + def set_streaming_player(self, player): + print(f"{self.description} setting Streaming player to {player}") + self.player = player + + +class Tuner: + def __init__(self, description, amplifier): + self.description = description + self.amplifier = amplifier + self.frequency = None + + def __str__(self): + return self.description + + def on(self): + print(f"{self.description} on") + + def off(self): + print(f"{self.description} off") + + def set_frequency(self, frequency): + print(f"{self.description} setting frequency to {frequency}") + self.frequency = frequency + + def set_am(self): + print(f"{self.description} setting AM mode") + + def set_fm(self): + print(f"{self.description} setting FM mode") From 6502c8c26b5a62143aa1b652704c03547af73080 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Mon, 9 Jan 2023 22:09:37 +0100 Subject: [PATCH 05/37] wip: home theatre facade working with only 3 / 7 separates --- .../facade/home_theatre_facade.py | 12 ++--- chapter07_adapter_facade/home_theatre.py | 6 +-- .../separates/separates.py | 49 ++++++++++++++++++- 3 files changed, 57 insertions(+), 10 deletions(-) diff --git a/chapter07_adapter_facade/facade/home_theatre_facade.py b/chapter07_adapter_facade/facade/home_theatre_facade.py index cf007db..9adaa03 100644 --- a/chapter07_adapter_facade/facade/home_theatre_facade.py +++ b/chapter07_adapter_facade/facade/home_theatre_facade.py @@ -1,7 +1,7 @@ class HomeTheaterFacade: def __init__(self, amp, tuner, - # player, + player, # projector, # screen, # lights, @@ -9,7 +9,7 @@ def __init__(self, amp, tuner, ): self.amp = amp self.tuner = tuner - # self.player = player + self.player = player # self.projector = projector # self.screen = screen # self.lights = lights @@ -27,8 +27,8 @@ def watch_movie(self, movie): # self.amp.set_streaming_player(self.player) self.amp.set_surround_sound() self.amp.set_volume(5) - # self.player.on() - # self.player.play(movie) + self.player.on() + self.player.play(movie) def end_movie(self): print("Shutting movie theater down...") @@ -37,8 +37,8 @@ def end_movie(self): # self.screen.up() # self.projector.off() self.amp.off() - # self.player.stop() - # self.player.off() + self.player.stop() + self.player.off() def listen_to_radio(self, frequency): print("Tuning in the airwaves...") diff --git a/chapter07_adapter_facade/home_theatre.py b/chapter07_adapter_facade/home_theatre.py index 65433a7..d8f7811 100644 --- a/chapter07_adapter_facade/home_theatre.py +++ b/chapter07_adapter_facade/home_theatre.py @@ -1,11 +1,11 @@ from facade.home_theatre_facade import HomeTheaterFacade -from separates.separates import Amplifier, Tuner +from separates.separates import Amplifier, Tuner, StreamingPlayer def theatre_test_drive(): amp = Amplifier("Amplifier") tuner = Tuner("AM/FM Tuner", amp) - # player = StreamingPlayer("Streaming Player", amp) + player = StreamingPlayer("Streaming Player", amp) # cd = CdPlayer("CD Player", amp) # projector = Projector("Projector", player) # lights = TheaterLights("Theater Ceiling Lights") @@ -13,7 +13,7 @@ def theatre_test_drive(): # popper = PopcornPopper("Popcorn Popper") home_theater = HomeTheaterFacade(amp, tuner, - # player, + player, # projector, # screen, # lights, diff --git a/chapter07_adapter_facade/separates/separates.py b/chapter07_adapter_facade/separates/separates.py index 5ca383b..f6e587c 100644 --- a/chapter07_adapter_facade/separates/separates.py +++ b/chapter07_adapter_facade/separates/separates.py @@ -47,7 +47,7 @@ def off(self): print(f"{self.description} off") def set_frequency(self, frequency): - print(f"{self.description} setting frequency to {frequency}") + print(f"{self.description} setting frequency to frequency") self.frequency = frequency def set_am(self): @@ -55,3 +55,50 @@ def set_am(self): def set_fm(self): print(f"{self.description} setting FM mode") + + +class StreamingPlayer: + def __init__(self, description, amplifier): + self.description = description + self.amplifier = amplifier + self.current_chapter = 0 + self.movie = None + + def __str__(self): + return self.description + + def on(self): + print(f"{self.description} on") + + def off(self): + print(f"{self.description} off") + + def play(self, arg): + if isinstance(arg, str): + self.movie = arg + self.current_chapter = 0 + print(self.description + " playing \"" + self.movie + "\"") + elif isinstance(arg, int): + if self.movie is None: + print(f"{self.description} can't play chapter {arg} no movie selected") + else: + self.current_chapter = arg + print( + f"{self.description} playing chapter {self.current_chapter}" + + " of \"" + + self.movie + + "\"" + ) + + def stop(self): + self.current_chapter = 0 + print(self.description + " stopped \"" + self.movie + "\"") + + def pause(self): + print(self.description + " paused \"" + self.movie + "\"") + + def set_two_channel_audio(self): + print(f"{self.description} set two channel audio") + + def set_surround_audio(self): + print(f"{self.description} set surround audio") From b70750b1433574b4688117a0d7000a308a94dd2d Mon Sep 17 00:00:00 2001 From: dancergraham Date: Mon, 9 Jan 2023 22:57:11 +0100 Subject: [PATCH 06/37] wip: home theatre facade working with 4 / 7 separates --- .../facade/home_theatre_facade.py | 10 ++++---- chapter07_adapter_facade/home_theatre.py | 6 ++--- .../separates/separates.py | 23 ++++++++++++++++++- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/chapter07_adapter_facade/facade/home_theatre_facade.py b/chapter07_adapter_facade/facade/home_theatre_facade.py index 9adaa03..4e54973 100644 --- a/chapter07_adapter_facade/facade/home_theatre_facade.py +++ b/chapter07_adapter_facade/facade/home_theatre_facade.py @@ -2,7 +2,7 @@ class HomeTheaterFacade: def __init__(self, amp, tuner, player, - # projector, + projector, # screen, # lights, # popper @@ -10,7 +10,7 @@ def __init__(self, amp, tuner, self.amp = amp self.tuner = tuner self.player = player - # self.projector = projector + self.projector = projector # self.screen = screen # self.lights = lights # self.popper = popper @@ -21,8 +21,8 @@ def watch_movie(self, movie): # self.popper.pop() # self.lights.dim(10) # self.screen.down() - # self.projector.on() - # self.projector.wideScreenMode() + self.projector.on() + self.projector.wide_screen_mode() self.amp.on() # self.amp.set_streaming_player(self.player) self.amp.set_surround_sound() @@ -35,7 +35,7 @@ def end_movie(self): # self.popper.off() # self.lights.on() # self.screen.up() - # self.projector.off() + self.projector.off() self.amp.off() self.player.stop() self.player.off() diff --git a/chapter07_adapter_facade/home_theatre.py b/chapter07_adapter_facade/home_theatre.py index d8f7811..177db8e 100644 --- a/chapter07_adapter_facade/home_theatre.py +++ b/chapter07_adapter_facade/home_theatre.py @@ -1,5 +1,5 @@ from facade.home_theatre_facade import HomeTheaterFacade -from separates.separates import Amplifier, Tuner, StreamingPlayer +from separates.separates import Amplifier, Tuner, StreamingPlayer, Projector def theatre_test_drive(): @@ -7,14 +7,14 @@ def theatre_test_drive(): tuner = Tuner("AM/FM Tuner", amp) player = StreamingPlayer("Streaming Player", amp) # cd = CdPlayer("CD Player", amp) - # projector = Projector("Projector", player) + projector = Projector("Projector", player) # lights = TheaterLights("Theater Ceiling Lights") # screen = Screen("Theater Screen") # popper = PopcornPopper("Popcorn Popper") home_theater = HomeTheaterFacade(amp, tuner, player, - # projector, + projector, # screen, # lights, # popper diff --git a/chapter07_adapter_facade/separates/separates.py b/chapter07_adapter_facade/separates/separates.py index f6e587c..8dfc09e 100644 --- a/chapter07_adapter_facade/separates/separates.py +++ b/chapter07_adapter_facade/separates/separates.py @@ -74,7 +74,7 @@ def off(self): print(f"{self.description} off") def play(self, arg): - if isinstance(arg, str): + if isinstance(arg, str): self.movie = arg self.current_chapter = 0 print(self.description + " playing \"" + self.movie + "\"") @@ -102,3 +102,24 @@ def set_two_channel_audio(self): def set_surround_audio(self): print(f"{self.description} set surround audio") + + +class Projector: + def __init__(self, description, player): + self.description = description + self.player = player + + def __str__(self): + return self.description + + def on(self): + print(f"{self.description} on") + + def off(self): + print(f"{self.description} off") + + def wide_screen_mode(self): + print(self.description + " in widescreen mode (16x9 aspect ratio)") + + def tv_mode(self): + print(self.description + " in tv mode (4x3 aspect ratio)") From f6717ac66f7e53e17184c86211b2f59764e3bdd4 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Tue, 10 Jan 2023 21:17:32 +0100 Subject: [PATCH 07/37] wip: home theatre facade working with 5 / 7 separates --- README.md | 2 +- .../facade/home_theatre_facade.py | 8 ++++---- chapter07_adapter_facade/home_theatre.py | 6 +++--- chapter07_adapter_facade/separates/separates.py | 12 ++++++++++++ 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 92b7020..65f408c 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ I have added examples of pattern usage in the Python standard library and pypi - - [x] [Singleton](chapter05_singleton) - [x] [Command](chapter06_command) - [x] [Adapter](chapter07_adapter_facade) -- [ ] [FaΓ§ade](chapter07_adapter_facade) +- [x] [FaΓ§ade](chapter07_adapter_facade) - [x] [Template Method](chapter08_template) - [x] [Iterator](chapter09_iterator_composite) - [ ] [Composite](chapter09_iterator_composite) diff --git a/chapter07_adapter_facade/facade/home_theatre_facade.py b/chapter07_adapter_facade/facade/home_theatre_facade.py index 4e54973..b70af76 100644 --- a/chapter07_adapter_facade/facade/home_theatre_facade.py +++ b/chapter07_adapter_facade/facade/home_theatre_facade.py @@ -3,7 +3,7 @@ class HomeTheaterFacade: def __init__(self, amp, tuner, player, projector, - # screen, + screen, # lights, # popper ): @@ -11,7 +11,7 @@ def __init__(self, amp, tuner, self.tuner = tuner self.player = player self.projector = projector - # self.screen = screen + self.screen = screen # self.lights = lights # self.popper = popper @@ -20,7 +20,7 @@ def watch_movie(self, movie): # self.popper.on() # self.popper.pop() # self.lights.dim(10) - # self.screen.down() + self.screen.down() self.projector.on() self.projector.wide_screen_mode() self.amp.on() @@ -34,7 +34,7 @@ def end_movie(self): print("Shutting movie theater down...") # self.popper.off() # self.lights.on() - # self.screen.up() + self.screen.up() self.projector.off() self.amp.off() self.player.stop() diff --git a/chapter07_adapter_facade/home_theatre.py b/chapter07_adapter_facade/home_theatre.py index 177db8e..bd2d65a 100644 --- a/chapter07_adapter_facade/home_theatre.py +++ b/chapter07_adapter_facade/home_theatre.py @@ -1,5 +1,5 @@ from facade.home_theatre_facade import HomeTheaterFacade -from separates.separates import Amplifier, Tuner, StreamingPlayer, Projector +from separates.separates import Amplifier, Tuner, StreamingPlayer, Projector, Screen def theatre_test_drive(): @@ -9,13 +9,13 @@ def theatre_test_drive(): # cd = CdPlayer("CD Player", amp) projector = Projector("Projector", player) # lights = TheaterLights("Theater Ceiling Lights") - # screen = Screen("Theater Screen") + screen = Screen("Theater Screen") # popper = PopcornPopper("Popcorn Popper") home_theater = HomeTheaterFacade(amp, tuner, player, projector, - # screen, + screen, # lights, # popper ) diff --git a/chapter07_adapter_facade/separates/separates.py b/chapter07_adapter_facade/separates/separates.py index 8dfc09e..c06ef73 100644 --- a/chapter07_adapter_facade/separates/separates.py +++ b/chapter07_adapter_facade/separates/separates.py @@ -123,3 +123,15 @@ def wide_screen_mode(self): def tv_mode(self): print(self.description + " in tv mode (4x3 aspect ratio)") + +class Screen: + def __init__(self, description): + self.description = description + def __str__(self): + return self.description + + def up(self): + print(f"{self.description} going up") + + def down(self): + print(f"{self.description} going down") From ca7db4f1320966ddb1c46010e3a2a3764281ccd4 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Wed, 11 Jan 2023 09:58:14 +0100 Subject: [PATCH 08/37] =?UTF-8?q?wip:=20home=20theatre=20facade=20working?= =?UTF-8?q?=20with=206=20/=207=20separates=20=F0=9F=94=89=F0=9F=93=BB?= =?UTF-8?q?=E2=8F=AF=EF=B8=8F=F0=9F=8E=A5=F0=9F=93=BA=F0=9F=92=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../facade/home_theatre_facade.py | 8 ++++---- chapter07_adapter_facade/home_theatre.py | 6 +++--- .../separates/separates.py | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/chapter07_adapter_facade/facade/home_theatre_facade.py b/chapter07_adapter_facade/facade/home_theatre_facade.py index b70af76..69d43ad 100644 --- a/chapter07_adapter_facade/facade/home_theatre_facade.py +++ b/chapter07_adapter_facade/facade/home_theatre_facade.py @@ -4,7 +4,7 @@ def __init__(self, amp, tuner, player, projector, screen, - # lights, + lights, # popper ): self.amp = amp @@ -12,14 +12,14 @@ def __init__(self, amp, tuner, self.player = player self.projector = projector self.screen = screen - # self.lights = lights + self.lights = lights # self.popper = popper def watch_movie(self, movie): print("Get ready to watch a movie...") # self.popper.on() # self.popper.pop() - # self.lights.dim(10) + self.lights.dim(10) self.screen.down() self.projector.on() self.projector.wide_screen_mode() @@ -33,7 +33,7 @@ def watch_movie(self, movie): def end_movie(self): print("Shutting movie theater down...") # self.popper.off() - # self.lights.on() + self.lights.on() self.screen.up() self.projector.off() self.amp.off() diff --git a/chapter07_adapter_facade/home_theatre.py b/chapter07_adapter_facade/home_theatre.py index bd2d65a..5ad1642 100644 --- a/chapter07_adapter_facade/home_theatre.py +++ b/chapter07_adapter_facade/home_theatre.py @@ -1,5 +1,5 @@ from facade.home_theatre_facade import HomeTheaterFacade -from separates.separates import Amplifier, Tuner, StreamingPlayer, Projector, Screen +from separates.separates import Amplifier, Tuner, StreamingPlayer, Projector, Screen, TheaterLights def theatre_test_drive(): @@ -8,7 +8,7 @@ def theatre_test_drive(): player = StreamingPlayer("Streaming Player", amp) # cd = CdPlayer("CD Player", amp) projector = Projector("Projector", player) - # lights = TheaterLights("Theater Ceiling Lights") + lights = TheaterLights("Theater Ceiling Lights") screen = Screen("Theater Screen") # popper = PopcornPopper("Popcorn Popper") @@ -16,7 +16,7 @@ def theatre_test_drive(): player, projector, screen, - # lights, + lights, # popper ) diff --git a/chapter07_adapter_facade/separates/separates.py b/chapter07_adapter_facade/separates/separates.py index c06ef73..899916e 100644 --- a/chapter07_adapter_facade/separates/separates.py +++ b/chapter07_adapter_facade/separates/separates.py @@ -124,9 +124,11 @@ def wide_screen_mode(self): def tv_mode(self): print(self.description + " in tv mode (4x3 aspect ratio)") + class Screen: def __init__(self, description): self.description = description + def __str__(self): return self.description @@ -135,3 +137,20 @@ def up(self): def down(self): print(f"{self.description} going down") + + +class TheaterLights: + def __init__(self, description): + self.description = description + + def __str__(self): + return self.description + + def on(self): + print(f"{self.description} on") + + def off(self): + print(f"{self.description} off") + + def dim(self, level): + print(f"{self.description} dimming to {level} %") From 14ecb1fcb1ffc69ab99d0166c19bdd9545bac81f Mon Sep 17 00:00:00 2001 From: dancergraham Date: Wed, 11 Jan 2023 12:12:10 +0100 Subject: [PATCH 09/37] =?UTF-8?q?wip:=20home=20theatre=20facade=20working?= =?UTF-8?q?=20with=207=20=20/=207=20separates=20=F0=9F=94=89=F0=9F=93=BB?= =?UTF-8?q?=E2=8F=AF=EF=B8=8F=F0=9F=8E=A5=F0=9F=93=BA=F0=9F=92=A1?= =?UTF-8?q?=F0=9F=8D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../facade/home_theatre_facade.py | 10 +++++----- chapter07_adapter_facade/home_theatre.py | 6 +++--- chapter07_adapter_facade/separates/separates.py | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/chapter07_adapter_facade/facade/home_theatre_facade.py b/chapter07_adapter_facade/facade/home_theatre_facade.py index 69d43ad..ded4aa5 100644 --- a/chapter07_adapter_facade/facade/home_theatre_facade.py +++ b/chapter07_adapter_facade/facade/home_theatre_facade.py @@ -5,7 +5,7 @@ def __init__(self, amp, tuner, projector, screen, lights, - # popper + popper ): self.amp = amp self.tuner = tuner @@ -13,12 +13,12 @@ def __init__(self, amp, tuner, self.projector = projector self.screen = screen self.lights = lights - # self.popper = popper + self.popper = popper def watch_movie(self, movie): print("Get ready to watch a movie...") - # self.popper.on() - # self.popper.pop() + self.popper.on() + self.popper.pop() self.lights.dim(10) self.screen.down() self.projector.on() @@ -32,7 +32,7 @@ def watch_movie(self, movie): def end_movie(self): print("Shutting movie theater down...") - # self.popper.off() + self.popper.off() self.lights.on() self.screen.up() self.projector.off() diff --git a/chapter07_adapter_facade/home_theatre.py b/chapter07_adapter_facade/home_theatre.py index 5ad1642..5b37d67 100644 --- a/chapter07_adapter_facade/home_theatre.py +++ b/chapter07_adapter_facade/home_theatre.py @@ -1,5 +1,5 @@ from facade.home_theatre_facade import HomeTheaterFacade -from separates.separates import Amplifier, Tuner, StreamingPlayer, Projector, Screen, TheaterLights +from separates.separates import Amplifier, Tuner, StreamingPlayer, Projector, Screen, TheaterLights, PopcornPopper def theatre_test_drive(): @@ -10,14 +10,14 @@ def theatre_test_drive(): projector = Projector("Projector", player) lights = TheaterLights("Theater Ceiling Lights") screen = Screen("Theater Screen") - # popper = PopcornPopper("Popcorn Popper") + popper = PopcornPopper("Popcorn Popper") home_theater = HomeTheaterFacade(amp, tuner, player, projector, screen, lights, - # popper + popper ) home_theater.watch_movie("Raiders of the Lost Ark") diff --git a/chapter07_adapter_facade/separates/separates.py b/chapter07_adapter_facade/separates/separates.py index 899916e..37b6a9f 100644 --- a/chapter07_adapter_facade/separates/separates.py +++ b/chapter07_adapter_facade/separates/separates.py @@ -154,3 +154,20 @@ def off(self): def dim(self, level): print(f"{self.description} dimming to {level} %") + + +class PopcornPopper: + def __init__(self, description): + self.description = description + + def __str__(self): + return self.description + + def on(self): + print(f"{self.description} on") + + def off(self): + print(f"{self.description} off") + + def pop(self): + print(f"{self.description} popping popcorn!") From c19ee03bb7a78a44d677eb2f5c8e83282ccfb44f Mon Sep 17 00:00:00 2001 From: dancergraham Date: Wed, 11 Jan 2023 12:13:08 +0100 Subject: [PATCH 10/37] fix: uncomment streaming player --- chapter07_adapter_facade/facade/home_theatre_facade.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter07_adapter_facade/facade/home_theatre_facade.py b/chapter07_adapter_facade/facade/home_theatre_facade.py index ded4aa5..9251ab8 100644 --- a/chapter07_adapter_facade/facade/home_theatre_facade.py +++ b/chapter07_adapter_facade/facade/home_theatre_facade.py @@ -24,7 +24,7 @@ def watch_movie(self, movie): self.projector.on() self.projector.wide_screen_mode() self.amp.on() - # self.amp.set_streaming_player(self.player) + self.amp.set_streaming_player(self.player) self.amp.set_surround_sound() self.amp.set_volume(5) self.player.on() From 6330da1b38dc6d381616b55b38b514fce2fd5d78 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Wed, 11 Jan 2023 18:21:27 +0100 Subject: [PATCH 11/37] =?UTF-8?q?feature:=20home=20theatre=20facade=20work?= =?UTF-8?q?ing=20=F0=9F=8E=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../separates/separates.py | 55 ++++++++++++++++--- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/chapter07_adapter_facade/separates/separates.py b/chapter07_adapter_facade/separates/separates.py index 37b6a9f..436f989 100644 --- a/chapter07_adapter_facade/separates/separates.py +++ b/chapter07_adapter_facade/separates/separates.py @@ -77,25 +77,22 @@ def play(self, arg): if isinstance(arg, str): self.movie = arg self.current_chapter = 0 - print(self.description + " playing \"" + self.movie + "\"") + print(f'{self.description} playing "{self.movie}"') elif isinstance(arg, int): if self.movie is None: print(f"{self.description} can't play chapter {arg} no movie selected") else: self.current_chapter = arg print( - f"{self.description} playing chapter {self.current_chapter}" - + " of \"" - + self.movie - + "\"" + f'{self.description} playing chapter {self.current_chapter} of "{self.movie}"' ) def stop(self): self.current_chapter = 0 - print(self.description + " stopped \"" + self.movie + "\"") + print(f'{self.description} stopped "{self.movie}"') def pause(self): - print(self.description + " paused \"" + self.movie + "\"") + print(f'{self.description} paused "{self.movie}"') def set_two_channel_audio(self): print(f"{self.description} set two channel audio") @@ -104,6 +101,46 @@ def set_surround_audio(self): print(f"{self.description} set surround audio") +class CdPlayer: + def __init__(self, description, amplifier): + self.description = description + self.current_track = 0 + self.amplifier = amplifier + self.title = None + + def __str__(self): + return self.description + + def on(self): + print(f"{self.description} on") + + def off(self): + print(f"{self.description} off") + + def play(self, arg): + if isinstance(arg, str): + self.title = arg + self.current_track = 0 + print(f'{self.description} playing "{self.movie}"') + elif isinstance(arg, int): + if self.title is None: + print(f"{self.description} can't play track {self.current_track}, no cd inserted") + else: + self.current_track = arg + print( + f'{self.description} playing track {self.current_track}' + ) + + def eject(self): + print(f'{self.description} eject') + + def stop(self): + print(f'{self.description} stopped') + + def pause(self): + print(f'{self.description} paused "{self.title}"') + + class Projector: def __init__(self, description, player): self.description = description @@ -119,10 +156,10 @@ def off(self): print(f"{self.description} off") def wide_screen_mode(self): - print(self.description + " in widescreen mode (16x9 aspect ratio)") + print(f"{self.description} in widescreen mode (16x9 aspect ratio)") def tv_mode(self): - print(self.description + " in tv mode (4x3 aspect ratio)") + print(f"{self.description} in tv mode (4x3 aspect ratio)") class Screen: From 91b036984990ba8298765716f0ca265583b2cb85 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Wed, 11 Jan 2023 18:27:27 +0100 Subject: [PATCH 12/37] refactor: rename subcomponents --- chapter07_adapter_facade/home_theatre.py | 2 +- chapter07_adapter_facade/readme.md | 6 ++++++ .../{separates => subcomponents}/__init__.py | 0 .../{separates => subcomponents}/separates.py | 6 ++---- 4 files changed, 9 insertions(+), 5 deletions(-) rename chapter07_adapter_facade/{separates => subcomponents}/__init__.py (100%) rename chapter07_adapter_facade/{separates => subcomponents}/separates.py (96%) diff --git a/chapter07_adapter_facade/home_theatre.py b/chapter07_adapter_facade/home_theatre.py index 5b37d67..5b0550a 100644 --- a/chapter07_adapter_facade/home_theatre.py +++ b/chapter07_adapter_facade/home_theatre.py @@ -1,5 +1,5 @@ from facade.home_theatre_facade import HomeTheaterFacade -from separates.separates import Amplifier, Tuner, StreamingPlayer, Projector, Screen, TheaterLights, PopcornPopper +from subcomponents.separates import Amplifier, Tuner, StreamingPlayer, Projector, Screen, TheaterLights, PopcornPopper def theatre_test_drive(): diff --git a/chapter07_adapter_facade/readme.md b/chapter07_adapter_facade/readme.md index 3710d57..7204670 100644 --- a/chapter07_adapter_facade/readme.md +++ b/chapter07_adapter_facade/readme.md @@ -18,6 +18,12 @@ high-level cross-platform interface to methods and attributes from the `os`, `sy ## Running the code +### Adapter ```bash python duck.py ``` + +### Facade +```bash +python home_theatre.py +``` diff --git a/chapter07_adapter_facade/separates/__init__.py b/chapter07_adapter_facade/subcomponents/__init__.py similarity index 100% rename from chapter07_adapter_facade/separates/__init__.py rename to chapter07_adapter_facade/subcomponents/__init__.py diff --git a/chapter07_adapter_facade/separates/separates.py b/chapter07_adapter_facade/subcomponents/separates.py similarity index 96% rename from chapter07_adapter_facade/separates/separates.py rename to chapter07_adapter_facade/subcomponents/separates.py index 436f989..9cdaab4 100644 --- a/chapter07_adapter_facade/separates/separates.py +++ b/chapter07_adapter_facade/subcomponents/separates.py @@ -121,15 +121,13 @@ def play(self, arg): if isinstance(arg, str): self.title = arg self.current_track = 0 - print(f'{self.description} playing "{self.movie}"') + print(f'{self.description} playing "{self.title}"') elif isinstance(arg, int): if self.title is None: print(f"{self.description} can't play track {self.current_track}, no cd inserted") else: self.current_track = arg - print( - f'{self.description} playing track {self.current_track}' - ) + print(f'{self.description} playing track {self.current_track}') def eject(self): print(f'{self.description} eject') From 14414ac304e065d2b2445c3e0aef144d9d56bc8e Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Wed, 11 Jan 2023 18:30:03 +0100 Subject: [PATCH 13/37] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 65f408c..68160cd 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -# HeadFirstDesignPatterns_python +# Head First Design Patterns python code Head First Design Patterns Second EditionExample code from [Head First Design Patterns second edition](https://www.wickedlysmart.com/head-first-design-patterns/) translated to python to help me understand and memorise the patterns. I have added examples of pattern usage in the Python standard library and pypi - I am starting to see patterns everywhere! > **Note** -> I am aiming for a reasonably literal translation whilst trying to make the code a little more pythonic by, e.g. using python conventions for `ClassNames` and `method_names` and putting all of the code in a single file where it makes sense to do so. +> I am aiming for a mostly literal translation whilst trying to make the code a little more pythonic by, e.g. using python conventions for `ClassNames` and `method_names` and putting all of the code in a single file where it makes sense to do so. ## Patterns Implemented From 21790e98710dbab6f4116b6f1c9ec9aa87038ad4 Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Tue, 21 Feb 2023 21:44:35 +0100 Subject: [PATCH 14/37] =?UTF-8?q?doc:=20builder=20pattern=20=F0=9F=91=B7?= =?UTF-8?q?=F0=9F=8F=BB=E2=80=8D=E2=99=80=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit keep on building --- chapter04_factory/readme.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/chapter04_factory/readme.md b/chapter04_factory/readme.md index 9361761..98e6a1b 100644 --- a/chapter04_factory/readme.md +++ b/chapter04_factory/readme.md @@ -24,6 +24,11 @@ Rhino. For instance the `PizzaIngredientFactory` abstract class defines an interface for a family of products. +** Builder ** + +When the object creation gets more complex with a number of distinct steps then the Builder pattern comes in, +esseantially using a Template method to put all of the creation steps together. + ## Running the code ```bash From 665da9d192c7307ca748ee917cb1b64034bd08ec Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Tue, 21 Feb 2023 21:45:12 +0100 Subject: [PATCH 15/37] =?UTF-8?q?doc:=20builder=20pattern=20=F0=9F=91=B7?= =?UTF-8?q?=F0=9F=8F=BB=E2=80=8D=E2=99=80=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapter04_factory/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter04_factory/readme.md b/chapter04_factory/readme.md index 98e6a1b..fc69209 100644 --- a/chapter04_factory/readme.md +++ b/chapter04_factory/readme.md @@ -24,7 +24,7 @@ Rhino. For instance the `PizzaIngredientFactory` abstract class defines an interface for a family of products. -** Builder ** +**Builder πŸ‘·πŸ»β€β™€οΈ** When the object creation gets more complex with a number of distinct steps then the Builder pattern comes in, esseantially using a Template method to put all of the creation steps together. From c0b777526377b8dbf88b5217642d6f584267a5be Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Sat, 18 Mar 2023 09:17:48 +0100 Subject: [PATCH 16/37] doc: factory documentation and examples Experimenting with new format --- chapter04_factory/readme.md | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/chapter04_factory/readme.md b/chapter04_factory/readme.md index fc69209..88d9f17 100644 --- a/chapter04_factory/readme.md +++ b/chapter04_factory/readme.md @@ -1,30 +1,41 @@ # Chapter 4: Factory patterns -> **Simple Factory**: A class which chooses which product class to instantiate and return, based upon method parameters. +## Simple Factory -The Python standard library contains multiple references to factory objects, for instances -in [dataclasses](https://docs.python.org/3/library/dataclasses.html?highlight=factory). -The Factory Boy package provides easy object creation for Django -and for other ORMs. +> A class which chooses which product class to instantiate and return, based upon method parameters. -> **Factory Method**: Defines an interface for creating an object, but lets subclasses decide which class to +### Pythonic Examples + +The Python standard library contains multiple references to factory objects, for instance +[namedtuple](https://docs.python.org/3/library/collections.html#collections.namedtuple) +and [dataclasses](https://docs.python.org/3/library/dataclasses.html#module-dataclasses) +are factories for creating classes. +The Factory Boy package provides easy object creation for Django and for other ORMs. + +## Factory Method + +> Defines an interface for creating an object, but lets subclasses decide which class to > instantiate. The Factory method lets a class defer instantiation to subclasses. For instance the `PizzaStore` abstract class in this repo provides an abstract `create_pizza` interface for creating one product. +### Pythonic Examples + The [python-qrcode](https://github.com/dancergraham/python-qrcode) module uses the factory method pattern nicely to separate only the part of the code that changes (generating png, svg, etc.) from the underlying logic of the code generation and to allow extension through the creation of new factory methods without modification of the existing code. I took advantage of this to add a new class for the creation of 3D QR codes with my favourite NURBS modelling software -Rhino. +Rhino - it was super simple once I understood the pattern. + +## Abstract Factory -> **Abstract Factory**: Provides an interface for creating families of related or dependent objects without specifying +> Provides an interface for creating families of related or dependent objects without specifying > their concrete classes. For instance the `PizzaIngredientFactory` abstract class defines an interface for a family of products. -**Builder πŸ‘·πŸ»β€β™€οΈ** +## Builder πŸ‘·πŸ»β€β™€οΈ When the object creation gets more complex with a number of distinct steps then the Builder pattern comes in, esseantially using a Template method to put all of the creation steps together. From 094a49410b0eee50f1b918f2363d5e25d762ea1d Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Sat, 18 Mar 2023 09:22:34 +0100 Subject: [PATCH 17/37] =?UTF-8?q?doc:=20emojis=20=F0=9F=A5=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chapter04_factory/readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/chapter04_factory/readme.md b/chapter04_factory/readme.md index 88d9f17..f9c0d6b 100644 --- a/chapter04_factory/readme.md +++ b/chapter04_factory/readme.md @@ -1,6 +1,6 @@ # Chapter 4: Factory patterns -## Simple Factory +## Simple Factory 🚧 > A class which chooses which product class to instantiate and return, based upon method parameters. @@ -12,7 +12,7 @@ and [dataclasses](https://docs.python.org/3/library/dataclasses.html#module-data are factories for creating classes. The Factory Boy package provides easy object creation for Django and for other ORMs. -## Factory Method +## Factory Method πŸ“‹ > Defines an interface for creating an object, but lets subclasses decide which class to > instantiate. The Factory method lets a class defer instantiation to subclasses. @@ -28,14 +28,14 @@ generation and to allow extension through the creation of new factory methods wi I took advantage of this to add a new class for the creation of 3D QR codes with my favourite NURBS modelling software Rhino - it was super simple once I understood the pattern. -## Abstract Factory +## Abstract Factory 🏭 > Provides an interface for creating families of related or dependent objects without specifying > their concrete classes. For instance the `PizzaIngredientFactory` abstract class defines an interface for a family of products. -## Builder πŸ‘·πŸ»β€β™€οΈ +## Builder πŸ‘·πŸ»β€β™€οΈπŸ—οΈ When the object creation gets more complex with a number of distinct steps then the Builder pattern comes in, esseantially using a Template method to put all of the creation steps together. From c860aa899e8de14c3a430d17b2dbeba0f7c4bd6f Mon Sep 17 00:00:00 2001 From: dancergraham Date: Sun, 2 Apr 2023 14:20:49 +0200 Subject: [PATCH 18/37] doc: UML diagram --- chapter02_observer/readme.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/chapter02_observer/readme.md b/chapter02_observer/readme.md index 45cebe3..1b754a6 100644 --- a/chapter02_observer/readme.md +++ b/chapter02_observer/readme.md @@ -9,6 +9,40 @@ for instance, in Django. As I wrote out the code I found it very appealing that I did not need to change the subject at all to add new observers. +### Class Diagram + +```mermaid + +classDiagram + + Subject <-- Observer : observers + Subject1 <-- Observer1 : subject + Subject1 <-- Observer2 : subject + Subject <|-- Subject1 + Observer <|-- Observer1 + Observer <|-- Observer2 + Subject : attach(o) + Subject : detach(o) + Subject: notify() + class Observer{ + +update() + } + class Subject1{ + state + get_state() + set_state() + } + class Observer1{ + state + update() + } + class Observer2{ + state + update() + } + +``` + ## Running the code ```bash From 12cc5e71d5a2961b8db7b6a93b6eb2f5cc60e84c Mon Sep 17 00:00:00 2001 From: dancergraham Date: Sun, 2 Apr 2023 14:23:22 +0200 Subject: [PATCH 19/37] doc: UML diagram --- chapter02_observer/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapter02_observer/readme.md b/chapter02_observer/readme.md index 1b754a6..cf297a1 100644 --- a/chapter02_observer/readme.md +++ b/chapter02_observer/readme.md @@ -15,7 +15,7 @@ to change the subject at all to add new observers. classDiagram - Subject <-- Observer : observers + Subject --> Observer : observers Subject1 <-- Observer1 : subject Subject1 <-- Observer2 : subject Subject <|-- Subject1 @@ -25,7 +25,7 @@ classDiagram Subject : detach(o) Subject: notify() class Observer{ - +update() + update() } class Subject1{ state From f528b8c14e126fced9e3646dea6d5facb0879b94 Mon Sep 17 00:00:00 2001 From: dancergraham Date: Mon, 8 May 2023 21:22:41 +0200 Subject: [PATCH 20/37] doc: Manager design pattern --- README.md | 1 + chapter14_leftover/readme.md | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 chapter14_leftover/readme.md diff --git a/README.md b/README.md index 68160cd..3c9c8b6 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ I have added examples of pattern usage in the Python standard library and pypi - - [x] [State](chapter10_state) - [ ] Proxy - [ ] [Model View Controller (MVC)](chapter12_compound) +- [ ] [Manager](chapter14_leftover) _(Bonus Pattern)_ ## Sample Code : Java diff --git a/chapter14_leftover/readme.md b/chapter14_leftover/readme.md new file mode 100644 index 0000000..b5c3bf5 --- /dev/null +++ b/chapter14_leftover/readme.md @@ -0,0 +1,11 @@ +# Chapter 14: Leftover Patterns + +> **Manager Pattern**: _(Bonus pattern)_ Manages multiple entities of the same or similar type. + +Unlike the factory patterns which handle object creation or the +mediator pattern which handles interaction between related objects, the +manager pattern has the role of managing multiple identical or related objects. + +For example in the Python standard library the [`Manager` object](https://docs.python.org/3/library/multiprocessing.html#multiprocessing.Manager) +in the `multiprocessing` library manages shared objects between child +processes. \ No newline at end of file From ff0af80488c14ba674a2375829141c0af75ea777 Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Mon, 22 May 2023 21:43:28 +0200 Subject: [PATCH 21/37] doc: Manager pattern some more thoughts --- chapter14_leftover/readme.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/chapter14_leftover/readme.md b/chapter14_leftover/readme.md index b5c3bf5..5fc6c34 100644 --- a/chapter14_leftover/readme.md +++ b/chapter14_leftover/readme.md @@ -7,5 +7,9 @@ mediator pattern which handles interaction between related objects, the manager pattern has the role of managing multiple identical or related objects. For example in the Python standard library the [`Manager` object](https://docs.python.org/3/library/multiprocessing.html#multiprocessing.Manager) -in the `multiprocessing` library manages shared objects between child -processes. \ No newline at end of file +in the `multiprocessing` library manages shared objects and child processes. +It keeps track of the running processes, shared objects and the available methods +on those objects. Without a `Manager` object, multiple processes could try to access +or modify shared objects at the same time with unpredictable results. +It uses the `Proxy` design pattern, providing a proxy to the shared objects, to help +achieve this, passing messages and data across process boundaries. From 73d35051fc9342270204f60c5762883aa4ab3fce Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Tue, 4 Jul 2023 14:12:00 +0200 Subject: [PATCH 22/37] doc: update table of contents --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3c9c8b6..72f6a7a 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ I have added examples of pattern usage in the Python standard library and pypi - - [ ] [Factory Method](chapter04_factory) - [ ] [Simple Factory](chapter04_factory) - [x] [Abstract Factory](chapter04_factory) +- [ ] [Builder](chapter04_factory#builder-%EF%B8%8F%EF%B8%8F) _(Bonus Pattern)_ - [x] [Singleton](chapter05_singleton) - [x] [Command](chapter06_command) - [x] [Adapter](chapter07_adapter_facade) From 4034954ccbde76b74ce9f81734664477dbfa5c33 Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Fri, 1 Sep 2023 13:47:26 +0200 Subject: [PATCH 23/37] doc: observer example Providing an example of usage in Django --- chapter02_observer/readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/chapter02_observer/readme.md b/chapter02_observer/readme.md index cf297a1..1a5bb2e 100644 --- a/chapter02_observer/readme.md +++ b/chapter02_observer/readme.md @@ -43,6 +43,12 @@ classDiagram ``` +## Use in Python + +[Django signals]([url](https://docs.djangoproject.com/en/4.2/topics/signals/)https://docs.djangoproject.com/en/4.2/topics/signals/) +allow other parts of the code to sign up to receive updates, for instance when settings are changed +or model instances are created and / or updated. + ## Running the code ```bash From 7ee5ce5068a505a7a3359509894ddcd71c483f48 Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Fri, 1 Sep 2023 13:48:30 +0200 Subject: [PATCH 24/37] fix: link url --- chapter02_observer/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chapter02_observer/readme.md b/chapter02_observer/readme.md index 1a5bb2e..6fd7bc9 100644 --- a/chapter02_observer/readme.md +++ b/chapter02_observer/readme.md @@ -45,7 +45,7 @@ classDiagram ## Use in Python -[Django signals]([url](https://docs.djangoproject.com/en/4.2/topics/signals/)https://docs.djangoproject.com/en/4.2/topics/signals/) +[Django signals](https://docs.djangoproject.com/en/4.2/topics/signals/) allow other parts of the code to sign up to receive updates, for instance when settings are changed or model instances are created and / or updated. From a44e540d454ddf0faaf6bade4209beab95a8925a Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Fri, 1 Sep 2023 19:44:17 +0200 Subject: [PATCH 25/37] doc: update use in Python --- chapter03_decorator/readme.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/chapter03_decorator/readme.md b/chapter03_decorator/readme.md index 11e26a3..b3154fe 100644 --- a/chapter03_decorator/readme.md +++ b/chapter03_decorator/readme.md @@ -3,15 +3,16 @@ > **Decorator**: Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative > to subclassing for extending functionality. -Not quite the same as -python [decorator syntax](https://docs.python.org/3/reference/compound_stmts.html#grammar-token-decorators) -as in python you call the _decorated function_ and the decorating function -is called first whereas the _decorating function_ must be called here. - I subclass `ABC` and used the `@abstractmethod` decorator from the `abc` module here but do not use any of this functionality - it just serves as documentation. +## Use in Python + +The python [decorator syntax](https://docs.python.org/3/reference/compound_stmts.html#grammar-token-decorators) +decorator syntax looks quite different as in python you call the _decorated function_ and the decorating function +is automatically called first whereas the _decorating function_ must be called according to the pattern in the book. + ## Running the code ```bash From 4b73a541ce8b10dc1475f3bcc6a9fe3b839fad79 Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Fri, 1 Sep 2023 23:32:15 +0200 Subject: [PATCH 26/37] Update readme.md --- chapter04_factory/readme.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/chapter04_factory/readme.md b/chapter04_factory/readme.md index f9c0d6b..a0cc874 100644 --- a/chapter04_factory/readme.md +++ b/chapter04_factory/readme.md @@ -4,13 +4,14 @@ > A class which chooses which product class to instantiate and return, based upon method parameters. -### Pythonic Examples +### Use in Python The Python standard library contains multiple references to factory objects, for instance [namedtuple](https://docs.python.org/3/library/collections.html#collections.namedtuple) and [dataclasses](https://docs.python.org/3/library/dataclasses.html#module-dataclasses) are factories for creating classes. -The Factory Boy package provides easy object creation for Django and for other ORMs. + +The [Factory Boy](https://github.com/FactoryBoy/factory_boy) package provides easy object creation for Django and for other ORMs. ## Factory Method πŸ“‹ @@ -20,7 +21,7 @@ The Factory Boy package provides easy object creation for Django and for other O For instance the `PizzaStore` abstract class in this repo provides an abstract `create_pizza` interface for creating one product. -### Pythonic Examples +### Use in Python The [python-qrcode](https://github.com/dancergraham/python-qrcode) module uses the factory method pattern nicely to separate only the part of the code that changes (generating png, svg, etc.) from the underlying logic of the code From ccba9c45b88def6ee9647d270ac3c49603a329a3 Mon Sep 17 00:00:00 2001 From: thebjko Date: Sat, 9 Sep 2023 16:36:21 +0900 Subject: [PATCH 27/37] refactor: change fly behavior setter --- chapter01_strategy/duck.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/chapter01_strategy/duck.py b/chapter01_strategy/duck.py index 3288c2b..2cc8108 100644 --- a/chapter01_strategy/duck.py +++ b/chapter01_strategy/duck.py @@ -42,7 +42,12 @@ class Duck: _fly_behavior = None _quack_behavior = None - def set_fly_behavior(self, fly_behavior): + @property + def fly_behavior(self): + return self._fly_behavior + + @fly_behavior.setter + def fly_behavior(self, fly_behavior): self._fly_behavior = fly_behavior def set_quack_behavior(self, quack_behavior): @@ -108,7 +113,7 @@ def mini_duck_simulator(): model = ModelDuck() model.perform_fly() - model.set_fly_behavior(FlyRocketPowered()) + model.fly_behavior = FlyRocketPowered() model.perform_fly() From 762db88a21e06accc977ed686d6e58695e48b216 Mon Sep 17 00:00:00 2001 From: thebjko Date: Sat, 9 Sep 2023 16:42:51 +0900 Subject: [PATCH 28/37] refactor: change quack behavior setter --- chapter01_strategy/duck.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/chapter01_strategy/duck.py b/chapter01_strategy/duck.py index 2cc8108..159b741 100644 --- a/chapter01_strategy/duck.py +++ b/chapter01_strategy/duck.py @@ -50,7 +50,12 @@ def fly_behavior(self): def fly_behavior(self, fly_behavior): self._fly_behavior = fly_behavior - def set_quack_behavior(self, quack_behavior): + @property + def quack_behavior(self): + return self._quack_behavior + + @quack_behavior.setter + def quack_behavior(self, quack_behavior): self._quack_behavior = quack_behavior def display(self): From fa017cfd9e0a7b131ec16386d536c8a474346ace Mon Sep 17 00:00:00 2001 From: thebjko Date: Sat, 9 Sep 2023 16:49:37 +0900 Subject: [PATCH 29/37] refactor: perform function --- chapter01_strategy/duck.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapter01_strategy/duck.py b/chapter01_strategy/duck.py index 159b741..0343f89 100644 --- a/chapter01_strategy/duck.py +++ b/chapter01_strategy/duck.py @@ -62,10 +62,10 @@ def display(self): raise NotImplementedError def perform_fly(self): - self._fly_behavior.fly() + self.fly_behavior.fly() def perform_quack(self): - self._quack_behavior.quack() + self.quack_behavior.quack() def swim(self): print("All ducks float, even decoys!") From 68c19be6ca9190ed522a858db0dfefe25f51356d Mon Sep 17 00:00:00 2001 From: thebjko Date: Sat, 9 Sep 2023 17:05:33 +0900 Subject: [PATCH 30/37] refactor: use constructor --- chapter01_strategy/duck.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/chapter01_strategy/duck.py b/chapter01_strategy/duck.py index 0343f89..0cb0199 100644 --- a/chapter01_strategy/duck.py +++ b/chapter01_strategy/duck.py @@ -72,40 +72,45 @@ def swim(self): class MallardDuck(Duck): - _fly_behavior = FlyWithWings() - _quack_behavior = Quack() + def __init__(self): + self.fly_behavior = FlyWithWings() + self.quack_behavior = Quack() def display(self): print("I'm a real Mallard duck") class DecoyDuck(Duck): - _fly_behavior = FlyNoWay() - _quack_behavior = MuteQuack() + def __init__(self): + self.fly_behavior = FlyNoWay() + self.quack_behavior = MuteQuack() def display(self): print("I'm a duck Decoy") class ModelDuck(Duck): - _fly_behavior = FlyNoWay() - _quack_behavior = Squeak() + def __init__(self): + self.fly_behavior = FlyNoWay() + self.quack_behavior = Squeak() def display(self): print("I'm a real Mallard duck") class RedHeadDuck(Duck): - _fly_behavior = FlyWithWings() - _quack_behavior = Quack() + def __init__(self): + self.fly_behavior = FlyWithWings() + self.quack_behavior = Quack() def display(self): print("I'm a real Red Headed duck") class RubberDuck(Duck): - _fly_behavior = FlyNoWay() - _quack_behavior = Squeak() + def __init__(self): + self.fly_behavior = FlyNoWay() + self.quack_behavior = Squeak() def display(self): print("I'm a rubber duckie") From 0f6df90af279d0c6d6ee51f8b6c3b9db3a8e8c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EB=B4=89=EC=A7=84?= Date: Fri, 15 Sep 2023 08:24:02 +0900 Subject: [PATCH 31/37] add source code --- Head-First-Design-Patterns-master/README.md | 8 + Head-First-Design-Patterns-master/clap.wav | Bin 0 -> 37462 bytes .../heatindex.txt | 11 ++ .../designpatterns/adapter/ducks/Duck.java | 6 + .../adapter/ducks/DuckAdapter.java | 22 +++ .../adapter/ducks/DuckTestDrive.java | 34 ++++ .../adapter/ducks/MallardDuck.java | 11 ++ .../designpatterns/adapter/ducks/Turkey.java | 6 + .../adapter/ducks/TurkeyAdapter.java | 19 ++ .../adapter/ducks/TurkeyTestDrive.java | 14 ++ .../adapter/ducks/WildTurkey.java | 11 ++ .../adapter/ducks/challenge/Drone.java | 7 + .../adapter/ducks/challenge/DroneAdapter.java | 20 ++ .../adapter/ducks/challenge/SuperDrone.java | 13 ++ .../designpatterns/adapter/iterenum/EI.java | 17 ++ .../adapter/iterenum/EnumerationIterator.java | 23 +++ .../EnumerationIteratorTestDrive.java | 13 ++ .../adapter/iterenum/IteratorEnumeration.java | 19 ++ .../IteratorEnumerationTestDrive.java | 13 ++ .../designpatterns/bridge/remote/Client.java | 22 +++ .../bridge/remote/GenericRemote.java | 15 ++ .../designpatterns/bridge/remote/LG.java | 18 ++ .../bridge/remote/RemoteControl.java | 28 +++ .../designpatterns/bridge/remote/Sony.java | 18 ++ .../bridge/remote/SpecialRemote.java | 15 ++ .../designpatterns/bridge/remote/TV.java | 8 + .../bridge/remote/TVFactory.java | 13 ++ .../house/GingerbreadHouseBuilder.java | 36 ++++ .../designpatterns/builder/house/House.java | 65 ++++++ .../builder/house/HouseBuilder.java | 31 +++ .../builder/house/HouseDirector.java | 35 ++++ .../builder/house/InteriorWall.java | 20 ++ .../designpatterns/builder/house/Roof.java | 19 ++ .../builder/house/StoneHouseBuilder.java | 37 ++++ .../designpatterns/builder/house/Wall.java | 19 ++ .../designpatterns/builder/house/Window.java | 19 ++ .../builder/house/WoodHouseBuilder.java | 44 +++++ .../builder/pizza/MeatPizzaBuilder.java | 40 ++++ .../designpatterns/builder/pizza/Pizza.java | 50 +++++ .../builder/pizza/PizzaBuilder.java | 24 +++ .../builder/pizza/PizzaDirector.java | 56 ++++++ .../builder/pizza/VeggiePizzaBuilder.java | 41 ++++ .../builder/vacation/Accommodation.java | 27 +++ .../builder/vacation/CityVacationBuilder.java | 32 +++ .../builder/vacation/Hotel.java | 21 ++ .../vacation/OutdoorsVacationBuilder.java | 32 +++ .../builder/vacation/Reservation.java | 21 ++ .../designpatterns/builder/vacation/Tent.java | 21 ++ .../builder/vacation/Vacation.java | 33 ++++ .../builder/vacation/VacationBuilder.java | 24 +++ .../builder/vacation/VacationDirector.java | 22 +++ .../collections/Collections.java | 27 +++ .../collections/iterator/Cafe.java | 44 +++++ .../collections/iterator/DinerMenu.java | 41 ++++ .../iterator/DinerMenuIterator.java | 24 +++ .../collections/iterator/Iterator.java | 6 + .../collections/iterator/Menu.java | 5 + .../iterator/PancakeHouseMenu.java | 35 ++++ .../iterator/PancakeHouseMenuIterator.java | 26 +++ .../collections/iterator_builtin/Cafe.java | 28 +++ .../iterator_builtin/DinerMenu.java | 43 ++++ .../iterator_builtin/DinerMenuIterator.java | 39 ++++ .../collections/iterator_builtin/Menu.java | 7 + .../iterator_builtin/PancakeHouseMenu.java | 36 ++++ .../combined/djview/BPMObserver.java | 5 + .../combined/djview/BeatBar.java | 27 +++ .../combined/djview/BeatController.java | 42 ++++ .../combined/djview/BeatModel.java | 107 ++++++++++ .../combined/djview/BeatModelInterface.java | 21 ++ .../combined/djview/BeatObserver.java | 5 + .../combined/djview/ControllerInterface.java | 9 + .../combined/djview/DJTestDrive.java | 9 + .../combined/djview/DJView.java | 187 ++++++++++++++++++ .../combined/djview/DJViewHttpHandler.java | 101 ++++++++++ .../combined/djview/DJViewHttpServer.java | 26 +++ .../combined/djview/DJViewServlet.java | 77 ++++++++ .../combined/djview/HeartAdapter.java | 37 ++++ .../combined/djview/HeartController.java | 28 +++ .../combined/djview/HeartModel.java | 79 ++++++++ .../combined/djview/HeartModelInterface.java | 9 + .../combined/djview/HeartTestDrive.java | 9 + .../designpatterns/combined/djview/README.md | 66 +++++++ .../combined/djview/jsp/WEB-INF/web.xml | 40 ++++ .../combined/djview/jsp/djview.jsp | 29 +++ .../combined/djview/jsp/index.html | 10 + .../combining/adapter/DecoyDuck.java | 7 + .../combining/adapter/DuckCall.java | 7 + .../combining/adapter/DuckSimulator.java | 28 +++ .../combining/adapter/Goose.java | 7 + .../combining/adapter/GooseAdapter.java | 17 ++ .../combining/adapter/MallardDuck.java | 7 + .../combining/adapter/Quackable.java | 5 + .../combining/adapter/RedheadDuck.java | 7 + .../combining/adapter/RubberDuck.java | 7 + .../composite/AbstractDuckFactory.java | 9 + .../composite/CountingDuckFactory.java | 20 ++ .../combining/composite/DecoyDuck.java | 12 ++ .../combining/composite/DuckCall.java | 12 ++ .../combining/composite/DuckFactory.java | 20 ++ .../combining/composite/DuckSimulator.java | 55 ++++++ .../combining/composite/Flock.java | 24 +++ .../combining/composite/Goose.java | 11 ++ .../combining/composite/GooseAdapter.java | 17 ++ .../combining/composite/MallardDuck.java | 12 ++ .../combining/composite/QuackCounter.java | 23 +++ .../combining/composite/Quackable.java | 5 + .../combining/composite/RedheadDuck.java | 11 ++ .../combining/composite/RubberDuck.java | 12 ++ .../combining/decorator/DecoyDuck.java | 12 ++ .../combining/decorator/DuckCall.java | 12 ++ .../combining/decorator/DuckSimulator.java | 31 +++ .../combining/decorator/Goose.java | 11 ++ .../combining/decorator/GooseAdapter.java | 17 ++ .../combining/decorator/MallardDuck.java | 12 ++ .../combining/decorator/QuackCounter.java | 22 +++ .../combining/decorator/Quackable.java | 5 + .../combining/decorator/RedheadDuck.java | 7 + .../combining/decorator/RubberDuck.java | 12 ++ .../combining/ducks/DecoyDuck.java | 7 + .../combining/ducks/DuckCall.java | 7 + .../combining/ducks/DuckSimulator.java | 26 +++ .../combining/ducks/MallardDuck.java | 7 + .../combining/ducks/Quackable.java | 5 + .../combining/ducks/RedheadDuck.java | 7 + .../combining/ducks/RubberDuck.java | 7 + .../factory/AbstractDuckFactory.java | 9 + .../factory/CountingDuckFactory.java | 20 ++ .../combining/factory/DecoyDuck.java | 12 ++ .../combining/factory/DuckCall.java | 12 ++ .../combining/factory/DuckFactory.java | 20 ++ .../combining/factory/DuckSimulator.java | 34 ++++ .../combining/factory/Goose.java | 11 ++ .../combining/factory/GooseAdapter.java | 17 ++ .../combining/factory/MallardDuck.java | 12 ++ .../combining/factory/QuackCounter.java | 23 +++ .../combining/factory/Quackable.java | 5 + .../combining/factory/RedheadDuck.java | 7 + .../combining/factory/RubberDuck.java | 12 ++ .../observer/.QuackDecorator.java.swp | Bin 0 -> 12288 bytes .../observer/AbstractDuckFactory.java | 9 + .../observer/CountingDuckFactory.java | 20 ++ .../combining/observer/DecoyDuck.java | 26 +++ .../combining/observer/DuckCall.java | 26 +++ .../combining/observer/DuckFactory.java | 20 ++ .../combining/observer/DuckSimulator.java | 54 +++++ .../combining/observer/Flock.java | 34 ++++ .../combining/observer/Goose.java | 12 ++ .../combining/observer/GooseAdapter.java | 28 +++ .../combining/observer/MallardDuck.java | 26 +++ .../combining/observer/Observable.java | 30 +++ .../combining/observer/Observer.java | 5 + .../combining/observer/QuackCounter.java | 31 +++ .../combining/observer/QuackObservable.java | 6 + .../combining/observer/Quackable.java | 5 + .../combining/observer/Quackologist.java | 12 ++ .../combining/observer/RedheadDuck.java | 26 +++ .../combining/observer/RubberDuck.java | 26 +++ .../command/diner/BurgerAndFriesOrder.java | 12 ++ .../designpatterns/command/diner/Cook.java | 14 ++ .../command/diner/Customer.java | 15 ++ .../designpatterns/command/diner/Diner.java | 11 ++ .../designpatterns/command/diner/Order.java | 6 + .../command/diner/Waitress.java | 10 + .../command/dinerLambda/Cook.java | 14 ++ .../command/dinerLambda/Customer.java | 17 ++ .../command/dinerLambda/Diner.java | 11 ++ .../command/dinerLambda/Order.java | 6 + .../command/dinerLambda/Waitress.java | 10 + .../command/party/CeilingFan.java | 42 ++++ .../command/party/CeilingFanHighCommand.java | 22 +++ .../party/CeilingFanMediumCommand.java | 22 +++ .../command/party/CeilingFanOffCommand.java | 22 +++ .../designpatterns/command/party/Command.java | 6 + .../designpatterns/command/party/Hottub.java | 45 +++++ .../command/party/HottubOffCommand.java | 17 ++ .../command/party/HottubOnCommand.java | 17 ++ .../designpatterns/command/party/Light.java | 34 ++++ .../command/party/LightOffCommand.java | 17 ++ .../command/party/LightOnCommand.java | 17 ++ .../party/LivingroomLightOffCommand.java | 15 ++ .../party/LivingroomLightOnCommand.java | 15 ++ .../command/party/MacroCommand.java | 26 +++ .../command/party/NoCommand.java | 6 + .../command/party/RemoteControl.java | 52 +++++ .../command/party/RemoteLoader.java | 37 ++++ .../designpatterns/command/party/Stereo.java | 35 ++++ .../command/party/StereoOffCommand.java | 17 ++ .../command/party/StereoOnCommand.java | 17 ++ .../command/party/StereoOnWithCDCommand.java | 19 ++ .../designpatterns/command/party/TV.java | 23 +++ .../command/party/TVOffCommand.java | 17 ++ .../command/party/TVOnCommand.java | 18 ++ .../command/remote/CeilingFan.java | 42 ++++ .../command/remote/CeilingFanOffCommand.java | 12 ++ .../command/remote/CeilingFanOnCommand.java | 12 ++ .../command/remote/Command.java | 5 + .../command/remote/GarageDoor.java | 29 +++ .../command/remote/GarageDoorDownCommand.java | 13 ++ .../command/remote/GarageDoorUpCommand.java | 13 ++ .../designpatterns/command/remote/Hottub.java | 56 ++++++ .../command/remote/HottubOffCommand.java | 14 ++ .../command/remote/HottubOnCommand.java | 15 ++ .../designpatterns/command/remote/Light.java | 17 ++ .../command/remote/LightOffCommand.java | 13 ++ .../command/remote/LightOnCommand.java | 13 ++ .../remote/LivingroomLightOffCommand.java | 13 ++ .../remote/LivingroomLightOnCommand.java | 13 ++ .../command/remote/NoCommand.java | 5 + .../command/remote/RemoteControl.java | 43 ++++ .../command/remote/RemoteLoader.java | 54 +++++ .../designpatterns/command/remote/Stereo.java | 35 ++++ .../command/remote/StereoOffCommand.java | 13 ++ .../command/remote/StereoOnWithCDCommand.java | 15 ++ .../designpatterns/command/remote/TV.java | 23 +++ .../command/remoteWL/CeilingFan.java | 42 ++++ .../command/remoteWL/Command.java | 6 + .../command/remoteWL/GarageDoor.java | 29 +++ .../command/remoteWL/Hottub.java | 56 ++++++ .../command/remoteWL/Light.java | 17 ++ .../command/remoteWL/RemoteControl.java | 43 ++++ .../command/remoteWL/RemoteLoader.java | 38 ++++ .../command/remoteWL/Stereo.java | 35 ++++ .../designpatterns/command/remoteWL/TV.java | 23 +++ .../command/simpleremote/Command.java | 5 + .../command/simpleremote/GarageDoor.java | 27 +++ .../simpleremote/GarageDoorOpenCommand.java | 13 ++ .../command/simpleremote/Light.java | 15 ++ .../command/simpleremote/LightOffCommand.java | 13 ++ .../command/simpleremote/LightOnCommand.java | 13 ++ .../simpleremote/RemoteControlTest.java | 18 ++ .../simpleremote/SimpleRemoteControl.java | 18 ++ .../command/simpleremoteWL/Command.java | 6 + .../command/simpleremoteWL/GarageDoor.java | 27 +++ .../command/simpleremoteWL/Light.java | 15 ++ .../simpleremoteWL/RemoteControlTest.java | 18 ++ .../simpleremoteWL/SimpleRemoteControl.java | 18 ++ .../command/swing/SwingCommandExample.java | 71 +++++++ .../command/undo/CeilingFan.java | 39 ++++ .../command/undo/CeilingFanHighCommand.java | 27 +++ .../command/undo/CeilingFanLowCommand.java | 27 +++ .../command/undo/CeilingFanMediumCommand.java | 27 +++ .../command/undo/CeilingFanOffCommand.java | 27 +++ .../designpatterns/command/undo/Command.java | 6 + .../command/undo/DimmerLightOffCommand.java | 20 ++ .../command/undo/DimmerLightOnCommand.java | 19 ++ .../designpatterns/command/undo/Light.java | 34 ++++ .../command/undo/LightOffCommand.java | 18 ++ .../command/undo/LightOnCommand.java | 18 ++ .../command/undo/NoCommand.java | 6 + .../command/undo/RemoteControlWithUndo.java | 52 +++++ .../command/undo/RemoteLoader.java | 47 +++++ .../designpatterns/composite/menu/Menu.java | 48 +++++ .../composite/menu/MenuComponent.java | 31 +++ .../composite/menu/MenuItem.java | 44 +++++ .../composite/menu/MenuTestDrive.java | 131 ++++++++++++ .../composite/menu/Waitress.java | 13 ++ .../menuiterator/CompositeIterator.java | 49 +++++ .../composite/menuiterator/Menu.java | 57 ++++++ .../composite/menuiterator/MenuComponent.java | 35 ++++ .../composite/menuiterator/MenuItem.java | 53 +++++ .../composite/menuiterator/MenuTestDrive.java | 114 +++++++++++ .../composite/menuiterator/NullIterator.java | 25 +++ .../composite/menuiterator/Waitress.java | 29 +++ .../decorator/io/InputTest.java | 36 ++++ .../decorator/io/LowerCaseInputStream.java | 23 +++ .../decorator/pizza/Cheese.java | 17 ++ .../decorator/pizza/Olives.java | 17 ++ .../designpatterns/decorator/pizza/Pizza.java | 11 ++ .../decorator/pizza/PizzaStore.java | 14 ++ .../decorator/pizza/ThickcrustPizza.java | 13 ++ .../decorator/pizza/ThincrustPizza.java | 13 ++ .../decorator/pizza/ToppingDecorator.java | 6 + .../decorator/starbuzz/Beverage.java | 11 ++ .../starbuzz/CondimentDecorator.java | 6 + .../decorator/starbuzz/DarkRoast.java | 12 ++ .../decorator/starbuzz/Decaf.java | 12 ++ .../decorator/starbuzz/Espresso.java | 13 ++ .../decorator/starbuzz/HouseBlend.java | 12 ++ .../decorator/starbuzz/Milk.java | 15 ++ .../decorator/starbuzz/Mocha.java | 15 ++ .../decorator/starbuzz/Soy.java | 15 ++ .../decorator/starbuzz/StarbuzzCoffee.java | 24 +++ .../decorator/starbuzz/Whip.java | 15 ++ .../decorator/starbuzzWithSizes/Beverage.java | 21 ++ .../starbuzzWithSizes/CondimentDecorator.java | 10 + .../starbuzzWithSizes/DarkRoast.java | 12 ++ .../decorator/starbuzzWithSizes/Decaf.java | 12 ++ .../decorator/starbuzzWithSizes/Espresso.java | 13 ++ .../starbuzzWithSizes/HouseBlend.java | 12 ++ .../decorator/starbuzzWithSizes/Milk.java | 15 ++ .../decorator/starbuzzWithSizes/Mocha.java | 15 ++ .../decorator/starbuzzWithSizes/Soy.java | 23 +++ .../starbuzzWithSizes/StarbuzzCoffee.java | 27 +++ .../decorator/starbuzzWithSizes/Whip.java | 15 ++ .../headfirst/designpatterns/ducks/Duck.java | 6 + .../designpatterns/ducks/DuckAdapter.java | 22 +++ .../designpatterns/ducks/DuckTestDrive.java | 25 +++ .../designpatterns/ducks/MallardDuck.java | 11 ++ .../designpatterns/ducks/Turkey.java | 6 + .../designpatterns/ducks/TurkeyAdapter.java | 19 ++ .../designpatterns/ducks/TurkeyTestDrive.java | 14 ++ .../designpatterns/ducks/WildTurkey.java | 11 ++ .../facade/hometheater/Amplifier.java | 45 +++++ .../facade/hometheater/CdPlayer.java | 55 ++++++ .../facade/hometheater/HomeTheaterFacade.java | 72 +++++++ .../hometheater/HomeTheaterTestDrive.java | 21 ++ .../facade/hometheater/PopcornPopper.java | 26 +++ .../facade/hometheater/Projector.java | 31 +++ .../facade/hometheater/Screen.java | 22 +++ .../facade/hometheater/StreamingPlayer.java | 57 ++++++ .../facade/hometheater/TheaterLights.java | 25 +++ .../facade/hometheater/Tuner.java | 36 ++++ .../factory/challenge/Calendar.java | 13 ++ .../factory/challenge/CalendarTestDrive.java | 14 ++ .../factory/challenge/PacificCalendar.java | 15 ++ .../factory/challenge/Zone.java | 8 + .../factory/challenge/ZoneCentral.java | 8 + .../factory/challenge/ZoneEastern.java | 8 + .../factory/challenge/ZoneFactory.java | 20 ++ .../factory/challenge/ZoneMountain.java | 8 + .../factory/challenge/ZonePacific.java | 8 + .../factory/pizzaaf/BlackOlives.java | 8 + .../factory/pizzaaf/Cheese.java | 5 + .../factory/pizzaaf/CheesePizza.java | 16 ++ .../ChicagoPizzaIngredientFactory.java | 33 ++++ .../factory/pizzaaf/ChicagoPizzaStore.java | 33 ++++ .../factory/pizzaaf/ClamPizza.java | 17 ++ .../designpatterns/factory/pizzaaf/Clams.java | 5 + .../designpatterns/factory/pizzaaf/Dough.java | 5 + .../factory/pizzaaf/Eggplant.java | 8 + .../factory/pizzaaf/FreshClams.java | 8 + .../factory/pizzaaf/FrozenClams.java | 8 + .../factory/pizzaaf/Garlic.java | 8 + .../factory/pizzaaf/MarinaraSauce.java | 7 + .../factory/pizzaaf/MozzarellaCheese.java | 8 + .../factory/pizzaaf/Mushroom.java | 8 + .../pizzaaf/NYPizzaIngredientFactory.java | 29 +++ .../factory/pizzaaf/NYPizzaStore.java | 33 ++++ .../designpatterns/factory/pizzaaf/Onion.java | 8 + .../factory/pizzaaf/ParmesanCheese.java | 8 + .../factory/pizzaaf/Pepperoni.java | 5 + .../factory/pizzaaf/PepperoniPizza.java | 18 ++ .../designpatterns/factory/pizzaaf/Pizza.java | 69 +++++++ .../pizzaaf/PizzaIngredientFactory.java | 12 ++ .../factory/pizzaaf/PizzaStore.java | 16 ++ .../factory/pizzaaf/PizzaTestDrive.java | 33 ++++ .../factory/pizzaaf/PlumTomatoSauce.java | 7 + .../factory/pizzaaf/RedPepper.java | 8 + .../factory/pizzaaf/ReggianoCheese.java | 8 + .../designpatterns/factory/pizzaaf/Sauce.java | 5 + .../factory/pizzaaf/SlicedPepperoni.java | 8 + .../factory/pizzaaf/Spinach.java | 8 + .../factory/pizzaaf/ThickCrustDough.java | 7 + .../factory/pizzaaf/ThinCrustDough.java | 7 + .../factory/pizzaaf/VeggiePizza.java | 17 ++ .../factory/pizzaaf/Veggies.java | 5 + .../factory/pizzafm/ChicagoPizzaStore.java | 16 ++ .../pizzafm/ChicagoStyleCheesePizza.java | 16 ++ .../pizzafm/ChicagoStyleClamPizza.java | 16 ++ .../pizzafm/ChicagoStylePepperoniPizza.java | 19 ++ .../pizzafm/ChicagoStyleVeggiePizza.java | 18 ++ .../factory/pizzafm/DependentPizzaStore.java | 37 ++++ .../factory/pizzafm/NYPizzaStore.java | 16 ++ .../factory/pizzafm/NYStyleCheesePizza.java | 12 ++ .../factory/pizzafm/NYStyleClamPizza.java | 13 ++ .../pizzafm/NYStylePepperoniPizza.java | 17 ++ .../factory/pizzafm/NYStyleVeggiePizza.java | 16 ++ .../designpatterns/factory/pizzafm/Pizza.java | 50 +++++ .../factory/pizzafm/PizzaStore.java | 16 ++ .../factory/pizzafm/PizzaTestDrive.java | 33 ++++ .../factory/pizzas/CheesePizza.java | 11 ++ .../factory/pizzas/ClamPizza.java | 11 ++ .../factory/pizzas/PepperoniPizza.java | 12 ++ .../designpatterns/factory/pizzas/Pizza.java | 43 ++++ .../factory/pizzas/PizzaStore.java | 23 +++ .../factory/pizzas/PizzaTestDrive.java | 17 ++ .../factory/pizzas/SimplePizzaFactory.java | 19 ++ .../factory/pizzas/VeggiePizza.java | 15 ++ .../designpatterns/flyweight/Client.java | 22 +++ .../designpatterns/flyweight/ConiferTree.java | 8 + .../flyweight/DeciduousTree.java | 13 ++ .../designpatterns/flyweight/Tree.java | 11 ++ .../designpatterns/flyweight/TreeFactory.java | 18 ++ .../AlternatingDinerMenuIterator.java | 28 +++ .../iterator/dinermerger/ArrayIterator.java | 24 +++ .../dinermerger/ArrayListIterator.java | 26 +++ .../iterator/dinermerger/DinerMenu.java | 51 +++++ .../dinermerger/DinerMenuIterator.java | 34 ++++ .../iterator/dinermerger/Iterator.java | 6 + .../iterator/dinermerger/Menu.java | 5 + .../iterator/dinermerger/MenuItem.java | 38 ++++ .../iterator/dinermerger/MenuTestDrive.java | 75 +++++++ .../dinermerger/PancakeHouseMenu.java | 53 +++++ .../dinermerger/PancakeHouseMenuIterator.java | 35 ++++ .../iterator/dinermerger/Waitress.java | 72 +++++++ .../AlternatingDinerMenuIterator.java | 37 ++++ .../iterator/dinermergercafe/CafeMenu.java | 34 ++++ .../iterator/dinermergercafe/DinerMenu.java | 51 +++++ .../dinermergercafe/DinerMenuIterator.java | 40 ++++ .../iterator/dinermergercafe/Menu.java | 7 + .../iterator/dinermergercafe/MenuItem.java | 35 ++++ .../dinermergercafe/MenuTestDrive.java | 29 +++ .../dinermergercafe/PancakeHouseMenu.java | 49 +++++ .../iterator/dinermergercafe/Waitress.java | 85 ++++++++ .../AlternatingDinerMenuIterator.java | 30 +++ .../iterator/dinermergeri/DinerMenu.java | 51 +++++ .../dinermergeri/DinerMenuIterator.java | 40 ++++ .../iterator/dinermergeri/Menu.java | 7 + .../iterator/dinermergeri/MenuItem.java | 35 ++++ .../iterator/dinermergeri/MenuTestDrive.java | 30 +++ .../dinermergeri/PancakeHouseMenu.java | 49 +++++ .../iterator/dinermergeri/Waitress.java | 97 +++++++++ .../iterator/implicit/DinerMenu.java | 51 +++++ .../iterator/implicit/DinerMenuIterator.java | 40 ++++ .../iterator/implicit/Menu.java | 7 + .../iterator/implicit/MenuItem.java | 35 ++++ .../iterator/implicit/MenuTestDrive.java | 11 ++ .../iterator/implicit/PancakeHouseMenu.java | 49 +++++ .../iterator/implicit/Waitress.java | 34 ++++ .../iterator/transition/DinerMenu.java | 51 +++++ .../transition/DinerMenuIterator.java | 40 ++++ .../iterator/transition/Menu.java | 7 + .../iterator/transition/MenuItem.java | 35 ++++ .../iterator/transition/MenuTestDrive.java | 15 ++ .../iterator/transition/PancakeHouseMenu.java | 49 +++++ .../iterator/transition/Waitress.java | 29 +++ .../headfirst/designpatterns/iterenum/EI.java | 27 +++ .../iterenum/EnumerationIterator.java | 23 +++ .../EnumerationIteratorTestDrive.java | 13 ++ .../iterenum/IteratorEnumeration.java | 19 ++ .../IteratorEnumerationTestDrive.java | 13 ++ .../observer/simple/Example.java | 14 ++ .../observer/simple/Observer.java | 5 + .../observer/simple/SimpleObserver.java | 20 ++ .../observer/simple/SimpleSubject.java | 31 +++ .../observer/simple/Subject.java | 7 + .../observer/simpleobservable/Example.java | 12 ++ .../simpleobservable/SimpleObserver.java | 30 +++ .../simpleobservable/SimpleSubject.java | 19 ++ .../observer/swing/SwingObserverExample.java | 55 ++++++ .../weather/CurrentConditionsDisplay.java | 23 +++ .../observer/weather/DisplayElement.java | 5 + .../observer/weather/ForecastDisplay.java | 30 +++ .../observer/weather/HeatIndexDisplay.java | 32 +++ .../observer/weather/Observer.java | 5 + .../observer/weather/StatisticsDisplay.java | 34 ++++ .../observer/weather/Subject.java | 7 + .../observer/weather/WeatherData.java | 52 +++++ .../observer/weather/WeatherStation.java | 20 ++ .../weather/WeatherStationHeatIndex.java | 16 ++ .../CurrentConditionsDisplay.java | 29 +++ .../weatherobservable/DisplayElement.java | 5 + .../weatherobservable/ForecastDisplay.java | 33 ++++ .../weatherobservable/HeatIndexDisplay.java | 42 ++++ .../weatherobservable/StatisticsDisplay.java | 39 ++++ .../weatherobservable/WeatherData.java | 35 ++++ .../weatherobservable/WeatherStation.java | 18 ++ .../WeatherStationHeatIndex.java | 16 ++ .../designpatterns/prototype/Client.java | 25 +++ .../designpatterns/prototype/Dragon.java | 13 ++ .../designpatterns/prototype/Drakon.java | 16 ++ .../designpatterns/prototype/Monster.java | 26 +++ .../designpatterns/prototype/monsters.html | 50 +++++ .../proxy/gumball/GumballMachine.java | 108 ++++++++++ .../proxy/gumball/GumballMachineRemote.java | 9 + .../gumball/GumballMachineTestDrive.java | 25 +++ .../proxy/gumball/GumballMonitor.java | 21 ++ .../gumball/GumballMonitorTestDrive.java | 36 ++++ .../proxy/gumball/HasQuarterState.java | 40 ++++ .../proxy/gumball/NoQuarterState.java | 31 +++ .../designpatterns/proxy/gumball/README.md | 16 ++ .../proxy/gumball/SoldOutState.java | 30 +++ .../proxy/gumball/SoldState.java | 36 ++++ .../designpatterns/proxy/gumball/State.java | 10 + .../proxy/gumball/WinnerState.java | 42 ++++ .../proxy/gumballmonitor/GumballMachine.java | 101 ++++++++++ .../GumballMachineTestDrive.java | 63 ++++++ .../proxy/gumballmonitor/GumballMonitor.java | 15 ++ .../proxy/gumballmonitor/HasQuarterState.java | 41 ++++ .../proxy/gumballmonitor/NoQuarterState.java | 31 +++ .../proxy/gumballmonitor/SoldOutState.java | 30 +++ .../proxy/gumballmonitor/SoldState.java | 40 ++++ .../proxy/gumballmonitor/State.java | 11 ++ .../proxy/gumballmonitor/WinnerState.java | 46 +++++ .../proxy/javaproxy/MatchMakingTestDrive.java | 76 +++++++ .../javaproxy/NonOwnerInvocationHandler.java | 28 +++ .../javaproxy/OwnerInvocationHandler.java | 28 +++ .../proxy/javaproxy/Person.java | 15 ++ .../proxy/javaproxy/PersonImpl.java | 45 +++++ .../proxy/virtualproxy/ImageComponent.java | 26 +++ .../proxy/virtualproxy/ImageProxy.java | 67 +++++++ .../virtualproxy/ImageProxyTestDrive.java | 61 ++++++ .../singleton/chocolate/ChocolateBoiler.java | 51 +++++ .../chocolate/ChocolateController.java | 13 ++ .../singleton/classic/Singleton.java | 21 ++ .../singleton/classic/SingletonClient.java | 8 + .../singleton/dcl/Singleton.java | 23 +++ .../singleton/dcl/SingletonClient.java | 7 + .../singleton/enumS/Singleton.java | 12 ++ .../singleton/enumS/SingletonClient.java | 8 + .../singleton/stat/Singleton.java | 16 ++ .../singleton/stat/SingletonClient.java | 8 + .../singleton/subclass/CoolerSingleton.java | 12 ++ .../singleton/subclass/HotterSingleton.java | 11 ++ .../singleton/subclass/Singleton.java | 18 ++ .../subclass/SingletonTestDrive.java | 10 + .../singleton/threadsafe/Singleton.java | 21 ++ .../singleton/threadsafe/SingletonClient.java | 8 + .../state/gumball/GumballMachine.java | 107 ++++++++++ .../gumball/GumballMachineTestDrive.java | 39 ++++ .../state/gumballstate/GumballMachine.java | 92 +++++++++ .../gumballstate/GumballMachineTestDrive.java | 26 +++ .../state/gumballstate/HasQuarterState.java | 35 ++++ .../state/gumballstate/NoQuarterState.java | 32 +++ .../state/gumballstate/SoldOutState.java | 33 ++++ .../state/gumballstate/SoldState.java | 40 ++++ .../state/gumballstate/State.java | 11 ++ .../gumballstatewinner/GumballMachine.java | 97 +++++++++ .../GumballMachineTestDrive.java | 46 +++++ .../gumballstatewinner/HasQuarterState.java | 41 ++++ .../gumballstatewinner/NoQuarterState.java | 32 +++ .../gumballstatewinner/SoldOutState.java | 33 ++++ .../state/gumballstatewinner/SoldState.java | 37 ++++ .../state/gumballstatewinner/State.java | 11 ++ .../state/gumballstatewinner/WinnerState.java | 43 ++++ .../designpatterns/strategy/AnimalTest.java | 40 ++++ .../designpatterns/strategy/DecoyDuck.java | 11 ++ .../designpatterns/strategy/Duck.java | 31 +++ .../designpatterns/strategy/FakeQuack.java | 7 + .../designpatterns/strategy/FlyBehavior.java | 5 + .../designpatterns/strategy/FlyNoWay.java | 7 + .../strategy/FlyRocketPowered.java | 7 + .../designpatterns/strategy/FlyWithWings.java | 7 + .../designpatterns/strategy/MallardDuck.java | 15 ++ .../strategy/MiniDuckSimulator.java | 23 +++ .../strategy/MiniDuckSimulator1.java | 17 ++ .../designpatterns/strategy/ModelDuck.java | 12 ++ .../designpatterns/strategy/MuteQuack.java | 7 + .../designpatterns/strategy/Quack.java | 7 + .../strategy/QuackBehavior.java | 5 + .../designpatterns/strategy/RedHeadDuck.java | 13 ++ .../designpatterns/strategy/RubberDuck.java | 19 ++ .../designpatterns/strategy/Squeak.java | 7 + .../strategy/challenge/BasicCameraApp.java | 7 + .../strategy/challenge/CameraPlusApp.java | 7 + .../strategy/challenge/Email.java | 7 + .../strategy/challenge/PhoneCameraApp.java | 19 ++ .../strategy/challenge/PhotoWithPhone.java | 29 +++ .../strategy/challenge/ShareStrategy.java | 6 + .../strategy/challenge/Social.java | 7 + .../strategy/challenge/Txt.java | 7 + .../templatemethod/applet/AppletSource.txt | 102 ++++++++++ .../templatemethod/applet/MyApplet.java | 34 ++++ .../barista/BeverageTestDrive.java | 25 +++ .../barista/CaffeineBeverage.java | 23 +++ .../barista/CaffeineBeverageWithHook.java | 29 +++ .../templatemethod/barista/Coffee.java | 10 + .../barista/CoffeeWithHook.java | 42 ++++ .../templatemethod/barista/Tea.java | 10 + .../templatemethod/barista/TeaWithHook.java | 43 ++++ .../templatemethod/frame/MyFrame.java | 26 +++ .../templatemethod/list/MyListTestDrive.java | 26 +++ .../templatemethod/list/MyStringList.java | 35 ++++ .../templatemethod/simplebarista/Barista.java | 13 ++ .../templatemethod/simplebarista/Coffee.java | 27 +++ .../templatemethod/simplebarista/Tea.java | 27 +++ .../templatemethod/sort/Duck.java | 27 +++ .../sort/DuckSortTestDrive.java | 31 +++ Head-First-Design-Patterns-master/test.txt | 1 + Head-First-Design-Patterns-master/testOut.txt | 1 + .../zipInput.zip | Bin 0 -> 632 bytes 571 files changed, 13846 insertions(+) create mode 100644 Head-First-Design-Patterns-master/README.md create mode 100644 Head-First-Design-Patterns-master/clap.wav create mode 100644 Head-First-Design-Patterns-master/heatindex.txt create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Duck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/MallardDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Turkey.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/WildTurkey.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/Drone.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/DroneAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/SuperDrone.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EI.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIteratorTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumeration.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumerationTestDrive.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Client.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/GenericRemote.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/LG.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/RemoteControl.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Sony.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/SpecialRemote.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TV.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TVFactory.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/GingerbreadHouseBuilder.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/House.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseBuilder.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseDirector.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/InteriorWall.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Roof.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/StoneHouseBuilder.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Wall.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Window.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/WoodHouseBuilder.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/MeatPizzaBuilder.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/Pizza.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaBuilder.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaDirector.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/VeggiePizzaBuilder.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Accommodation.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/CityVacationBuilder.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Hotel.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/OutdoorsVacationBuilder.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Reservation.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Tent.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Vacation.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationBuilder.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationDirector.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/Collections.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Cafe.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Iterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Menu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Cafe.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Menu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/PancakeHouseMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BPMObserver.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatBar.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatController.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModel.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModelInterface.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatObserver.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/ControllerInterface.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJView.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpHandler.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpServer.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewServlet.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartController.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModel.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModelInterface.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartTestDrive.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/README.md create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/WEB-INF/web.xml create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/djview.jsp create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/index.html create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DecoyDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckCall.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckSimulator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Goose.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/GooseAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/MallardDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Quackable.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RedheadDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RubberDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/AbstractDuckFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/CountingDuckFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DecoyDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckCall.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckSimulator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Flock.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Goose.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/GooseAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/MallardDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/QuackCounter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Quackable.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RedheadDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RubberDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DecoyDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckCall.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckSimulator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Goose.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/GooseAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/MallardDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/QuackCounter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Quackable.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RedheadDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RubberDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DecoyDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckCall.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckSimulator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/MallardDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/Quackable.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RedheadDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RubberDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/AbstractDuckFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/CountingDuckFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DecoyDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckCall.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckSimulator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Goose.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/GooseAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/MallardDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/QuackCounter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Quackable.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RedheadDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RubberDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/.QuackDecorator.java.swp create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/AbstractDuckFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/CountingDuckFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DecoyDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckCall.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckSimulator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Flock.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Goose.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/GooseAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/MallardDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observable.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observer.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackCounter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackObservable.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackable.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackologist.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RedheadDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RubberDuck.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/BurgerAndFriesOrder.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Cook.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Customer.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Diner.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Order.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Waitress.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Cook.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Customer.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Diner.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Order.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Waitress.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFan.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanHighCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanMediumCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Command.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Hottub.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Light.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/MacroCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/NoCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteControl.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteLoader.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Stereo.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnWithCDCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TV.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFan.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Command.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoor.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorDownCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorUpCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Hottub.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Light.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/NoCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteControl.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteLoader.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Stereo.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOnWithCDCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/TV.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/CeilingFan.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Command.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/GarageDoor.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Hottub.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Light.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteControl.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteLoader.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Stereo.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/TV.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Command.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoor.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoorOpenCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Light.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/RemoteControlTest.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/SimpleRemoteControl.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Command.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/GarageDoor.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Light.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/RemoteControlTest.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/SimpleRemoteControl.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/swing/SwingCommandExample.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFan.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanHighCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanLowCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanMediumCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Command.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Light.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOffCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOnCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/NoCommand.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteControlWithUndo.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteLoader.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Menu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuComponent.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuItem.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Waitress.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/CompositeIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Menu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuComponent.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuItem.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/NullIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Waitress.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/InputTest.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/LowerCaseInputStream.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Cheese.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Olives.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Pizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/PizzaStore.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThickcrustPizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThincrustPizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ToppingDecorator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Beverage.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/CondimentDecorator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/DarkRoast.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Decaf.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Espresso.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/HouseBlend.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Milk.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Mocha.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Soy.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/StarbuzzCoffee.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Whip.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Beverage.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/CondimentDecorator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/DarkRoast.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Decaf.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Espresso.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/HouseBlend.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Milk.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Mocha.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Soy.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/StarbuzzCoffee.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Whip.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Duck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/MallardDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Turkey.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyAdapter.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/WildTurkey.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Amplifier.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/CdPlayer.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterFacade.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/PopcornPopper.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Projector.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Screen.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/StreamingPlayer.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/TheaterLights.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Tuner.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Calendar.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/CalendarTestDrive.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/PacificCalendar.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Zone.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneCentral.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneEastern.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneFactory.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneMountain.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZonePacific.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/BlackOlives.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Cheese.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/CheesePizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaIngredientFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaStore.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ClamPizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Clams.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Dough.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Eggplant.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FreshClams.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FrozenClams.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Garlic.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MarinaraSauce.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MozzarellaCheese.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Mushroom.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaIngredientFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaStore.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Onion.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ParmesanCheese.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pepperoni.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PepperoniPizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaIngredientFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaStore.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PlumTomatoSauce.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/RedPepper.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ReggianoCheese.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Sauce.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/SlicedPepperoni.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Spinach.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThickCrustDough.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThinCrustDough.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/VeggiePizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Veggies.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoPizzaStore.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleCheesePizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleClamPizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStylePepperoniPizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleVeggiePizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/DependentPizzaStore.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYPizzaStore.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleCheesePizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleClamPizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStylePepperoniPizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleVeggiePizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/Pizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaStore.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/CheesePizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/ClamPizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PepperoniPizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/Pizza.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaStore.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/SimplePizzaFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/VeggiePizza.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Client.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/ConiferTree.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/DeciduousTree.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Tree.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/TreeFactory.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/AlternatingDinerMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayListIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Iterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Menu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuItem.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Waitress.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/AlternatingDinerMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/CafeMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Menu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuItem.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/PancakeHouseMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Waitress.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/AlternatingDinerMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Menu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuItem.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/PancakeHouseMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Waitress.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Menu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuItem.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/PancakeHouseMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Waitress.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenuIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Menu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuItem.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/PancakeHouseMenu.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Waitress.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EI.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIterator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIteratorTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumeration.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumerationTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Example.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Observer.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleObserver.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleSubject.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Subject.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/Example.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleObserver.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleSubject.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/swing/SwingObserverExample.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/CurrentConditionsDisplay.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/DisplayElement.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/ForecastDisplay.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/HeatIndexDisplay.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Observer.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/StatisticsDisplay.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Subject.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherData.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStation.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStationHeatIndex.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/CurrentConditionsDisplay.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/DisplayElement.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/ForecastDisplay.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/HeatIndexDisplay.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/StatisticsDisplay.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherData.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStation.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStationHeatIndex.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Client.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Dragon.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Drakon.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Monster.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/monsters.html create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachine.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineRemote.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitor.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitorTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/HasQuarterState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/NoQuarterState.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/README.md create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldOutState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/State.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/WinnerState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachine.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachineTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMonitor.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/HasQuarterState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/NoQuarterState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldOutState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/State.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/WinnerState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/MatchMakingTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/NonOwnerInvocationHandler.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/OwnerInvocationHandler.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/Person.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/PersonImpl.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageComponent.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxy.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxyTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateBoiler.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateController.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/Singleton.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/SingletonClient.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/Singleton.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/SingletonClient.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/Singleton.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/SingletonClient.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/Singleton.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/SingletonClient.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/CoolerSingleton.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/HotterSingleton.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/Singleton.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/SingletonTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/Singleton.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/SingletonClient.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachine.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachineTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachine.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachineTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/HasQuarterState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/NoQuarterState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldOutState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/State.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachine.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachineTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/HasQuarterState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/NoQuarterState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldOutState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldState.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/State.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/WinnerState.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/AnimalTest.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/DecoyDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Duck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FakeQuack.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyBehavior.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyNoWay.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyRocketPowered.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyWithWings.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MallardDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator1.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/ModelDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MuteQuack.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Quack.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/QuackBehavior.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RedHeadDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RubberDuck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Squeak.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/BasicCameraApp.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/CameraPlusApp.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Email.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhoneCameraApp.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhotoWithPhone.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/ShareStrategy.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Social.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Txt.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/AppletSource.txt create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/MyApplet.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/BeverageTestDrive.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverage.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverageWithHook.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Coffee.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CoffeeWithHook.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Tea.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/TeaWithHook.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/frame/MyFrame.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyListTestDrive.java create mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyStringList.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Barista.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Coffee.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Tea.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/Duck.java create mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/DuckSortTestDrive.java create mode 100644 Head-First-Design-Patterns-master/test.txt create mode 100644 Head-First-Design-Patterns-master/testOut.txt create mode 100644 Head-First-Design-Patterns-master/zipInput.zip diff --git a/Head-First-Design-Patterns-master/README.md b/Head-First-Design-Patterns-master/README.md new file mode 100644 index 0000000..9705f12 --- /dev/null +++ b/Head-First-Design-Patterns-master/README.md @@ -0,0 +1,8 @@ +# Head First Design Patterns (2020 2nd Edition) + +I have recently updated all the code for Head First Design Patterns for the 2nd edition of the book, released in December, 2020. + +Download the code and compile and run from the command line, or load the code into project in Eclipse using Java 8 or higher. + +Other links for the book are available on the book page at wickedlysmart.com. + diff --git a/Head-First-Design-Patterns-master/clap.wav b/Head-First-Design-Patterns-master/clap.wav new file mode 100644 index 0000000000000000000000000000000000000000..7789be5005fd4eac11c7a7985288320c18334c93 GIT binary patch literal 37462 zcmeFZcT^P1*EZTS(>>&zW(H6}Kolbq1SH2n(wMWyoO9M=BnQb!P*B8xqGCkMikKrh zL(WVlhapXO-;L+>zUTecx9+#@pLgBgJZo21S9Mo)*K}9!dTQ^Q%l7dJN=A@H?hCy) zY~MFd6G0FPLPfj^5k&J26+sbAWZmk0tKTGzrc;nrcjn*K%CXKhNf}Cc6HAS|5HUI8 zSlH^&&tX=f)JR#_l^FM^%)zUJbjb_}y>5QpksrN3yxujw3wo~cV*A6u;sdu27i}&$ zc3mxh^5yxt2QOG=JDuB_u_aSEwJjA*DoXN*e-U2><%UM@j!unqiFAyJ3tt|-GmIAg zBh)bbdg!I_;n0+bk}!T`U3fzD!pOwfsnM-xmd1WeG>QL}qMAgcGgDo&+%xjdM`f8` z>^lEC|G>rl*T!A;FKoKzRP?^k_5Q1(Wshp^$3MkNe!UEQHl^(9tAr0~Z}Bh3KOQf~ zzYg-EfBs!#P)TdNRvX@G*Q6r;$Uo5@BI)Y>(J^1f?kya?JJ3z2$W3W;5nF{*sDsLR zMH7uI)jsW$npgGxbnRIK2G@*F8xrH%$4oP`Gj*7-%-nL)ddtDd0aoXxsZJeheRKM0 z8;hAQ?T*>j%(`P=;aKKybM`%_l`bcpyIm)^u5-WZcF)7mL+H82bI2>!OX{8BUFLJj z=cw;IUzQ*0m*aQVkHXeq2eJ3CPqQDf^Vod$1vbu3VUMskvK!f!?7Qrre!JMa{0!Lr zzBl~V`%dxu>}?S z@)@BI1q>Swt{ie4*gv>RmNF38e_!^fue!gpSE+w;uUp@ao?m0( z=8Ea!!{P@bWAPTz2a&1hsHk2zLv%qX7Oodw7g`H<2q{8)VTAw_-W2cz@q!}3c0r7Q zBiJNx6!;4!2&@H$f^h;(fto-;fC%Vb@U;c~d}D!(KS@9pI0#e)L2%@H z!F0h%frlVRuw3v`a7fTBNEavw9|@)jYXnP#h%iEECA=?OAmj^A3k^kgg#jYIFj~YA zy%GhAhDG5b2k}eMVX<8FSnMDk79SG3N}h$xzqGQ=y=_AKnYIJ%wQXhXliKw=_}Koi!?;7Cb6dxf&SxFBI<-29&NZF$ zx{5n5cPVuZcP;M<>b~2R*G=n|buaB^_Y`*L^iX^HdKUC}^%nGG_2NApy&U)#@_WMmF@z>jN(2x%5lPsRFNtmBFmZ{r zA*;yEq&kvIx*@;FJ%|!=32{QW$PNUhoKDrxyghryD&~s=VdJFA9U!w&23suMX=vYjK zPR20I0n^32F;i?VHVs>W&BiujzSwSTK6VK9PGK9cXlxgj0DGy}aV#5)z;dt{>=KrQ zUBS|^0_-ey13QluV!7B&>>_px%Y$t`?B_#z9^~i2aTg#w4@YEUSy(2P1|=mzi7|js zEF3$Eoxt`%`P-n@wb*8CDYhEpV2j}@f-q;y2eZbUFiQvxu?d(4gfs|cC=C;%185B@ zM!%x9=yM2*(3fZ)dIwF0@HB*b&`@*@x)>25KRpg(uQe2 zp#@*jxX_-Zv~v(fLb#6>Mf(fF0NQGrJ%rmOA9O`=NY-%ud0@abKMK!0&DH>EEWtdV<;ZvSdzEcV)k145?E0mLzB+6FG zG0I}fCW;qjK4k{QoiYZV1yu@*GK45nL`XlvLt2nBq#SvGyhJV|MMyew0f|78kVD96 zWDBwvS%GXoLXahh7ZQj#AnwRi#11h-tPn%Q1kpj5hzfj*QF!ifl8OwFBV;$(Pqvd? zq?l|Y`J{+!fv}NmChH-rg|LRK1F0pee@hL-M^XD5b&yvNXaF<;ngK1pOW>0NfCwN4 zNC0hsc0ecD0n!Qec9A_0_CnZ8_WedbT#F1a@Lw1t2g#xT!Z7&{M&O!9A^$CM*!}~Y z{BIECzd`J5=+lMc6oMvKm+KCX8@3#@A9R(?m;KeZv+qbxM$fsf zhh6VF_#ItsdhKJSZ0Qnls5n9RM);9W6DYT`Tjw<=HRm?gHwx=#Hn`Nq)uq-5Yr3j} zs^?bTsl3NyRE*ILhrb>Cf`6fXKJz*Jqv0o`4+S6YzVm%Q z=dI|in=Xf5NzZ?D`NJhq{!pG_{*1i2mo{8X%DZ;q z%SCan#>Hv5b1&@9NzZ+DzA=Y>ep1fza|h2~&3=Cl&oVf-Bx`&2t+QoWDrXs4+cOWG z{hIMJb4JGW%+&O>40&2_`i8Vs>E)@<(_B+6(+X1(QpcqXrz9tDOi@neB_B`nN$yW9 zNjjKlnj}j&pSUYQBe6R^I^keEEkSKvTgJ)FF95|B}CyO(U+Z}f&wkOsx_F(LX zn4y@zVvff2MJvRFMMp=EiB^xk7j-UbVbr83S>)5mbCL5Ry&`)fdLxn}u1Cy@SQEhy zH;+gR7lnI;-wwyaj)cDq3l2XOHa|n`ZnxsXi?bZ(A==F(6q1}p>bgg zL!-ldL!-i6AZ{C)9%d7IJVC(-xgtYe(d+>ha%@rykiUmt6ja6ImLg8rGciI2`G zB`u9FPQv5YBwtL>PGKj$Na;)5nR+qFGR;4^Hcg(KmVPrOFypUOdZvEb`^=ANr_P3^ zdt|v}C}-mtU$aXxQ_meeyZHR{q#o=aMcgKfmtcgdCf^p&a!~?{kHh z&R=+yzvE)|WzW1rSH@gge0Ai~tZNPVh6S%K)30B=BEEk7YWa=z*IpIQFDSg}a{b&b zs~hpR4GT{fDcwALXYl6syPdbz+-tqP?tVkj$_G_*FIms-znb{G?Dgyy)ukaXyWeblg}y!TdhENz zQtS6cZvsEOFWdOBQmj8>Y@6~8k5G-TK}ewx}(je4VPMi z8o#!lXd33SlY}u()umMM;?4Nj9g49&+^4<98GM{>y$`75LmZ=@)Z z7|j|nK^IZnuw&F!^b52D3NO%f#YU`92~&8bJXWzr#ZjqKb+Ixcy;F?uhn@*udR{GFyS!|?%e*4Ijl92l z@AB65dEvdxN6{zOhvU=aljSqUx6Ws|uZeH6?;77XzUO_1ean5V{FMEc_<8t+`R($% z<#*AK>-W`f*stG@$u?x$v)$Pt?6vIeFp3U^QS@2%Gj<{S7yBt&!hX*t*_CW9|2np@ zzkof_U(B}l7qT5e-2GeFp8m}swQLW69&F#TXZaViXZT-bkM~buGyG4n75ulb`(b>} zXIryBvl;9MY`I?+yTETA$n&!MCl8MMK@XXmnMaP>H+N6BBkoey z@$QMPAKh$Rce#CY(Q(`5^2k-gWwGmZ=K&XQ=S-KT+4e3+Xa988oxQ{PrjwGhhttK` zTu0~GTOEHo;SQUf5*-ky@eUb|_hwCWbe;9s;k$j1!)p7+SyHFnfnlNgg5CuUkL zpQvY5Z<#)6k)`&epA(WNE|{P-@rOmcWuS$c+h}SsuGu7e>`D`ZvDM=e$1EJDI_B5dDC1ywyFQOO zZR9%!H+*Y+)X>d%koDAPAIsUOmwC@{AJfLLgK?L&oiU9iH7I0mFqp&?>K8CJ>02;_ zdie(H^(+j8y7~H>b;s-Tb@KH#>zL_@wJ+&z*0#{?(8|}@p=F`dsd+_vpQeSjOruci zfW{OpQvHr*n7W;&l6r|of||32zS=AGbE@9zW~yJ+Zm7&tvsS5AeWJWt)k|5V@>OY< z$`YkvhLgw-CDc38F~OB7)@i@y-zro;=bew;4&4R}4>;A07TWGG=(!$g3fpk@Z9Oht-D` z4&NOd9$GwjVTd;9JybX#8C*D!K1dmG94wTz3@no+4k*ZG4Ls~`m96bhlxg+PmX-F2 z`}g-{^jq|K_t*9g^d+|ki(Kpg!kAVM)mX=DEN;4#rrCTLbsk`K-geAEu=@lQ9d=hgc`C?1S2{BEwLR=}f6&H#1 z#Bt&t(FXBPk(>CQXpA^fG$`65;)xcB9*As386uYGfQS$-5;X`NMDK(~qCz1lOcgc@ z{}z@B*9r@Tb6{_l@UYNSxJIZhWDAD`)U(W9a zwDF~U3BMK4$Zz6T^BeeFkaCc3{CfTuNd3%j=6{0xkH5DMqe8o?964#5Y(F+q(WRv;B*2ynp_fvT_s?)<%A2C!+KLZM&*w8loE3bd86 zFi|*Fm@jk}mI&tyzX>-B1&}%@JR{T=T@jjzo(Nq;-=UQS!kr>q7%tKh<%%YYibWox zZ=%H_G5jMmag4}FoF{S=KNZat^F%wuU7|R#lK854g7}r#MO-glCLR$V6f-2rVjIaV z@jS_A@h*u-9510s3MD3zFTkHkBr7D!(!V8^(kzL$^nqlfv{Di-?UP)Q>Pp{9XG(?A z5UE1jUg^ZPWa*r?2huI@gvA5DcDqf#?OU5oTW{NIryc9q+&-xzwtY^=&GwxgXXLb&BF77nyI^OBpb+L18*W1p>E(yFL8eQdG)?I^LOS_D^k9E0q z=XI^?e$y4xE$zD9t=0Xj+pc@Kdr7x(&+%^0p8W2OJs-N`dpf)C_2~3e_Sp9f_pIz0 z*L%9hxA$t#w%#v2iM@S2#l4K)+TPi{NZ*=X^S;Pl|Gpc&JNth0CilsDANCpb)%Lme zq5T{BCiKVj1@_@cgV{7Q)EN^4`oKO zYMHwXmu-}dABd9q4BV7$8u%fL8|ahW8DI`@2b>0E1Ah%L2SW#(2d@mQ8T>R5KG-pE zc~Eok{ou^Ow!sC1YD0$yrwyGS@;JhFgZ`52GUohs{UQhdoD%hu4i%4u_8n4(E?BMqZCNj5Lod z9ihpOjF`yJj=0GmkF1hcj+~GWjGU7j$e+mVR*5=Mum09Yi{ ziHYPr!khd;tRlt4VG<>i$+6@O(t#`^=K`a%6_}R@QWJQ}3CJVT75PCfMkM4;ga%xb zAp%S#@(`JWd_~qGt;kVi2uVh?C?&GFPS;5Mr${?rc2N-CAQgQ`zGMYW`+0$X+!__D{;HNbW5qgGQR zsBP3NDnY$L)ucVAj-`F0PNy|c-Dy2k4vk7%L(`@0rkT-B(rjsoG%s2XZ2|2TZ9VN7 zZ9nZZEtFP8OQs2F7is;pA{q^SLDND%)5f4RG%Hj>n}rV0d{7LXhiaiK(Q)WzbTYah zorRu6z0o*e2s0q{61oMw38^LMDYO(lgML9X(F#ay0^YO@Qv1+XC<#2HB36NFVvQ&Z zlc1(pA8LgWs5Pd5IRY=~i7~J_*f?NMCjyUY4NRs3wh42`c4BPoAQpoC4ZLP3whEZf z4ZwkJ0|s?3u%d^7Aw2;+X*h7Eao8O!8GC?bU?tc&>^X3%uOa6h6=UklT*cV4YY!)&;peSToj#wPO940Fz-tYygfL z#3UeXAnn*N)`1QEmM&}r&KSbFK}NS-kpGYLLusSZ3&-`qIo%*#aDF?K(+1^9pj;7@ z&xd+ipuPsEw-)NJ0aRdB*e|%Q?+|{0JNO9UTL@pnoxQ-`V2|Nm9$-)5-X8&n`~Z04 zBJ47-$QQ6{z!~QOXPg6!a~8BtDlpIq*l8>l+A^v_Ek?89Nl8X8qtWPjc!pBZ186L|16b#E=wV>p zcLUqJ5%q&-$_1T|+M)iy$h)H^@VqgBg;qz+P!u&pN8kzVrqO|imeXo!J+vRdMZc%j z!}I);c9-^nc8&I&cAj>hmO?84MmmS~H!YR6hZarSNIOnj4l@B9+9sM0Z3WGVHkUS? z=1Vh&7!zXZGz%Jy#-a@ZU)@fn(VD1(R35b*-mxa?3o4g-pZbA%jryE=j(QLH>nqf7 zYBu!n99;Lq!S^XXL(tAtnu%nI=! z#)H_XaQ}z!V4wGY=lwaR0*)U=)qkNH${EEUc7BwbAH^Sjz7hERe{=M$a80A&14g-e zP#1sm_5bGVVVV-|XH@>-?%UzMMls6Ycm0;G-#k7{djfiXqxUzP|A*24H?RK>xBox+ z{Q>yS{DYx?as8v5{~x~p&vpb-{&4?)wtu+)e{cVL7T|xz{yih`@A&_Aa^PQy2ttzo zN0RtI2mGf6{?h{gpKXD0(9`RY`s6|UZ(K4mFtTxY|FC4Re{kKvfq~Zkq5ds>$NHo_ z^xoawvE6v5cGroHybiQ|N_)KYo|GwZms}TdMYDw)gzxzy{H3iatsTu1TB4iYG?_In zZ!D=t8bazW)pgW3*2Y!WRZp#otm0NosXWR1#k1m`;{N(M?boStNxA)xydQ(#)_%YH z)#Tf*FXAtbpC5mwe~SE6{bBjXTkmZ?guYXGzu|4?+u*X=GP^e)-%KohRcikF#cShN zuU?tGeEHJ+#itjR&#Rx$dM180_bKh!_9x??hClXva=B#7W8S0q67{2et7xET$L%FW-)=p*J@b~? z?aZ68w`ezIH}@2-yV-oBs&MWNPT{-j?{9cr_q*|=pzOLsf&2AG*WMPmUGps{z54x{ z=hem6zFuj$y6no%t1XvDuI#^j=8D2)%PZ&di!V>l558Omb4h<)3eE4&8=Ie;_w3Tl zyp@-D7m-VcFJ8=JUG&a-exd8)Ul-CZs$OutSez@quqHR-f?BTUg~vHPxtnwHav3?n zxn<|coc-tT6-pgpt zJeqMS(=%gJrbfoJ%&K%*Mo#*(jCJX!GNz<^WXRH#GG3;APY+K^O`n^#ES-^NoZgVy zl6EPzAZ>H%rnKp)lhgWB`cfaK+)F)?vNP2yWkxDJr6=Wm@~xDZvCUHr;~ z@Ob?Mc6@ofLVQg8t23^@=fd32+&M!zv+2x>IFmES<7(nu{XJi09UWb~nE-)P%tEV?J^OVsVC^r)>-%cCr# z#z%=F+ae1hOCq;NhDO>(hC~iVm`1*g=#Pkw_!zMuA}3;e#Qun`@VODs!mT2b!WAP{ zg|~*=gqMb^h3AEf!Xm<7g>4Bx7Zw!$ci61(m0_mgo?$BCk=g@oM zEulZcM?!nT^}}=`?7|!(=7z0~*ah=($zeqicf#r;cwvf>!(r1SO~Y44&J9n9JP`gW zGB#y)}}Iz7gpfBZ&-)F^hT^ zvpPyK_CnPB*oLUw*zwU#v74f&#uY{%jgv)xiSvjtKa&x2`b=j`^BLb*&-nbr&{8(xW6ImA zk6!O$KlQ$I`kep1?epRfxnER2hJ1bUk@juhr;=|IKkxot_u2AC@|U_FzF(8dDc?MQ zKKnNGbI13hUlu<$bDMvR;boTp;&FZ^R%rcVSHAs4sXD=ZS~Z)uzj}x_x#mHIux5AV z<=Sagf7P{Bjjg|4T~)unCZ)loHmI?#R<-F|-RGti^%2d64el)!4R}jt?Ka3E=!_SB(BZtYuavQ`R??C$TE0p`h8tQ&> z9L)x)q;(+)Xc2{tZKtC2iL|G5K5d6WE^4K?1Z!2)qn}m!Ne@zvSD>nRD?U^q6nCjU zR5DZBqx?(FLM2+gPGz=6s%o2tpV|dYTrEheSe>H1RpXAfk>+ZhZ<<=Vp<2&%?X@?< zjETPfS)JElSG&hxK-Y+IMX!`GUw;RaV!&kGF?h*Z#n@n|%v3hI&%9%_lC{*BZb%s4 zG(0zEv60(Y(nv7&l5yxbpE2W1Bx7EiB#vEgYBP>BtsHl5{2>#2GlproS+VJM^M&IT zE&9jjTAVSnnP6r9X~IYIHI{2FWR}Ag(G!y=jGZ*uvS`w4OINF<6Te$^PW)@~=}BFa z^{h@#xoV|6)nRh_)DM%#Pg^$S<}~pXyXgm}KATRN<}o8?+S?fh)8|-Uoc`H*(u|;) zcV_&UX>UE(=Bf2(8;_YGwr^*Cv-PqGuzPRw&d$%)&A!a`k-eAQ^jWX%uFP_=H+Cqo zPjRrGMR&YD>!72lgV-_KVTqHP<0q$6jJLb>c;H2fubvo+oJ-gMpcy_Rhg>#8Z zinEa`;e5h%ql>`xyNjQjookWXMOSrq)NQBxCbuu{U)?5n%ybX;NOf=Y=y9LrIoBh_ z^R|c7Q`ytQYn^AN*9*@MFMTg}@4a5B-k-eq-o`M~xZ6A2=cD&eA48w9zMFlv_&)Qw z=d0$6`!4lm`(5=-@ayyC`MLP9*b#m!*kAl|*t+Zn_HwqV|3&t4m^nS~Z{c6>zsa9D z=ej>*2twY55Fr&I zx*Tc9B+f{P69?l2aI`rqIpaAyI98ma9BWQ2XErC3++#RSK{2`DZlo$9i=ulu*P+;J`Ad|p=puvFgL7xK#11|=A z3)~x!ALt%%C{QOLIIwk&dEosyJprfYya@=LlM%q0vmv0}-#XxdKN@h#|LdGU|ExLs z{+s61vTf#EWmD#CXMgaY$xibh@mu9z>NmkZ+OLxx;#bVp_B+P@;p@Rp_Elgn^!?&z z08dZ3563UfN84|{57$@IC&Txf_hR38Z-y`1o9Cn8o$6ES#ql}rrQu`m^~t-#GsgRx zr;qn)PsE$)`Pl25$3Cw}k7-^m@C5g{U-B$)U+THSUDH$D{jJ9vx8oj1+-y9ix=G#Z zU31;zU4z|SU1{!}F2!yaT(-E)cNyb`y8Ljx>m2I3)_Inzs&lK$v)LIgTW5Q@=+EwS zE_KRt-su$N%yJr@UFLXo_AbYTvke`w+3y@~I_+^-ugWV47D|# zImz~e^$(k!*86N!taWYf%yhP42Nz5sklO9dBpR{0d z)x;jF0}~Uh^d?$cJ+S;aX`bcoN$nFfC!LvaYvSYy0TbU@h%MJyL|W1;%q?@wUrm^0 zzG}iRGs0rGS+<3mnZ3o0@xRRd$L}%co2r|iFuh@BXzFKHV$wW*p~;Ey-Q!r}#>)OzK?M?+BT-nkUr+9 z;YDM8LucbVtQw;r)2LUyAz&?Kgn|c!F)PKOm^s~G5%ZmX56r2@ zGBEuKjPrVL3>@@U8C2-X^!Mqe>TBrE)GyHauIH_@MNgous28ezMb|{zL-)B>z0Ojt z!#YEn`Z^h!ceQ6~25OgUNVRrr#A>N%OwuY;FV$qLuhtZ*ks1+d=QPHvIcU66tx#XB zx?i2Ds;hoM<-VGW%6zpt)w0DD1w zjIN_DK^3XPv;s;VEr{Yn>q8{eY~&2p4Vgx5CCe!> zQP=UF3tdxs=65x8D|97wKkM}BKF~SbWz|{O)!4D7>ud+JYhK6KPKAzBov+&+I*+us zb*#D-+Ht*2vtv!$$9AK((Dn+cV|%i+t1U=c(55C`(^e)iYC9$QC3Ta;OL6fW z=_4^FJt%%Du@fJY^otxM_e6c-y`l$VJJBw&OgKgSK-exiEW9Oh5pEX|0xQvTfmC=} zP$={fY!xaBCJMjvC4zMREx}U$9)StWNDEsB_%~Z0^Y^tL<2$u_@R3$!{>PTjt;sDZ zt;<@Lw3@e!0bYRLQrvvKCA4{8OGvYGi(xa`B5eBHe7`BZIkahYGpEU_c}$b6Nzz!_ z^sq6hDXeit)BMH>O%{!PjROrY8{ao1G-fs|Z`|B4snMxnxIw+)TSIGocEf}EO%37o zjtwj8)f=qq8|vxxck1ivPSroGn^zxOH?e+I-Ef^<-IqFzx{Gz9+5>ejYlG_2YA4j~ zs+HFU)|S_r*Iut3t~ps-S+lhEL5+27LXC3mmKuHyyXI-lgqpM(TFvg7hU%c2XVq3U zxz)6q6V*-CE302ryH;makEuRXO;#RlzJs;H7*nOga=@<8Q{$`zG~m3|PLQMt5IztXu9shm(LsZgu@ zRnc4VvZA`;T19C^a>ezE6BQ{HTPyyqSXi;4!nI;<#WV=VR#;W2SLjxZ@J4tNo|sp~ zr(&GYBY=gs2z@T_=_ysuTnV?B+srNGR&y_Me{hqy@3}GD7u?g_67FH{eeQ1VE$({m zRqjge1@1!bIc^a5JlBt#!FA^*a-FydTsx4N+(_KaB+)yqH(wHCy z5Z40+NS7N863^9vb9JC5U2Ynrr^7ab%Ybr?xcMLjaBdNI4EF)o46b1^_c_;^TgIKi z{RVYaLY?(oH!dHpp`9DdmBBTU+!b6!-de6cZyVQ$x0h?dJIb};g>&6_iQGV5CU+q( zhr5P%jk}ju%ss>_U+$+2m?jv3ow+yBo%6W>sCY~OzmuJbNR@m}1D%^M` z6~Vlj6@T$ODt7P|RvhPTtT@9vQjx<;thmj~t$5A5Tk(_kzM`4eP$A>>!oP!7vMLNJ z;lontUg24}xMFGLmWrK~$1B1rQ!275uT|Wud|vSp{_W;UQN>`Tyh5W&r*cx&aA7h zt3#_ER_9gytbShATU}M9RWn#Mxkjhjzh-LnmYO-$F*RGNFV}=tzlNu{rRI4xT3c6b zQae)ZS!-Ccy4JDgRPExL{M!9BrM2lb&9x;p)Vk^#v$~-guR2EU#yZE^n7XC4g>{E( zKhu3#M>LxYx*9A8)>i0D` z)n_)Wt}kggU0>gDxgKr&SZ~$XRX?wh(QvTQxgoo8HN4#s4Z_C42DPU02D_%=hE+{t z8zY*$8*ex5YUDPhH{wmt8pk&`H~N7o*1qPcP3M}IG?hWG(b0UPNxy~L>lOivpC<6(zYy%=w+YVi8Nh6M3w!x{geHP)VUVCqcvR3M zydp3al?&#JsKOJXsluD0Wx_g9lu%K8UuY|C7OoL%iW0>xqNn1mBB?k{q%V0R@{;t4 z_DjZ#^Cfe|<&tA!iu8tfy0lijLaHK(liEujOE*bGVDrLgdoP*O)-5^GW+J`XHdp$q z?UWR4za_P8Z<20o*KEsZcW!&rzN@Xf{d}8g$CtMG9YkA1$JF+cjy3J#j)Zo-&S&i& zo$c-WJB>T8bOv_tz!MMay4_*Z)zY!9OSdz%%e(V!*MZKVuB)9^-4&gyy6Ihs-F971 zyEk>UcV~4O^?dG{(=*cbcaK%~t)7+LEjyZ0*zQ&FJ&({m^#=CcbX;T7%WuU;V0m@%=7+&-(ZDb@k`>S;#8-7Rl)S5iWQzMSU zcSg1jH;v>DYsg^LYJcsbW3bCeLfaXKaD-57hz(0EvBKMOm|SQrLR+1MUPjAp+8o5L>DTw(6trS z6`T~E6jm#)QHWMNqi|R8i9(&CNI^wOL(x{rMRB>(CdJcA@rs2?#fn@dz9ONdp=6;v zONpbrR_U;EtWvJ>L#4OMjY?h0bY)$Y8OpO&mMU*h2~|F$a$C7r<)?C;%8)We)l|ho zb&g7q>MoT%s%KTss=ih!Rh6g+Rn=5g)ofK~sI5|6q!y|Ax7tnBOKLw=KdKF?cB>hy z>8Sgv*{E+-Tc94Vc1Zo6+IjUVwHNAgwPtlwb-ISX`Xr6*>OmUG>N_R@z)`wsybv zMr}Qv2<_=Q*R+Fl-f3^wY1NL_q3Y!6nCiUJanWheS)ntcb415LH%-S*_nuCW?suK_ zx*a+vbX9b7buDxs>3Zq@&|Rb3p?h3cRWCz#oZeksd%Z8Z3-m;~+w@SqP(5S496dX| z$9f#S?|M7*M0$~Wgx&=`UHzweGxWK7UiuQfCHhqTz52%bar(CU+4=$cMfz*>Kj^7KY5N_aQaMoan!A*mm1}_c540r~a z213{yFnDdC#NZi>We5!>Gvo%&3{A#7hACqMVUe=4)m-^Bc38S;?$tHZg_FcIE(cn2E5cEILaS zV8GI0nXn95Q&{6!)~rb^2iA0!C(D+_X3b`CSl+CqtN_+(kd3S$)>hVB)^659)*(na z$y(0}V{KqXvbM0|SUXtBtevb>kaX4_)_K-`)p21o(abREhqWUYmBR>1j7K^C)eq3&#!KPwHcDW2sH zbvi=bGg!x26Ip+=#zAc?s97JbMj6f|nM+xN%(<*Sraw!-^k7vp9avwP(^xN=rmSM7 z0qZtXgO$&uvoe??%s6H@^Ek7axs%Cdu4R5@&SO4fdNB*3t#g)=}4; zuOrr(r1M$_(>bTppnX8+k#?|7qPDrt2JInjPwk)DEbW`xQmt_9H(JZJ&uUH4-mXQ} zcGIfSGSa%G)vI|*t4wpgR)(gf)@DrtdVq3GEzNw*MveWN_cZ)8BQy*(7i+X>SZX}c z7*Ic>@m76>M!NcBjVbrto|o@cB2RW*C{18SJMx7sf?ZM92k^{RW-Zm7Dd z9Z^+OW2^F1^;EB^HmmGcy{qD)dRj#pdb~;%hDyGQSb3+)EoDcQnLX_ zw<>K=E>f~lKB`1f4p926WTcd?Bv4$VbW?Gv(qY8`MYiG_MLop?#d?LsiUkU0iU$;W z6g(B4D`+Z2C^XXNDcq(TD;%dw=z;WSbYprLU5at&kFas{NU&&|hdsl_gWZ=5U4*?w zEwNNo2KH8EU{#fds(`0&EzK6aMN>de(|ELbU;{V-Yy#!f`LuGX1?@6b4mM8Z;G=tu zI+=PL?3m_J>nT>$VhWv_OsS`Aqud9(q&Uh1%4Q0k!lpDMW|S8QiR2-*U|aMU?1{1v zALMVu0$B;RK`uxKX^Q+L6_5vDGjopoN`{hmz?w3HoKK!6UC3>uCAomqAzev?G$%U< zZL*G_l3$4qqJ(H5t`pygi^MY`l_(^_h#X=+kxXnMB8XMQ-^6@kJ28j&3#>So6SIj0 zgbnOXC0q$B!j3Q}W)S0uDTE>H=@OGcEC@Yf40xa$5?X}uZ_$AGsHhW0Afstx2z_EK z!6Hlv6T*zJgi329Zvj2V4aU)SGZmcLBx3BjOc!#(yN<6W@tX z#1B9nSf;iTjRc<%5U_**(Mfa@{lozH&W}LrprjJ1NNSNPqydCXn5Q=;4M|h5S2csy zoJ3lYGsx+rJ-~%@BHaKUq!-C1eL?)mAizRs{l$P4-?WjHRAB?UaGK$eJ-anSdqhG*L`3L`4D37i>GAg5A$x-_{YMz z*8No_f@(depXhbS;$8 zHBm-aMj5re9<{-40IC1|B_I8w*TI+l&-yAgzwNh2?YT$4`J?vT|JZ`_$X{Rq{u9EV zfO5bOz<0nmz*oQ*z-PcGz(>G)@&ow}!nY8XLHGv3Qow7#tKZtkOVC4Jkk24|3U~r2 zAs>TwQbHC3Mzxju5Z(ja`K`s=A#Ve2f@V_)xDK8|1%Rud?_7Z}AGDuK5MBg5=mH=I zG^6u?Y|xKJHKj~II_SWuWEyBtDWFFslL??todL}%4iE!~`mJe2g5DJl`d29EVW-Fw zfMbB80I(qe?QB#_+fVKV>;~)vYzJ%wYzAxutOKk8`~_GESPobMSOi!Amh&g5*+Bpu0F06Wr_oJm^$)-k7&Q^?7nZ%zcg(*pE& zGjcp>LXIQHfJSNrIw_N6fR3t1>Vk%^MQW1jq#CJ8Due#2K+;JJG+8Q1fme$lQW3vQgC3G<0&Km(u_PzB%tegeJ&z5qS~-T~eKUICs19urS~ zYuNXR2gDuFwr>%)i5sAKUn2@Y2fqTNi%T%BxIkosR-Q>@5ow^KC&PFn9`yBC2&0G? zA{5u=`?Ds>s8^$9$h&`b3?<6)6+lciLu7PkRgv($wuoy-rqhkXO zv5*KN=D}zo1V#-3gcrdk+zB5TM|cvBgd1TGF&l`@fY?-GCX6^{5EEeZVg@l2h>d|5 z3t|Q^I???-f?>djMUPM+vMSzoe0p&?-h~h0?f3vL z!TWF#-i^27op>|ehBx41ycQSY)sRvFzH+}HmEYtJxIL+skiW_cp;<~;KleA`~jYi-^DNDMR+dcoWpP6S&)-~U&Yh# z%XkW&hbKaAJf4HcLT)tVM&g-x7@m%w##8Z=cry6wCE`cnh$DC$eh`nr_v2CcUOWQd zjfdkq@lbp_ehS};pTIZ6ksHA}c|9Dt4nK^qfusMz58x~DefV;G555%6Sc30@^~ZML z3*fBz_%?hVz6IyNnIZTlJP6JX#5dppP=Y^{z{c0&eo%@Jz8ZW7{{mTsdqQcW;(@Qg z-JsM_amAP6F27|d?hLiehFY9J9DmDV+yVb@nFaCxDNA7g-?9|;m%=&A{!5laIV(U` zLYbqo3d;Wr>RAnSt^rvK^{k+LyP#pJ^DclvEiQm;r;`l9Ri^} zg7HIe&qv_i|Auxr0qt=Lt{@a@42PPcpoUl|`3$r`B9xi}C8j}3WkRcELks3WDHow- zFGC5}@MG|Qp2Tm%|8*Dsw}9-L8)--PGt z4&DM!h6s*sgQL6Q>5<{@@Dcnoju1a^jNswQL=CP%G~#*$A7>E~d>qk*TM+%Y6)}R( zAP{&j=~27FkO$ z$yUOYY$vS9e!>R2Dre}se4sB2CRxynj)$IgGK`q*pci(9-kA-(_FU-EmqTyA0loyg z;Cpcdz9wPt)rp5M)L9t2UV^XTE%?foz=*Syq$6KREu@MxL|VbOw3D<(Mo1TgjTH5h`0g2G6zXO79rW-XL=RciQEUCQDt#2h@ttSQ5YD@B14K+%O&^h_ul!H;Yo#hG%N;!jDSETWtTU$YyOy|BjK zDau<&`2{J>kkUmdp%9dJ6g4W3Vgz1n6RACvSyT$um#PUKZ)2$IVEw(l;G24yItNyE zTM8@iZKmD^zqserNa`1A2DKJ^=A_hz)DdbKRhjmS%A&PWC(?SU4&Zgirs>cY!&-5h zXftVtXrAD=H;6kcLKDz(^a9!fYuxpLhbo5sLiJ%CKTB)?b-q9Fuxj3MEEv2b{{rvPJ=k3=3@Zf>N-lO4JTyzdpYs!@Os~U?=$+UUIzo4&>(DuL zbNX7k9eqEYO^>86qi52$)34J{(x1|k>Hk-IXC2w%9yUO zt_&-zD|czijA>U|d4;7bGt=hlzy5yD_B`+PUf1*2yWH22 zWJ#8tW5GG+{@nNX0kwk?sFPGCb&HbHuc=@NjXrt zNI6cqK{;P}K)FtNLAh7?PaGu6;$mo?XCJ+HA>Y_ zHA6L8wM;czwMDf`bwssYby@Yh>Z$6c%8oJ7Y*nI)QWvR$)oOKlwMpGTU0vN)-BjI6 z-B~?cJxD!OJyyL~9i!f$UZdWx-l;yXKBc~=zNLPneyMh=UFu?WA^b*4jZqV>sj8`> zX{>3a>7Z$^=?fdB`B5`XGefgj^Rp&avr)50b3k)ib6#^>b6@jZ^HyWmxHUPNVvSU* z)atci+EUtz+UnZ++D6(o+78+t+CJJL+Tq#>+R55^uvOaC+AZ2`+9TS-+6%CI+B@1e z+80`v)}hVQX2A>P)9Q5^T`8SGS6x?L_m!@$uAQ#AuBWb(Zm_P8Zk%qIZZ@V%F^$D^ zmu|i8m~MyelJ1D^zV5v4rS6u_p^MXH=-%r*x+I+vUaDZ$rz^#(*s5$W+kh>_w#3pm z?3ZjGwi!E^ZO@KjyR*~T{_Ice2zDhqp8buT!R}%gvPbdi9Q!MKjor>ZWDl^f*b}Uk z{eyM0H`pAk@v<*j1t+i^=VHUS40yl_*eV>s)!`Vf5yx^Zxe%^BXW_bWUvS@XmAS## z62(PuiQR4 zP0anJ7MAOll;@Z~Kv>o4VGZ(1efbY77Q|VW7jD9I6*DvGM)M$z&+sFpq`qdzUp%qxSHHat`cgaG`EKf z=eBYj7t1M8dnC7n%V+0u>FhMl$&TmVv!l4@>>%zw+nc+}cIM8ok=$XnDYuiY$8BJ% zax2*~+^WT@_K>b4yII$aU8$?X#^}nk6LewhP@M|C5--m3bX`N8sH>!V zigW)4u7OiJuXc|vO&hCwuU)Krpq-|>r2SEMNZVJpQQKa(RQr`~hPJY9l-8i@qgBCs zTZF4FNn1|)S{tOjt(9p{Ycn-FwSs1~_JL-u_MB#ncAsW|cAci9HbxVnjn-7u_S1xD z+u_Qsr%Bh8*1Xf`GQkBoc#R*cmut?$gSSItrHQjJnCSM^X&Q8iHyQdLlQQ0dk6R34RCm7tQV z9;(umXH+khTU8g8i&VRnV^zzQeN>Z_EmZxLl~rw&0jlcCB4vourt~Q8!l!dwc~23m zJg%6d{8cebIY-e+IaEM+01k%ZL9`%rZLmj6t zQfujL)Kq#t)t4SdHKE&6W$Ee^L$g#el`X$dJ(nMbZ)g>@K|X<+A@4!;mp7oA$_-Q* zxd$=*@p7l^iu|^0hkUQ>C;1ZDQ28iXq`V`tHPn!4$4EMnoh3EM8i762ODN=b zwfn9RSAAQEZN3@AEMH%uuP=g#@P!lM{xN*-Q{M~kaoc}^g6$g1LDp6KG1o({#O zJr#>39=iBlv8@O>=#bfXGf0u?MIDQK7F8~;Tf`J|MUJAh!plYX3pW+*E1X)ips;(< z4~2D$nicAitI1thSa7TGMZwO(69qAas|yAcMi+cl*uEg7uwp@W0aft0z?y%s;9~y5 zf(`kD3nt|^FX*0cDyW@bkgv;smha9xntwZQS^n<4k@@rT+T;(&E0fs&goVy-Qh&b^px%h{NFDQ9Z##+>fCQ*&zN_Q=uX z*2ziA3Cy{flb*dj=Wh0_oPF7Sau#OS&l#K@l+!#rBioYwAiFqgU-p} znWM*LS+c*)D$1&n^*l?H^?O!Q=BljQnbF8D-63m1W~Hn_i2ZDqY0tD|Ue5GnY|MO} zF(va%Mz_oj8FexzXXrD#XQU&`&HaqPjC~oI=?gQSqz}nBlHMX?d3vdgAJZin?bF|- zS4lsYu1b$Z#+*s%x6`_%?@gX?s#D zq%BTm(nh2vq(-J*Ppz1`E0sz8Dbch#XYSQ+{`Uk+Kf?#wWW)cTe|KcSH9Mx5+)u@B)v)+o^&>;L(-jZHcLg3lbkEj!Hb1_-*2v#CphM9+vnW2FO|@+Fj)m@4A@8qpnof zTGtcTbmXi0-WBU=>zd`NilqQoq^rnT-DPzKy6!j&okyJSook&}oim+#k@tL=v%PaX za-a8hh9M^t;jG|HPS81@CFCKm(|hErx|XmgVPC?Sgq6qvH5K`w1}0QVXq6D0P#qc2 z!x9oP7#HVoIxZrw)Go(q#|p<*$27+x#}LO@M`uSLM}(u5ql}}vL+1#0cDIWw0(rVkG-3{mA#q0w!MnoVh^#a?WDcfmTF6~y|KNp-Lze| z9fNIwEw`<-O|#9m4YNhry4eQUTG%?+YTD}CEVfEEjV;_(WL4M_twq+CR=4%0^{w@! z^}cnR^}Kb3b-#6v^*8HS>oV*2*4ft1SZZed!CJ%G)yi92SvhNcD`~B2%@ld7UDR8j ziBjtgu|PZ{ricf`cj9L8vA9aSAG@pnNf?h&NoCZS09MaU5r2`R!{ z!6D2L-U<_hXTnI~p)gRmEA$es3!R0FLObEK&_XyWG!hO7Ukba08p1ZAg0N92EyM~& zVT}+hEE8DaXF-W0QNjX&6y^!V@w0`T_-R5KiaUO?kQ6^waK(=i>?lI~XyGl&OO)sF zQ79vYNAbgjdze3rA0a%z@}2l$prVHhH}TqEZeZK>_#cI9*#CNbG|G6C3D`Cf`%Olf zi4ucj%oiS`JcwU_vINV^ar|F|*YUCV%uT}k_^pB%ze{k&@5gsKDx}7r7P8|n2)XfB zg@X87f;ax5AQN5+D#0oQ2u>kHaN~c>6TUzK&&sH?>ZrTgLV);{U=mvkUx@96s^Yh( z9V+|FZ8fc}ZB4D+ZJn({ zZ3C=RY|+-mwmH@fww2aHwjI_hwlmgewp&)0?X|VYmTFbmy;hT5XRB#1Wov1#4Z^*R zE!y7CHrGDJw#FV~+hbpAyI|jEdu;#1mSBHs^VnUs07tQ{l7qE3b(FJrcQm$-a&)oJ zbquqwcg(OKaICOjb?mgib)2(jJD%B92`Tn62~tPH1f%2Igj$Y~;89}|`Z+cvOmrMi zSmwB!u-jozxa=UDufeBgIchmo2_3tgd+SSy#)YaR$*EP|3&9%xIkBoUmu3OH~M7y(2qR-hm(cl`LSl_iM zvAb(W;&|63WZa8S-0vciZo5h)CAu0V$rJk~l}?`S^7>TO-qbR`ZX~dY7YA3 z7vNfR62D2-Cyh?7k+dZFo1_EDW0D>wuS`l!K9;0)KTN9TPD%R4txJw}*GOLO?wowY z9hLmpy&^dS`P}p=&%nB7CHGF@+*4EPxMNegyU*fI{x)Sj60w|hmrad#w*m7yJe5yb zoZ2d7f9l|r`>6|3vQqb_grwb1iAc*x`93W)b$(g{@UOj6Z=}sgO-kF6%BEjUt()#l z?Uk-do1R`HZF72$w5#be(wxZWrp~yLRx2YptyhLFeO5-D^j#S}(;s9^OV7yInjV;W zGrd7(O8R%1ff;i%8)WRs?3?i*GbST9b6rqDQtQ|j$SpirU@3Z5&=CXkQ;I4SZY%0ic&}(yVQ$ghLcaKEVPvtl za9nW(X}}g?%9dVmQRXXV30q`ThSBi z?drMao$E>Q9`XeFUU-`M2yc|Hl6SqYtM|HZjyJ=1$Qw?)@HQhz-*B+BzYslqmx#H( zB;pWQ+PA*O5}Ft$sZOkt^d&Axej;3wLqst7mS|2gl96OB$r`es05+Hpi zX(DCFVQ7i2mJT2yyfi@WkbWiC$cD)4 z%a+T3ke!wlFm}o^mCRXt?a~)i5rs5rA zP^uKomGu-um3xth z16KqL3p^RHFz{8tp1{I@TY-kaTZ4OqTnwHP zA_lJsk%Sx$DIIb*q(z83WMGIUbaqIE&}|{DLa&7k1{Jv=lnC7xY6?9S8WH+3w0CHJ z=oGN7>qD!A{T><#%5p?lYUod4+OREQ)xfewhQ);q4NDDM5T*^^9#%g5d|0FK=b${Z z!zP7u;j6)~?g(!aeja4%oA9aOnP5?shNI!-4UfW`8(iUi3=+e5gW0gy(9p2O(A99p zFv{@Q5MxL*{AQ3CPZ~mv4-M6gE<>b|Fb*(=87CNP85bJc88;gT8qXLf8E+ex8{Zjs z8}p49j5^a(V;NJTv5rY%YGVpBeP^m+nq+EjT4?HNT5F0j9Wu=|T`{dTJu&StIZWqG z`B+k$ou+VefvJ*NWo~5V&F#&#%zex)%p=WR%rnhH&8y7Q&D+f@%*V`|&6mvw%?~k+ zH$O3_nQdmDIm@iENG+k3082$nS<9D}I+o^^W|l}x2TM0gU&{zflx31-s%5U_C(9Dc z8rXKr7Ryn~e#>RcNy{C}70VOLU5j9evm{&IT5>Ed3(03&w7ky}%9DI4p5iO=YQ82P z$Vc#IzBON&@66ZYd-C=8etaW-FyD$F&9~zx^X>Vm*fJMee&)a9SMlHTYx!aPdX!E4 zkNggP62G6H!XL+;r}=UG8Ga)F2i|dwpTS?}XYn`rnfxuhzQa#PnZ@76`~kK-!TLCU z8kQ&X_i>Dem_OntU>?Qa2aQv(M5FBR!f06Hn<90!5kI!hspTM_0%s1ip@^$g~ zmHCZ)d3>jG{0cstU(9Ry7+#J~$+wK*Q!GRH1j~1Pyrl>K!qSPqV`Wt@&`GzgV=Z3k)6NVp*zZqH^rx+?2yBZY6>IRoVZ@6v93*TpW z8otPID13-v5w3s{;TA*Na8GzyTpdLCsqi;pE5m;e8xg)TtWEf+u(IJz!ivKTVXwmS zLQjU>3|$hoJ#SEA-be z*0@x^k?XD>%$fDoxdg6|J%X{iDcoYVCHD=h<3iau)~Z|29@GtB$Lp%F4G^&)1AF{X zJ4^Sgwl&7bbhBwjXk?nhnp`@V0tQ+ zGe$*EMr2AcM;JFffjLRnW2VCc(UQJJYv`r)Q>qvJ8&#SfK{=_q)KR$Xr&BlNEvZ#< z4K)CnDyt#aWT9-N9Aq&VV~KpA>@l*1?vxcv#~`CR zTF-oVxaZ^bJd~J{ZR@b_diY&qv1Jq9u?2qCt?-=ggzbe_eII=2N8mj@m_5!uiAHVPS;8_O2 z&-w#+mtmMk`9}E0f`b_g9%cgAn91C4`Qj)Y%4JXB+sP9iVyqM9)F6JxAfQJq8NsIEtTNz5qJt0zA9tOUR*1B`lGj zExHTV=mDk=a6Wz@m*c=K`HP=jeg)R)4aleWCH#{J9?H)~eW0d3=|UxyP*#5KDg*r0 z=bBJ{mdj6gec-)5XhD4-mp{nueg3@q@0O9O26HtE0Pum5KT`vZsVXRtqT*#3;x zA2@73h5d=c{={PYIqXj?wm+iEU*3OYvEQP#;xC_A?AIl27(a{s0_Jbi_;YdpJ&*ke z?VyLCvHh)~`)C#2D~ap6{kKf^HMFCyg2=w&yYxSD*{9JC^Rw9}&?56kmHic)eGp`} zpUvKfcATHj-VHK)7ut1xKHDFu_FwtzSWw#Q(IQ-j=^C^Ne}Sz+`*0=9&uA|zVYHWm z(Dt_^7a=NcAzGC`f$*D$h{m~SWzH#SZ~i-{JsIuMiHNEjkGAPpP=V2Ct44tv9EBF^ z2((@Otyh0L*3W7W0;%nf%KN}-_ePAKKUS}MNz`6fw15AK*KUJ$aw}hpkHmIkME-ps zwi}=={UwO)I{$^)_P4jo{~NV!L7&M_Z6hSPq;>v*+t!11)S=C;LA;?7afctsZ7Evw z62xqxX%BMyU+i}FM|L|EZU1CgA}pb#KVbKYu=lVx|Hf~}f!={?+jkKIdE0v( zJ&G&nTU_*BLLcJ-B0)cAxR0X;as&+bK@gq$&?DImf_o==C)+@9ZwAl#8+t6ig5X{U zg8N?__aYFVKY`|+i|K4{40<`Uy;Dp2I#Us?ISDNH`2S$Jhl4B~0)BK5DAR$Uxch

_pEH&^pMxorq%<=?Pt1ce8zNF z0KfVLNbb^LSuG&BP3WzKgX9hY;~EH(oBPOhtG$vxxo$bQZql0zW;Wa70YzJgK3_ii zrMV!vv(O7n2g#lKA8fY+B)1hLw*Vsdo#&zF4SJ6+(SLl7eqvmCwI zrJ#ZRocF@N;k>6~uc_E;GWME?{_=S2ITn59X!Mc)n)ROck@cQj!g}`y9sV8Y@IHU? z-lPA5_a0Hgdw2Sb_x>73`4{s&@Nb##W*?dFruc+U+_#_kZUln*Ke_LQpK;%Q2K>M0 zzWogN-?87H_-{Y^{fYnfv)_Nke-8tn?q|S9f&m}pX#;Be0|P$B^EK+l&wzLQi~;`^ z40u;?^W8yl_XKg@8}-~5_1zD3Kj0$=J{aQ>L;r#UABW#_B7WN`_>HII_nwKfVh%

)oVQ-oDnMdJ$g^`!{&4hiEAUuIa zA$n*6o?x>OeY6lG2P+ZLv;j}top@p&E@8wA@jR3f_kB9zg)fW{ePsx@uNsl-t4~OX z7ErJ505y)D(6Sx`P3tHqc1(fB^*o||2`3&)d{68oek6`!?Rl)dNvt5Af*y|tJ)T4y z$EeyL1Sz>gXrWOQj!6D;&?)k>;_$J73=aSqZjlU2(mT^ z@n%pk>O`(4zazJiBgrGsZ}&6f_b?v#n%qIU$YW$4d6|?$*Cjw~&8L*J-~Y$8=k zJ3_goFESR4l-9$DVk@Y;bS>e=cSG^zq;w8Q@fFfI=@zLC8s(YLg&}1RpdRy1%F9xu zH83*SM5dN?f~HJAD9uF4B1+itrBI^TC>sgQnyJvQSqwd+4Nywo4=tl}vSKL0tL1NG zM!8#773w#QM^CF zt(1|@rmE61x-lI@ccRPF1L*p6G#v?!yf^6ak@R+YI{iDnjJ{59p`X)7X(xS!&Zpx* z3EJs!CYP?vFiZp!%5-2VG5wjZn9)po<{fjUge6}Io_ro_=4WOEvxFJWEG{X-m_^J`W+5|#`H30K%x8XJ<}u%cP#?(5Wd<;_@rizJeFiA@ z=}d2CD$|RZ!t`J!G2NI6Ojl+c^DQ%$`3B#jBR;J?KBXOw-j*50w8qg|GJ}}rI8sv_ zr4f!0fg?1)yX)cIb@0xbcxQF|Usdp~icA}(JkyFPi+7Y_nlNVkrv~gDioJuFT8tih z>aeF8dos)yjGQUWkc@@#(gvo84q@`>Kqi}JnRHsiq|gc`k(M(KTEd95hkj2N(68wn z)NTg-gifI!(1~F69rO)aq%VWrzd*mF&!EOn&=2V&^j-P@w(P;LupL`AV@oW4pEdMh zdL_M|{u$i=0(vVQL;pt4q}S0?@EeZDX!~e-Aw2?X2V?C3tnEXOqr1~lbZ2@v{WU#^ zZjJbXW^^w)g6@Jif{t`eL=se{o73g!Ml?@+0_l88OJ{-x zO`%BINflEfl}o*$(y3=S#~xC4>NfSBxI!$fFsQ)@@ zKeYmp4U2JR&cmx2)Jkd+UPV(e)Cjy9L`|gnQlqKv)Nra3^*!Pu`cTbrjz=IjNgb*+ zRSj_y<*5b~Pt~HrsLGU{Dod%5vqVM(Qy#gN%9YcIuOKKFG_*wMWxYlQlc&(dx>usv z^$b_k1NkXvU>%13)gGu`ZH3}hEOf6{L+xq_mgZq;29_pZDGCZ#L$TB!*Je*Bhkb)9 zGZH#i%@O6%P~KKvTiz6LAN8SURa0(+##InBt~7`Sq2zjKlc^9NB9*7filAqe4LvJ2 z^sMagX}p!)hQ`$u+!xLwi^?(FBlgQqLfz^R?i0J9X|)N;XzOJ25Op#`wg9?lvk-?e zSvEu#jl0Y+S$Ek0+;Mu!+CV+6i7XOXSenUd$QsBh$ZA6AsuGm0N<(WcT&9%iWhADB z&}7S!7De~Y86zMGK7{t|#kVZodZkV)>bRgnudP&_vVjt8gF2T-7&Pt9WQ_VriA<1soR@esE8rX8!B3KM;25b^+ zER^_0!G^#F!1_RWs~fBntR1W+tcj#CG`Jc-jjImgr>a4btD>YV%px&Ek1GtyT!GN! z(n*vsIgCID2}$ONJUnMJ5to%hxS`SI1kY^66Zkz8yIw)7D-Nn%j}XCi7s_2XiEG3a z;v$~P=ZG`JDdGfi4A1UEi0ax01+QJi4rJNc0=2>4kYi^(u@+HZtMEi$Ml2;36N`ui z#C$}E%^_w%*=ss6m6!~5uL;CBVhjuSrt|Zz=cIg_9mysP?cZ%%N Xx~m4ut=scm#!vWR_-MXnErR$zF<~bT literal 0 HcmV?d00001 diff --git a/Head-First-Design-Patterns-master/heatindex.txt b/Head-First-Design-Patterns-master/heatindex.txt new file mode 100644 index 0000000..232c7b0 --- /dev/null +++ b/Head-First-Design-Patterns-master/heatindex.txt @@ -0,0 +1,11 @@ +private float computeHeatIndex(float t, float rh) { + float index = (float)((16.923 + (0.185212 * t) + (5.37941 * rh) - (0.100254 * t * rh) + + (0.00941695 * (t * t)) + (0.00728898 * (rh * rh)) + + (0.000345372 * (t * t * rh)) - (0.000814971 * (t * rh * rh)) + + (0.0000102102 * (t * t * rh * rh)) - (0.000038646 * (t * t * t)) + (0.0000291583 * + (rh * rh * rh)) + (0.00000142721 * (t * t * t * rh)) + + (0.000000197483 * (t * rh * rh * rh)) - (0.0000000218429 * (t * t * t * rh * rh)) + + 0.000000000843296 * (t * t * rh * rh * rh)) - + (0.0000000000481975 * (t * t * t * rh * rh * rh))); + return index; +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Duck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Duck.java new file mode 100755 index 0000000..2f947a3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Duck.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.adapter.ducks; + +public interface Duck { + public void quack(); + public void fly(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckAdapter.java new file mode 100755 index 0000000..bf193a9 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckAdapter.java @@ -0,0 +1,22 @@ +package headfirst.designpatterns.adapter.ducks; +import java.util.Random; + +public class DuckAdapter implements Turkey { + Duck duck; + Random rand; + + public DuckAdapter(Duck duck) { + this.duck = duck; + rand = new Random(); + } + + public void gobble() { + duck.quack(); + } + + public void fly() { + if (rand.nextInt(5) == 0) { + duck.fly(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckTestDrive.java new file mode 100755 index 0000000..4b3790f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckTestDrive.java @@ -0,0 +1,34 @@ +package headfirst.designpatterns.adapter.ducks; + +import headfirst.designpatterns.adapter.ducks.challenge.Drone; +import headfirst.designpatterns.adapter.ducks.challenge.DroneAdapter; +import headfirst.designpatterns.adapter.ducks.challenge.SuperDrone; + +public class DuckTestDrive { + public static void main(String[] args) { + Duck duck = new MallardDuck(); + + Turkey turkey = new WildTurkey(); + Duck turkeyAdapter = new TurkeyAdapter(turkey); + + System.out.println("The Turkey says..."); + turkey.gobble(); + turkey.fly(); + + System.out.println("\nThe Duck says..."); + testDuck(duck); + + System.out.println("\nThe TurkeyAdapter says..."); + testDuck(turkeyAdapter); + + // Challenge + Drone drone = new SuperDrone(); + Duck droneAdapter = new DroneAdapter(drone); + testDuck(droneAdapter); + } + + static void testDuck(Duck duck) { + duck.quack(); + duck.fly(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/MallardDuck.java new file mode 100755 index 0000000..846f20f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/MallardDuck.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.adapter.ducks; + +public class MallardDuck implements Duck { + public void quack() { + System.out.println("Quack"); + } + + public void fly() { + System.out.println("I'm flying"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Turkey.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Turkey.java new file mode 100755 index 0000000..d35e3d5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Turkey.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.adapter.ducks; + +public interface Turkey { + public void gobble(); + public void fly(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyAdapter.java new file mode 100755 index 0000000..600cf13 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyAdapter.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.adapter.ducks; + +public class TurkeyAdapter implements Duck { + Turkey turkey; + + public TurkeyAdapter(Turkey turkey) { + this.turkey = turkey; + } + + public void quack() { + turkey.gobble(); + } + + public void fly() { + for(int i=0; i < 5; i++) { + turkey.fly(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyTestDrive.java new file mode 100755 index 0000000..667b17c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyTestDrive.java @@ -0,0 +1,14 @@ +package headfirst.designpatterns.adapter.ducks; + +public class TurkeyTestDrive { + public static void main(String[] args) { + MallardDuck duck = new MallardDuck(); + Turkey duckAdapter = new DuckAdapter(duck); + + for(int i=0;i<10;i++) { + System.out.println("The DuckAdapter says..."); + duckAdapter.gobble(); + duckAdapter.fly(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/WildTurkey.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/WildTurkey.java new file mode 100755 index 0000000..04a62c7 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/WildTurkey.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.adapter.ducks; + +public class WildTurkey implements Turkey { + public void gobble() { + System.out.println("Gobble gobble"); + } + + public void fly() { + System.out.println("I'm flying a short distance"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/Drone.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/Drone.java new file mode 100755 index 0000000..c2cc1a3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/Drone.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.adapter.ducks.challenge; + +public interface Drone { + public void beep(); + public void spin_rotors(); + public void take_off(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/DroneAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/DroneAdapter.java new file mode 100755 index 0000000..f503d74 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/DroneAdapter.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.adapter.ducks.challenge; + +import headfirst.designpatterns.adapter.ducks.Duck; + +public class DroneAdapter implements Duck { + Drone drone; + + public DroneAdapter(Drone drone) { + this.drone = drone; + } + + public void quack() { + drone.beep(); + } + + public void fly() { + drone.spin_rotors(); + drone.take_off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/SuperDrone.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/SuperDrone.java new file mode 100755 index 0000000..bd36eec --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/SuperDrone.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.adapter.ducks.challenge; + +public class SuperDrone implements Drone { + public void beep() { + System.out.println("Beep beep beep"); + } + public void spin_rotors() { + System.out.println("Rotors are spinning"); + } + public void take_off() { + System.out.println("Taking off"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EI.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EI.java new file mode 100755 index 0000000..5ea91ab --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EI.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.adapter.iterenum; + +import java.util.*; + +public class EI { + public static void main (String args[]) { + Vector v = new Vector(Arrays.asList(args)); + Enumeration enumeration = v.elements(); + while (enumeration.hasMoreElements()) { + System.out.println(enumeration.nextElement()); + } + Iterator iterator = v.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIterator.java new file mode 100755 index 0000000..56f2d2f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIterator.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.adapter.iterenum; + +import java.util.*; + +public class EnumerationIterator implements Iterator { + Enumeration enumeration; + + public EnumerationIterator(Enumeration enumeration) { + this.enumeration = enumeration; + } + + public boolean hasNext() { + return enumeration.hasMoreElements(); + } + + public Object next() { + return enumeration.nextElement(); + } + + public void remove() { + throw new UnsupportedOperationException(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIteratorTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIteratorTestDrive.java new file mode 100755 index 0000000..d0264d8 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIteratorTestDrive.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.adapter.iterenum; + +import java.util.*; + +public class EnumerationIteratorTestDrive { + public static void main (String args[]) { + Vector v = new Vector(Arrays.asList(args)); + Iterator iterator = new EnumerationIterator(v.elements()); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumeration.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumeration.java new file mode 100755 index 0000000..5480780 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumeration.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.adapter.iterenum; + +import java.util.*; + +public class IteratorEnumeration implements Enumeration { + Iterator iterator; + + public IteratorEnumeration(Iterator iterator) { + this.iterator = iterator; + } + + public boolean hasMoreElements() { + return iterator.hasNext(); + } + + public Object nextElement() { + return iterator.next(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumerationTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumerationTestDrive.java new file mode 100755 index 0000000..1e341a6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumerationTestDrive.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.adapter.iterenum; + +import java.util.*; + +public class IteratorEnumerationTestDrive { + public static void main (String args[]) { + ArrayList l = new ArrayList(Arrays.asList(args)); + Enumeration enumeration = new IteratorEnumeration(l.iterator()); + while (enumeration.hasMoreElements()) { + System.out.println(enumeration.nextElement()); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Client.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Client.java new file mode 100644 index 0000000..868f32a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Client.java @@ -0,0 +1,22 @@ +package headfirst.designpatterns.bridge.remote; + +public class Client { + public static void main(String[] args) { + TVFactory tvFactory = new TVFactory(); + SpecialRemote remoteSony = new SpecialRemote(tvFactory); + System.out.println("Connect your remote to the TV"); + remoteSony.setTV("Sony"); + remoteSony.on(); + remoteSony.up(); + remoteSony.down(); + remoteSony.off(); + + GenericRemote remoteLG = new GenericRemote(tvFactory); + System.out.println("Connect your remote to the TV"); + remoteLG.setTV("LG"); + remoteLG.on(); + remoteLG.nextChannel(); + remoteLG.prevChannel(); + remoteLG.off(); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/GenericRemote.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/GenericRemote.java new file mode 100644 index 0000000..e454efa --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/GenericRemote.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.bridge.remote; + +public class GenericRemote extends RemoteControl { + public GenericRemote(TVFactory tvFactory) { + super(tvFactory); + } + public void nextChannel() { + int channel = this.getChannel(); + this.setChannel(channel+1); + } + public void prevChannel() { + int channel = this.getChannel(); + this.setChannel(channel-1); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/LG.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/LG.java new file mode 100644 index 0000000..d178491 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/LG.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.bridge.remote; + +public class LG extends TV { + int channel = 1; + public void on() { + System.out.println("Turning on the LG TV"); + } + public void off() { + System.out.println("Turning off the LG TV"); + } + public void tuneChannel(int channel) { + this.channel = channel; + System.out.println("Set the LG TV Channel to " + this.channel); + } + public int getChannel() { + return channel; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/RemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/RemoteControl.java new file mode 100644 index 0000000..f673d5b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/RemoteControl.java @@ -0,0 +1,28 @@ +package headfirst.designpatterns.bridge.remote; + +public abstract class RemoteControl { + TV tv; + TVFactory tvFactory; + public RemoteControl(TVFactory tvFactory) { + this.tvFactory = tvFactory; + } + public void on() { + this.tv.on(); + } + public void off() { + this.tv.off(); + } + public void setChannel(int channel) { + tv.tuneChannel(channel); + } + public int getChannel() { + return tv.getChannel(); + } + public void setTV(String type) { + try { + tv = tvFactory.getTV(type); + } catch (Exception e) { + System.out.println(e); + } + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Sony.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Sony.java new file mode 100644 index 0000000..ebf9807 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Sony.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.bridge.remote; + +public class Sony extends TV { + int station = 0; + public void on() { + System.out.println("Turning on the Sony TV"); + } + public void off() { + System.out.println("Turning off the Sony TV"); + } + public void tuneChannel(int channel) { + this.station = channel; + System.out.println("Set the Sony TV station to " + this.station); + } + public int getChannel() { + return station; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/SpecialRemote.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/SpecialRemote.java new file mode 100644 index 0000000..adb2cda --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/SpecialRemote.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.bridge.remote; + +public class SpecialRemote extends RemoteControl { + public SpecialRemote(TVFactory tvFactory) { + super(tvFactory); + } + public void up() { + int channel = this.getChannel(); + this.setChannel(channel+1); + } + public void down() { + int channel = this.getChannel(); + this.setChannel(channel-1); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TV.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TV.java new file mode 100644 index 0000000..78832d0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TV.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.bridge.remote; + +public abstract class TV { + public abstract void on(); + public abstract void off(); + public abstract void tuneChannel(int channel); + public abstract int getChannel(); +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TVFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TVFactory.java new file mode 100644 index 0000000..fe03da6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TVFactory.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.bridge.remote; + +public class TVFactory { + public TV getTV(String type) throws Exception { + if (type.equals("LG")) { + return new LG(); + } else if (type.equals("Sony")) { + return new Sony(); + } else { + throw new Exception("Invalid TV Type"); + } + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/GingerbreadHouseBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/GingerbreadHouseBuilder.java new file mode 100644 index 0000000..ae39c44 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/GingerbreadHouseBuilder.java @@ -0,0 +1,36 @@ +package headfirst.designpatterns.builder.house; + +public class GingerbreadHouseBuilder extends HouseBuilder { + int numWalls = 4; + int numWindows = 4; + String windowMaterial = "Sugar"; + String wallMaterial = "Gingerbread and icing"; + String roofMaterial = "Twizzlers"; + public GingerbreadHouseBuilder() { + this.builderName = "Gingerbread House Builder"; + setHouseType(HouseType.GINGERBREAD); + } + public HouseBuilder addWalls() { + // add exterior walls + for (int i = 0; i < numWalls; i++) { + System.out.println("Adding wall made out of " + wallMaterial); + house.addWall(new Wall(wallMaterial)); + } + return this; + } + public HouseBuilder addWindows() { + for (int i = 0; i < numWindows; i++) { + System.out.println("Adding window made out of " + windowMaterial); + house.addWindow(new Window(windowMaterial)); + } + return this; + } + public HouseBuilder addRoof() { + house.addRoof(new Roof(roofMaterial)); + return this; + } + public House build() { + System.out.println("Stick everything together with icing"); + return house; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/House.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/House.java new file mode 100755 index 0000000..fbd4f11 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/House.java @@ -0,0 +1,65 @@ +package headfirst.designpatterns.builder.house; + +import headfirst.designpatterns.builder.house.HouseBuilder.HouseType; +import java.util.*; + +public class House { + String name; + HouseType houseType; + Roof roof; + List walls; + List windows; + + public House() { + this.walls = new ArrayList(); + this.windows = new ArrayList(); + } + public House setHouseType(HouseType houseType) { + this.houseType = houseType; + switch (houseType) { + case WOOD: this.name = "My wood house"; break; + case CLAY: this.name = "My clay house"; break; + case GINGERBREAD: this.name = "My holiday gingerbread house"; break; + case STONE: this.name = "My stone house"; break; + } + return this; + } + House addRoof(Roof roof) { + this.roof = roof; + return this; + } + House addWall(Wall wall) { + this.walls.add(wall); + return this; + } + House addWindow(Window window) { + this.windows.add(window); + return this; + } + public void setName(String name) { + this.name = name; + } + + public String toString() { + // Use a StringBuilder to build the string :-) + // Like StringBuffer, but not synchronized + StringBuilder display = new StringBuilder(); + display.append("---- " + this.name + " ----\n"); + for (Wall wall : walls) { + display.append("--- " + wall.name + " ---\n"); + } + for (Window window : windows) { + display.append("--- " + window.name + " ---\n"); + } + display.append("--- " + roof.name + " ---\n"); + return display.toString(); + + // There is some difference of opinion about StringBuilder and whether it's using + // the Builder pattern or not. Some say yes, some say no. + // StringBuilder does not provide an abstract API with multiple subclasses for + // creating different representations (variations). + } +} + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseBuilder.java new file mode 100644 index 0000000..023ec19 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseBuilder.java @@ -0,0 +1,31 @@ +package headfirst.designpatterns.builder.house; + +import java.util.ArrayList; +import java.util.List; + +public abstract class HouseBuilder { + String builderName; + enum HouseType { + WOOD, CLAY, GINGERBREAD, STONE + } + HouseType houseType; + House house = new House(); + + public void setHouseType(HouseType houseType) { + this.houseType = houseType; + house.setHouseType(houseType); + } + // Each method in the Builder returns the Builder so we can use the Fluent Interface Pattern + public abstract HouseBuilder addWalls(); + public abstract HouseBuilder addRoof(); + public abstract HouseBuilder addWindows(); + + public House build() { + System.out.println("Build the house!"); + // Very simple build -- just return the house! + // We've added all the parts... + // In a real build, we'd have to nail and screw everything together of course. + // And add wiring and so on. + return house; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseDirector.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseDirector.java new file mode 100755 index 0000000..e73377e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseDirector.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.builder.house; + +public class HouseDirector { + + // Fluent Interface pattern (return the builder each time so we can string the calls together) + // Builder pattern (we have two different builders so the "same construction process can create + // different representations"). + // Builder is a solution to the telescoping constructor anti-pattern, where we have multiple, + // complex constructor methods with various args for all various combinations of options + // in construction options. + + // in this example main() is the construct() method + public static void main(String[] args) { + // The Director calls the methods in the correct order to build a house. + // Could make this a lot more complicated to allow number of walls, windows, to be passed in. + + HouseBuilder woodHouseBuilder = new WoodHouseBuilder(); + House woodHouse = woodHouseBuilder.addWalls().addWindows().addRoof().build(); + System.out.println(woodHouse); + + HouseBuilder clayHouseBuilder = new ClayHouseBuilder(); + House clayHouse = clayHouseBuilder.addWalls().addWindows().addRoof().build(); + System.out.println(clayHouse); + + HouseBuilder gingerbreadHouseBuilder = new GingerbreadHouseBuilder(); + House gingerbreadHouse = gingerbreadHouseBuilder.addWalls().addWindows().addRoof().build(); + System.out.println(gingerbreadHouse); + + // Builder has similarities to Abstract Factory. + // But difference is that Builder provides a step by step API for building a product; + // the client is responsible for calling the steps, and those can vary in order, etc. + // With Builder, the client must have more knowledge of the details of the product being built. + // Product implementations can be swapped for others; clients don't change because the use the abstract API. + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/InteriorWall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/InteriorWall.java new file mode 100755 index 0000000..004be32 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/InteriorWall.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.builder.house; + +public class InteriorWall extends Wall { + String name; + String material; + + public InteriorWall(String material) { + super(material); + this.name = "Interior wall made out of " + material; + } + public void setName(String name) { + this.name = name; + } + public String toString() { + return this.name; + } +} + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Roof.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Roof.java new file mode 100755 index 0000000..2ab858b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Roof.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.builder.house; + +public class Roof { + String name; + String material; + + public Roof(String material) { + this.name = "Roof made out of " + material; + } + public void setName(String name) { + this.name = name; + } + public String toString() { + return this.name; + } +} + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/StoneHouseBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/StoneHouseBuilder.java new file mode 100644 index 0000000..07377af --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/StoneHouseBuilder.java @@ -0,0 +1,37 @@ +package headfirst.designpatterns.builder.house; + +public class StoneHouseBuilder extends HouseBuilder { + int numWalls = 5; // Stone houses have 5 walls: 4 exterior, 1 interior + int numWindows = 20; // Stone houses have a lot of windows + String windowMaterial = "Antique glass"; + String wallMaterial = "Stone, 2 feet thick"; + String interiorWallMaterial = "Stone, 1 foot thick"; + String roofMaterial = "Tile"; + public StoneHouseBuilder() { + this.builderName = "Stone House Builder"; + setHouseType(HouseType.STONE); + } + public HouseBuilder addWalls() { + // Add 4 exterior walls + for (int i = 0; i < numWalls-1; i++) { + house.addWall(new Wall(interiorWallMaterial)); + } + // Add 1 interior wall + house.addWall(new InteriorWall(wallMaterial)); + return this; + } + public HouseBuilder addWindows() { + for (int i = 0; i < numWindows; i++) { + house.addWindow(new Window(windowMaterial)); + } + return this; + } + public HouseBuilder addRoof() { + house.addRoof(new Roof(roofMaterial)); + return this; + } + public House build() { + System.out.println("Stick everything together with mortar"); + return house; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Wall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Wall.java new file mode 100755 index 0000000..73a67e5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Wall.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.builder.house; + +public class Wall { + String name; + String material; + + public Wall(String material) { + this.name = "Wall made out of " + material; + } + public void setName(String name) { + this.name = name; + } + public String toString() { + return this.name; + } +} + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Window.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Window.java new file mode 100755 index 0000000..15cf7b9 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Window.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.builder.house; + +public class Window { + String name; + String material; + + public Window(String material) { + this.name = "Window made out of " + material; + } + public void setName(String name) { + this.name = name; + } + public String toString() { + return this.name; + } +} + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/WoodHouseBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/WoodHouseBuilder.java new file mode 100644 index 0000000..ff04c25 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/WoodHouseBuilder.java @@ -0,0 +1,44 @@ +package headfirst.designpatterns.builder.house; + +import headfirst.designpatterns.builder.house.HouseBuilder.HouseType; + +public class WoodHouseBuilder extends HouseBuilder { + int numWalls = 6; // 4 exterior walls, 2 interior + int numWindows = 10; + String windowMaterial = "Tempered glass"; + String wallMaterial = "Wood, 4x6"; + String interiorWallMaterial = "Wood, 2x4"; + String roofMaterial = "Metal"; + public WoodHouseBuilder() { + this.builderName = "Wood House Builder"; + setHouseType(HouseType.WOOD); + } + public HouseBuilder addWalls() { + // add exterior walls + for (int i = 0; i < 4; i++) { + System.out.println("Nailing wood for wall made out of " + wallMaterial); + house.addWall(new Wall(wallMaterial)); + } + // add interior walls + for (int i = 0; i < numWalls - 4; i++) { + System.out.println("Nailing wood for interior wall made out of " + interiorWallMaterial); + house.addWall(new InteriorWall(interiorWallMaterial)); + } + return this; + } + public HouseBuilder addWindows() { + for (int i = 0; i < numWindows; i++) { + System.out.println("Adding window made out of " + windowMaterial); + house.addWindow(new Window(windowMaterial)); + } + return this; + } + public HouseBuilder addRoof() { + house.addRoof(new Roof(roofMaterial)); + return this; + } + public House build() { + System.out.println("Nail everything together"); + return house; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/MeatPizzaBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/MeatPizzaBuilder.java new file mode 100644 index 0000000..64b2b75 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/MeatPizzaBuilder.java @@ -0,0 +1,40 @@ +package headfirst.designpatterns.builder.pizza; + +public class MeatLoversPizzaBuilder extends PizzaBuilder { + public MeatLoversPizzaBuilder() { + this.name = "Meat Lovers Pizza"; + } + public PizzaBuilder addCheese() { + // meat lovers like moz + this.toppings.add("mozzerella"); + return this; + } + public PizzaBuilder addSauce() { + this.toppings.add("NY style sauce"); + return this; + } + public PizzaBuilder addTomatoes() { + this.toppings.add("sliced tomatoes"); + return this; + } + public PizzaBuilder addGarlic() { + this.toppings.add("garlic"); + return this; + } + public PizzaBuilder addOlives() { + // never add olives to meat lovers pizza + return this; + } + public PizzaBuilder addSpinach() { + // never add spinach to meat lovers pizza + return this; + } + public PizzaBuilder addPepperoni() { + this.toppings.add("pepperoni"); + return this; + } + public PizzaBuilder addSausage() { + this.toppings.add("sausage"); + return this; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/Pizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/Pizza.java new file mode 100755 index 0000000..5b87976 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/Pizza.java @@ -0,0 +1,50 @@ +package headfirst.designpatterns.builder.pizza; + +import java.util.*; + +public class Pizza { + String name; + List toppings; + + void addToppings(List toppings) { + this.toppings = toppings; + } + + void prepare() { + System.out.println("Prepare " + name); + System.out.println("Tossing dough..."); + System.out.println("Adding sauce..."); + System.out.println("Adding toppings: "); + for (String topping : toppings) { + System.out.println(" " + topping); + } + } + + void bake() { + System.out.println("Bake for 25 minutes at 350"); + } + + void cut() { + System.out.println("Cut the pizza into diagonal slices"); + } + + void box() { + System.out.println("Place pizza in official PizzaStore box"); + } + + public void setName(String name) { + this.name = name; + } + + public String toString() { + StringBuffer display = new StringBuffer(); + display.append("---- " + this.name + " ----\n"); + for (String topping : toppings) { + display.append(topping + "\n"); + } + return display.toString(); + } +} + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaBuilder.java new file mode 100644 index 0000000..b09ace2 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaBuilder.java @@ -0,0 +1,24 @@ +package headfirst.designpatterns.builder.pizza; + +import java.util.ArrayList; +import java.util.List; + +public abstract class PizzaBuilder { + String name; + List toppings = new ArrayList(); + + public abstract PizzaBuilder addCheese(); + public abstract PizzaBuilder addSauce(); + public abstract PizzaBuilder addTomatoes(); + public abstract PizzaBuilder addGarlic(); + public abstract PizzaBuilder addOlives(); + public abstract PizzaBuilder addSpinach(); + public abstract PizzaBuilder addPepperoni(); + public abstract PizzaBuilder addSausage(); + public Pizza build() { + Pizza pizza = new Pizza(); + pizza.setName(this.name); + pizza.addToppings(toppings); + return pizza; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaDirector.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaDirector.java new file mode 100755 index 0000000..56ecb99 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaDirector.java @@ -0,0 +1,56 @@ +package headfirst.designpatterns.builder.pizza; + +public class PizzaDirector { + + // Fluent Interface pattern (return the builder each time so we can string the calls together) + // Builder pattern (we have two different builders so the "same construction process can create + // different representations"). + // Builder is a solution to the telescoping constructor anti-pattern, where we have multiple, + // complex constructor methods with various args for all various combinations of options + // in construction options. + + // in this example main() is the construct() method + public static void main(String[] args) { + // Could hand builders to PizzaStore which would take the customer's order, + // and call appropriate methods for each topping, then call the + // pizza methods to prep and return to the customer. + PizzaBuilder veggieBuilder = new VeggieLoversPizzaBuilder(); + // The PizzaDirector calls the methods in the correct order to + // build a veggiePizza. + Pizza veggie = veggieBuilder.addSauce().addCheese().addOlives().addTomatoes().addSausage().build(); + veggie.prepare(); + veggie.bake(); + veggie.cut(); + veggie.box(); + System.out.println(veggie); + + PizzaBuilder meatBuilder = new MeatLoversPizzaBuilder(); + // The PizzaDirector calls the methods in the correct order to build + // a meat lovers Pizza + Pizza meat = meatBuilder.addSauce().addTomatoes().addCheese().addSausage().addPepperoni().build(); + meat.prepare(); + meat.bake(); + meat.cut(); + meat.box(); + System.out.println(meat); + + // There is some difference of opinion about StringBuilder and whether it's using + // the Builder pattern or not. Some say yes, some say no. + // StringBuilder does not provide an abstract API with multiple subclasses for + // creating different representations (variations). So, strictly, no, it doesn't + // use the Builder Pattern, but rather the Fluent Interface Pattern. + StringBuilder sb = new StringBuilder(); + sb.append("\nTesting String Builder\n").append(veggie).insert(0, "===="); + System.out.println("Length of the String Builder: " + sb.length()); + System.out.println("Result of the String Builder: " + sb.toString()); + + String sb2 = new StringBuilder().append("\nTesting String Builder\n").append(meat).insert(0, "====").toString(); + System.out.println(sb2); + + // Builder has similarities to Abstract Factory. + // But difference is that Builder provides a step by step API for building a product; + // the client is responsible for calling the steps, and those can vary in order, etc. + // With Builder, the client must have more knowledge of the details of the product being built. + // Product implementations can be swapped for others; clients don't change because the use the abstract API. + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/VeggiePizzaBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/VeggiePizzaBuilder.java new file mode 100644 index 0000000..fbbd03a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/VeggiePizzaBuilder.java @@ -0,0 +1,41 @@ +package headfirst.designpatterns.builder.pizza; + +public class VeggieLoversPizzaBuilder extends PizzaBuilder { + public VeggieLoversPizzaBuilder() { + this.name = "Veggie Lovers Pizza"; + } + public PizzaBuilder addCheese() { + // veggie lovers like parm + this.toppings.add("parmesan"); + return this; + } + public PizzaBuilder addSauce() { + this.toppings.add("sauce"); + return this; + } + public PizzaBuilder addTomatoes() { + this.toppings.add("chopped tomatoes"); + return this; + } + public PizzaBuilder addGarlic() { + this.toppings.add("garlic"); + return this; + } + public PizzaBuilder addOlives() { + this.toppings.add("green olives"); + return this; + } + public PizzaBuilder addSpinach() { + this.toppings.add("spinach"); + return this; + } + public PizzaBuilder addPepperoni() { + // never EVER add Pepperoni to veggie lovers pizza + return this; + } + public PizzaBuilder addSausage() { + // never EVER add Sausage to veggie lovers pizza + return this; + } + +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Accommodation.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Accommodation.java new file mode 100644 index 0000000..505b086 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Accommodation.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.builder.vacation; + +public abstract class Accommodation { + String name; + Reservation reservation = null; + + public void setReservation(Reservation r) { + this.reservation = r; + } + public Reservation getReservation() { + return this.reservation; + } + public abstract String getLocation(); + public String toString() { + StringBuffer display = new StringBuffer(); + display.append("You're staying at " + name); + if (this.reservation != null) { + display.append("\nYou have a reservation for arrival date: " + reservation.getArrivalDate() + + ", staying for " + reservation.getNights() + " nights"); + } + if (this.getLocation() != "") { + display.append(" in " + this.getLocation()); + } + display.append("\n"); + return display.toString(); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/CityVacationBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/CityVacationBuilder.java new file mode 100644 index 0000000..834ef60 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/CityVacationBuilder.java @@ -0,0 +1,32 @@ +package headfirst.designpatterns.builder.vacation; + +import java.time.LocalDate; + +public class CityVacationBuilder extends VacationBuilder { + public CityVacationBuilder() { + this.name = "City Vacation Builder"; + } + public VacationBuilder addAccommodation() { + this.accommodations.add(new Hotel()); + return this; + } + public VacationBuilder addAccommodation(String name) { + this.accommodations.add(new Hotel(name)); + return this; + } + public VacationBuilder addAccommodation(String name, int year, int month, int day, int nights, int location) { + Reservation reservation = new Reservation(); + reservation.setArrivalDate(year, month, day); + reservation.setNights(nights); + + Hotel hotel = new Hotel(name); + hotel.setReservation(reservation); + hotel.setRoomNumber(location); + this.accommodations.add(hotel); + return this; + } + public VacationBuilder addEvent(String event) { + this.events.add("See the " + event + " show"); + return this; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Hotel.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Hotel.java new file mode 100644 index 0000000..21f96ce --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Hotel.java @@ -0,0 +1,21 @@ +package headfirst.designpatterns.builder.vacation; + +public class Hotel extends Accommodation { + int roomNumber; + public Hotel() { + this.name = "Hotel"; + } + public Hotel(String name) { + this.name = name; + } + public void setRoomNumber(int n) { + this.roomNumber = n; + } + public int getRoomNumber() { + return this.roomNumber; + } + public String getLocation() { + if (roomNumber == 0) return ""; + else return "Room number " + this.roomNumber; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/OutdoorsVacationBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/OutdoorsVacationBuilder.java new file mode 100644 index 0000000..778b51f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/OutdoorsVacationBuilder.java @@ -0,0 +1,32 @@ +package headfirst.designpatterns.builder.vacation; + +import java.time.LocalDate; + +public class OutdoorsVacationBuilder extends VacationBuilder { + public OutdoorsVacationBuilder() { + this.name = "Outdoorsy Vacation Builder"; + } + public VacationBuilder addAccommodation() { + this.accommodations.add(new Tent()); + return this; + } + public VacationBuilder addAccommodation(String name) { + this.accommodations.add(new Tent(name)); + return this; + } + public VacationBuilder addAccommodation(String name, int year, int month, int day, int nights, int location) { + Reservation reservation = new Reservation(); + reservation.setArrivalDate(year, month, day); + reservation.setNights(nights); + + Tent tent = new Tent(name); + tent.setReservation(reservation); + tent.setSiteNumber(location); + this.accommodations.add(tent); + return this; + } + public VacationBuilder addEvent(String event) { + this.events.add("Hike: " + event); + return this; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Reservation.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Reservation.java new file mode 100644 index 0000000..67ae223 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Reservation.java @@ -0,0 +1,21 @@ +package headfirst.designpatterns.builder.vacation; + +import java.time.LocalDate; + +public class Reservation { + LocalDate arrivalDate; + int nights; + + public void setArrivalDate(int year, int month, int day) { + this.arrivalDate = LocalDate.of(year, month, day); + } + public LocalDate getArrivalDate() { + return this.arrivalDate; + } + public void setNights(int nights) { + this.nights = nights; + } + public int getNights() { + return this.nights; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Tent.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Tent.java new file mode 100644 index 0000000..c9085cb --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Tent.java @@ -0,0 +1,21 @@ +package headfirst.designpatterns.builder.vacation; + +public class Tent extends Accommodation { + int siteNumber; + public Tent() { + this.name = "Tent"; + } + public Tent(String name) { + this.name = name; + } + public void setSiteNumber(int n) { + this.siteNumber = n; + } + public int getSiteNumber() { + return this.siteNumber; + } + public String getLocation() { + if (siteNumber == 0) return ""; + else return "Site number " + this.siteNumber; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Vacation.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Vacation.java new file mode 100755 index 0000000..daac698 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Vacation.java @@ -0,0 +1,33 @@ +package headfirst.designpatterns.builder.vacation; + +import java.util.*; + +public class Vacation { + String name; + List accommodations = new ArrayList(); + List events = new ArrayList(); + + public void setName(String name) { + this.name = name; + } + public void setAccommodations(List accommodations) { + this.accommodations = accommodations; + } + public void setEvents(List events) { + this.events = events; + } + public String toString() { + StringBuffer display = new StringBuffer(); + display.append("---- " + this.name + " ----\n"); + for (Accommodation a : accommodations) { + display.append(a); + } + for (String e : events) { + display.append(e + "\n"); + } + return display.toString(); + } +} + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationBuilder.java new file mode 100644 index 0000000..ccaac0b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationBuilder.java @@ -0,0 +1,24 @@ +package headfirst.designpatterns.builder.vacation; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +public abstract class VacationBuilder { + String name; + List accommodations = new ArrayList(); + List events = new ArrayList(); + + public abstract VacationBuilder addAccommodation(); + public abstract VacationBuilder addAccommodation(String name); + public abstract VacationBuilder addAccommodation(String name, int year, int month, int day, int nights, int location); + public abstract VacationBuilder addEvent(String event); + + public Vacation getVacation() { + Vacation vacation = new Vacation(); + vacation.setName(name); + vacation.setAccommodations(accommodations); + vacation.setEvents(events); + return vacation; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationDirector.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationDirector.java new file mode 100755 index 0000000..10971ec --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationDirector.java @@ -0,0 +1,22 @@ +package headfirst.designpatterns.builder.vacation; + +public class VacationDirector { + public static void main(String[] args) { + VacationBuilder outdoorsyVacationBuilder = new OutdoorsVacationBuilder(); + Vacation outdoorsyVacation = outdoorsyVacationBuilder + .addAccommodation("Two person tent", 2020, 7, 1, 5, 34) + .addEvent("Beach") + .addAccommodation("Two person tent") + .addEvent("Mountains") + .getVacation(); + System.out.println(outdoorsyVacation); + + VacationBuilder cityVacationBuilder = new CityVacationBuilder(); + Vacation cityVacation = cityVacationBuilder + .addAccommodation("Grand Facadian", 2020, 8, 1, 5, 0) + .addAccommodation("Hotel Commander", 2020, 8, 6, 2, 0) + .addEvent("Cirque du Soleil") + .getVacation(); + System.out.println(cityVacation); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/Collections.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/Collections.java new file mode 100755 index 0000000..9e6e73b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/Collections.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.collections; + +import java.util.*; + +public class Collections { + public static void main (String args[]) { + Vector v = new Vector(Arrays.asList(args)); + + System.out.println("Using enumeration with Vector"); + Enumeration enumeration = v.elements(); + while (enumeration.hasMoreElements()) { + System.out.println(enumeration.nextElement()); + } + + System.out.println("Using iterator with Vector"); + Iterator iterator = (Iterator) v.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + + System.out.println("Using for/in with array of Strings"); + for (String color : args) { + System.out.println(color); + } + + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Cafe.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Cafe.java new file mode 100755 index 0000000..d565c09 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Cafe.java @@ -0,0 +1,44 @@ +package headfirst.designpatterns.collections.iterator; + +import java.util.*; + +public class Cafe { + + public static void main(String args[]) { + PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); + DinerMenu dinerMenu = new DinerMenu(); + + // with no iterators + System.out.println("\nMENU\n----\nBREAKFAST"); + ArrayList breakfastItems = pancakeHouseMenu.getMenuItems(); + for (int i = 0; i < breakfastItems.size(); i++) { + String menuItem = (String)breakfastItems.get(i); + System.out.println(menuItem); + } + + System.out.println("\nLUNCH"); + String[] lunchItems = dinerMenu.getMenuItems(); + + for (int i = 0; i < lunchItems.length; i++) { + String menuItem = lunchItems[i]; + System.out.println(menuItem); + } + + // with iterators + Iterator pancakeIterator = pancakeHouseMenu.createIterator(); + Iterator dinerIterator = dinerMenu.createIterator(); + + System.out.println("\nMENU (with iterators)\n----\nBREAKFAST"); + printMenu(pancakeIterator); + System.out.println("\nLUNCH"); + printMenu(dinerIterator); + } + + private static void printMenu(Iterator iterator) { + while (iterator.hasNext()) { + String menuItem = (String)iterator.next(); + System.out.println(menuItem); + + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenu.java new file mode 100755 index 0000000..df8ac2c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenu.java @@ -0,0 +1,41 @@ +package headfirst.designpatterns.collections.iterator; + +public class DinerMenu implements Menu { + static final int MAX_ITEMS = 6; + int numberOfItems = 0; + String[] menuItems; + + public DinerMenu() { + menuItems = new String[MAX_ITEMS]; + + addItem("Vegetarian BLT"); + addItem("BLT"); + addItem("Soup of the day"); + addItem("Hotdog"); + addItem("Steamed Veggies and Brown Rice"); + addItem("Pasta"); + } + + public void addItem(String name) + { + if (numberOfItems >= MAX_ITEMS) { + System.err.println("Sorry, menu is full! Can't add item to menu"); + } else { + menuItems[numberOfItems] = name; + numberOfItems = numberOfItems + 1; + } + } + + public String[] getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return new DinerMenuIterator(menuItems); + } + + public String toString() { + return "Diner Menu"; + } + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenuIterator.java new file mode 100755 index 0000000..77824ac --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenuIterator.java @@ -0,0 +1,24 @@ +package headfirst.designpatterns.collections.iterator; + +public class DinerMenuIterator implements Iterator { + String[] items; + int position = 0; + + public DinerMenuIterator(String[] items) { + this.items = items; + } + + public String next() { + String menuItem = items[position]; + position = position + 1; + return menuItem; + } + + public boolean hasNext() { + if (position >= items.length || items[position] == null) { + return false; + } else { + return true; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Iterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Iterator.java new file mode 100755 index 0000000..01ad3e4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Iterator.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.collections.iterator; + +public interface Iterator { + boolean hasNext(); + Object next(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Menu.java new file mode 100755 index 0000000..50e562f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Menu.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.collections.iterator; + +public interface Menu { + public Iterator createIterator(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenu.java new file mode 100755 index 0000000..081a0f3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenu.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.collections.iterator; + +import java.util.ArrayList; + +public class PancakeHouseMenu implements Menu { + ArrayList menuItems; + + public PancakeHouseMenu() { + menuItems = new ArrayList(); + + addItem("K&B's Pancake Breakfast"); + addItem("Regular Pancake Breakfast"); + addItem("Blueberry Pancakes"); + addItem("Waffles"); + } + + public void addItem(String name) + { + menuItems.add(name); + } + + public ArrayList getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return new PancakeHouseMenuIterator(menuItems); + } + + public String toString() { + return "Pancake House Menu"; + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenuIterator.java new file mode 100755 index 0000000..5c65635 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenuIterator.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.collections.iterator; + +import java.util.ArrayList; + +public class PancakeHouseMenuIterator implements Iterator { + ArrayList items; + int position = 0; + + public PancakeHouseMenuIterator(ArrayList items) { + this.items = items; + } + + public String next() { + String menuItem = (String) items.get(position); + position = position + 1; + return menuItem; + } + + public boolean hasNext() { + if (position >= items.size()) { + return false; + } else { + return true; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Cafe.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Cafe.java new file mode 100755 index 0000000..6362b3b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Cafe.java @@ -0,0 +1,28 @@ +package headfirst.designpatterns.collections.iterator_builtin; + +import java.util.*; + +public class Cafe { + + public static void main(String args[]) { + PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); + DinerMenu dinerMenu = new DinerMenu(); + + // with iterators + Iterator pancakeIterator = pancakeHouseMenu.createIterator(); + Iterator dinerIterator = dinerMenu.createIterator(); + + System.out.println("\nMENU (with iterators)\n----\nBREAKFAST"); + printMenu(pancakeIterator); + System.out.println("\nLUNCH"); + printMenu(dinerIterator); + } + + private static void printMenu(Iterator iterator) { + while (iterator.hasNext()) { + String menuItem = (String)iterator.next(); + System.out.println(menuItem); + + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenu.java new file mode 100755 index 0000000..bbd976c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenu.java @@ -0,0 +1,43 @@ +package headfirst.designpatterns.collections.iterator_builtin; + +import java.util.Iterator; + +public class DinerMenu implements Menu { + static final int MAX_ITEMS = 6; + int numberOfItems = 0; + String[] menuItems; + + public DinerMenu() { + menuItems = new String[MAX_ITEMS]; + + addItem("Vegetarian BLT"); + addItem("BLT"); + addItem("Soup of the day"); + addItem("Hotdog"); + addItem("Steamed Veggies and Brown Rice"); + addItem("Pasta"); + } + + public void addItem(String name) + { + if (numberOfItems >= MAX_ITEMS) { + System.err.println("Sorry, menu is full! Can't add item to menu"); + } else { + menuItems[numberOfItems] = name; + numberOfItems = numberOfItems + 1; + } + } + + public String[] getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return new DinerMenuIterator(menuItems); + } + + public String toString() { + return "Diner Menu"; + } + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenuIterator.java new file mode 100755 index 0000000..6103c55 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenuIterator.java @@ -0,0 +1,39 @@ +package headfirst.designpatterns.collections.iterator_builtin; + +import java.util.Iterator; + +public class DinerMenuIterator implements Iterator { + String[] list; + int position = 0; + + public DinerMenuIterator(String[] list) { + this.list = list; + } + + public String next() { + String menuItem = list[position]; + position = position + 1; + return menuItem; + } + + public boolean hasNext() { + if (position >= list.length || list[position] == null) { + return false; + } else { + return true; + } + } + + public void remove() { + if (position <= 0) { + throw new IllegalStateException + ("You can't remove an item until you've done at least one next()"); + } + if (list[position-1] != null) { + for (int i = position-1; i < (list.length-1); i++) { + list[i] = list[i+1]; + } + list[list.length-1] = null; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Menu.java new file mode 100755 index 0000000..513e382 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Menu.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.collections.iterator_builtin; + +import java.util.Iterator; + +public interface Menu { + public Iterator createIterator(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/PancakeHouseMenu.java new file mode 100755 index 0000000..ae479ee --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/PancakeHouseMenu.java @@ -0,0 +1,36 @@ +package headfirst.designpatterns.collections.iterator_builtin; + +import java.util.ArrayList; +import java.util.Iterator; + +public class PancakeHouseMenu implements Menu { + ArrayList menuItems; + + public PancakeHouseMenu() { + menuItems = new ArrayList(); + + addItem("K&B's Pancake Breakfast"); + addItem("Regular Pancake Breakfast"); + addItem("Blueberry Pancakes"); + addItem("Waffles"); + } + + public void addItem(String name) + { + menuItems.add(name); + } + + public ArrayList getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return menuItems.iterator(); + } + + public String toString() { + return "Pancake House Menu"; + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BPMObserver.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BPMObserver.java new file mode 100755 index 0000000..2b24276 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BPMObserver.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.combined.djview; + +public interface BPMObserver { + void updateBPM(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatBar.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatBar.java new file mode 100755 index 0000000..d0eae65 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatBar.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.combined.djview; + +import javax.swing.*; + +public class BeatBar extends JProgressBar implements Runnable { + private static final long serialVersionUID = 2L; + JProgressBar progressBar; + Thread thread; + + public BeatBar() { + thread = new Thread(this); + setMaximum(100); + thread.start(); + } + + public void run() { + for(;;) { + int value = getValue(); + value = (int)(value * .75); + setValue(value); + repaint(); + try { + Thread.sleep(50); + } catch (Exception e) {}; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatController.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatController.java new file mode 100755 index 0000000..bf48620 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatController.java @@ -0,0 +1,42 @@ +package headfirst.designpatterns.combined.djview; + +public class BeatController implements ControllerInterface { + BeatModelInterface model; + DJView view; + + public BeatController(BeatModelInterface model) { + this.model = model; + view = new DJView(this, model); + view.createView(); + view.createControls(); + view.disableStopMenuItem(); + view.enableStartMenuItem(); + model.initialize(); + } + + public void start() { + model.on(); + view.disableStartMenuItem(); + view.enableStopMenuItem(); + } + + public void stop() { + model.off(); + view.disableStopMenuItem(); + view.enableStartMenuItem(); + } + + public void increaseBPM() { + int bpm = model.getBPM(); + model.setBPM(bpm + 1); + } + + public void decreaseBPM() { + int bpm = model.getBPM(); + model.setBPM(bpm - 1); + } + + public void setBPM(int bpm) { + model.setBPM(bpm); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModel.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModel.java new file mode 100755 index 0000000..f2032d6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModel.java @@ -0,0 +1,107 @@ +package headfirst.designpatterns.combined.djview; + +import java.util.*; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.Clip; +import java.io.*; +import javax.sound.sampled.Line; + +public class BeatModel implements BeatModelInterface, Runnable { + List beatObservers = new ArrayList(); + List bpmObservers = new ArrayList(); + int bpm = 90; + Thread thread; + boolean stop = false; + Clip clip; + + public void initialize() { + try { + File resource = new File("clap.wav"); + clip = (Clip) AudioSystem.getLine(new Line.Info(Clip.class)); + clip.open(AudioSystem.getAudioInputStream(resource)); + } + catch(Exception ex) { + System.out.println("Error: Can't load clip"); + System.out.println(ex); + } + } + + public void on() { + bpm = 90; + //notifyBPMObservers(); + thread = new Thread(this); + stop = false; + thread.start(); + } + + public void off() { + stopBeat(); + stop = true; + } + + public void run() { + while (!stop) { + playBeat(); + notifyBeatObservers(); + try { + Thread.sleep(60000/getBPM()); + } catch (Exception e) {} + } + } + + public void setBPM(int bpm) { + this.bpm = bpm; + notifyBPMObservers(); + } + + public int getBPM() { + return bpm; + } + + public void registerObserver(BeatObserver o) { + beatObservers.add(o); + } + + public void notifyBeatObservers() { + for(int i = 0; i < beatObservers.size(); i++) { + BeatObserver observer = (BeatObserver)beatObservers.get(i); + observer.updateBeat(); + } + } + + public void registerObserver(BPMObserver o) { + bpmObservers.add(o); + } + + public void notifyBPMObservers() { + for(int i = 0; i < bpmObservers.size(); i++) { + BPMObserver observer = (BPMObserver)bpmObservers.get(i); + observer.updateBPM(); + } + } + + public void removeObserver(BeatObserver o) { + int i = beatObservers.indexOf(o); + if (i >= 0) { + beatObservers.remove(i); + } + } + + public void removeObserver(BPMObserver o) { + int i = bpmObservers.indexOf(o); + if (i >= 0) { + bpmObservers.remove(i); + } + } + + public void playBeat() { + clip.setFramePosition(0); + clip.start(); + } + public void stopBeat() { + clip.setFramePosition(0); + clip.stop(); + } + +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModelInterface.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModelInterface.java new file mode 100755 index 0000000..72f194a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModelInterface.java @@ -0,0 +1,21 @@ +package headfirst.designpatterns.combined.djview; + +public interface BeatModelInterface { + void initialize(); + + void on(); + + void off(); + + void setBPM(int bpm); + + int getBPM(); + + void registerObserver(BeatObserver o); + + void removeObserver(BeatObserver o); + + void registerObserver(BPMObserver o); + + void removeObserver(BPMObserver o); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatObserver.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatObserver.java new file mode 100755 index 0000000..9571e80 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatObserver.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.combined.djview; + +public interface BeatObserver { + void updateBeat(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/ControllerInterface.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/ControllerInterface.java new file mode 100755 index 0000000..30e97f6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/ControllerInterface.java @@ -0,0 +1,9 @@ +package headfirst.designpatterns.combined.djview; + +public interface ControllerInterface { + void start(); + void stop(); + void increaseBPM(); + void decreaseBPM(); + void setBPM(int bpm); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJTestDrive.java new file mode 100755 index 0000000..7550c6d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJTestDrive.java @@ -0,0 +1,9 @@ +package headfirst.designpatterns.combined.djview; + +public class DJTestDrive { + + public static void main (String[] args) { + BeatModelInterface model = new BeatModel(); + ControllerInterface controller = new BeatController(model); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJView.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJView.java new file mode 100755 index 0000000..2039169 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJView.java @@ -0,0 +1,187 @@ +package headfirst.designpatterns.combined.djview; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class DJView implements ActionListener, BeatObserver, BPMObserver { + BeatModelInterface model; + ControllerInterface controller; + JFrame viewFrame; + JPanel viewPanel; + BeatBar beatBar; + JLabel bpmOutputLabel; + JFrame controlFrame; + JPanel controlPanel; + JLabel bpmLabel; + JTextField bpmTextField; + JButton setBPMButton; + JButton increaseBPMButton; + JButton decreaseBPMButton; + JMenuBar menuBar; + JMenu menu; + JMenuItem startMenuItem; + JMenuItem stopMenuItem; + + public DJView(ControllerInterface controller, BeatModelInterface model) { + this.controller = controller; + this.model = model; + model.registerObserver((BeatObserver)this); + model.registerObserver((BPMObserver)this); + } + + public void createView() { + // Create all Swing components here + viewPanel = new JPanel(new GridLayout(1, 2)); + viewFrame = new JFrame("View"); + viewFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + viewFrame.setSize(new Dimension(100, 80)); + bpmOutputLabel = new JLabel("offline", SwingConstants.CENTER); + beatBar = new BeatBar(); + beatBar.setValue(0); + JPanel bpmPanel = new JPanel(new GridLayout(2, 1)); + bpmPanel.add(beatBar); + bpmPanel.add(bpmOutputLabel); + viewPanel.add(bpmPanel); + viewFrame.getContentPane().add(viewPanel, BorderLayout.CENTER); + viewFrame.pack(); + viewFrame.setVisible(true); + } + + + public void createControls() { + // Create all Swing components here + JFrame.setDefaultLookAndFeelDecorated(true); + controlFrame = new JFrame("Control"); + controlFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + controlFrame.setSize(new Dimension(100, 80)); + + controlPanel = new JPanel(new GridLayout(1, 2)); + + menuBar = new JMenuBar(); + menu = new JMenu("DJ Control"); + startMenuItem = new JMenuItem("Start"); + menu.add(startMenuItem); + startMenuItem.addActionListener((event) -> controller.start()); + // was.... + /* + startMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + controller.start(); + } + }); + */ + stopMenuItem = new JMenuItem("Stop"); + menu.add(stopMenuItem); + stopMenuItem.addActionListener((event) -> controller.stop()); + // was... + /* + stopMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + controller.stop(); + } + }); + */ + JMenuItem exit = new JMenuItem("Quit"); + exit.addActionListener((event) -> System.exit(0)); + // was... + /* + exit.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + System.exit(0); + } + }); + */ + + menu.add(exit); + menuBar.add(menu); + controlFrame.setJMenuBar(menuBar); + + bpmTextField = new JTextField(2); + bpmLabel = new JLabel("Enter BPM:", SwingConstants.RIGHT); + setBPMButton = new JButton("Set"); + setBPMButton.setSize(new Dimension(10,40)); + increaseBPMButton = new JButton(">>"); + decreaseBPMButton = new JButton("<<"); + setBPMButton.addActionListener(this); + increaseBPMButton.addActionListener(this); + decreaseBPMButton.addActionListener(this); + + JPanel buttonPanel = new JPanel(new GridLayout(1, 2)); + + buttonPanel.add(decreaseBPMButton); + buttonPanel.add(increaseBPMButton); + + JPanel enterPanel = new JPanel(new GridLayout(1, 2)); + enterPanel.add(bpmLabel); + enterPanel.add(bpmTextField); + JPanel insideControlPanel = new JPanel(new GridLayout(3, 1)); + insideControlPanel.add(enterPanel); + insideControlPanel.add(setBPMButton); + insideControlPanel.add(buttonPanel); + controlPanel.add(insideControlPanel); + + bpmLabel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); + bpmOutputLabel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); + + controlFrame.getRootPane().setDefaultButton(setBPMButton); + controlFrame.getContentPane().add(controlPanel, BorderLayout.CENTER); + + controlFrame.pack(); + controlFrame.setVisible(true); + } + + public void enableStopMenuItem() { + stopMenuItem.setEnabled(true); + } + + public void disableStopMenuItem() { + stopMenuItem.setEnabled(false); + } + + public void enableStartMenuItem() { + startMenuItem.setEnabled(true); + } + + public void disableStartMenuItem() { + startMenuItem.setEnabled(false); + } + + public void actionPerformed(ActionEvent event) { + if (event.getSource() == setBPMButton) { + int bpm = 90; + String bpmText = bpmTextField.getText(); + if (bpmText == null || bpmText.contentEquals("")) { + bpm = 90; + } else { + bpm = Integer.parseInt(bpmTextField.getText()); + } + controller.setBPM(bpm); + } else if (event.getSource() == increaseBPMButton) { + controller.increaseBPM(); + } else if (event.getSource() == decreaseBPMButton) { + controller.decreaseBPM(); + } + } + + public void updateBPM() { + if (model != null) { + int bpm = model.getBPM(); + if (bpm == 0) { + if (bpmOutputLabel != null) { + bpmOutputLabel.setText("offline"); + } + } else { + if (bpmOutputLabel != null) { + bpmOutputLabel.setText("Current BPM: " + model.getBPM()); + } + } + } + } + + public void updateBeat() { + if (beatBar != null) { + beatBar.setValue(100); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpHandler.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpHandler.java new file mode 100644 index 0000000..316f1c6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpHandler.java @@ -0,0 +1,101 @@ +package headfirst.designpatterns.combined.djview; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import com.sun.net.httpserver.*; + +// Controller for the DJ Web View +// Takes actions from the view and translates them to actions on the model +// View has no interaction to the model +// Using the exact same model, BeatModel, as we used with the DJView and BeatContoller +public class DJViewHttpHandler implements HttpHandler { + BeatModel beatModel; + Map queryPairs; + + public DJViewHttpHandler(BeatModel beatModel) { + this.beatModel = beatModel; + } + public void handle(HttpExchange httpExchange) throws IOException { + String uri = httpExchange.getRequestURI().toString(); + System.out.println("URI: " + uri); + String[] params = uri.split("\\?"); + String queryStrings = ""; + if (params.length > 1) { + queryStrings = params[1]; + } + + boolean noAction = true; + try { + queryPairs = this.splitQuery(queryStrings); + noAction = false; + } catch (Exception e) { + System.out.println("Error splitting query: " + e.getMessage()); + } + System.out.println("Query pairs: " + queryPairs); + + if (!noAction) { + String bpm = this.getParameter("bpm"); + if (bpm == null) { + bpm = beatModel.getBPM() + ""; + } + String set = this.getParameter("set"); + if (set != null) { + int bpmNumber = 90; + bpmNumber = Integer.parseInt(bpm); + beatModel.setBPM(bpmNumber); + } + String decrease = this.getParameter("decrease"); + if (decrease != null) { + beatModel.setBPM(beatModel.getBPM() - 1); + } + String increase = this.getParameter("increase"); + if (increase != null) { + beatModel.setBPM(beatModel.getBPM() + 1); + } + String on = this.getParameter("on"); + if (on != null) { + beatModel.on(); + } + String off = this.getParameter("off"); + if (off != null) { + beatModel.off(); + } + } + + // allow access from web server other than 8080 + Headers headers = httpExchange.getResponseHeaders(); + headers.add("Access-Control-Allow-Origin","*"); + + OutputStream outputStream = httpExchange.getResponseBody(); + StringBuilder responseStringBuilder = new StringBuilder(); + responseStringBuilder.append(beatModel.getBPM()); + System.out.println("BPM: " + beatModel.getBPM()); + + String responseString = responseStringBuilder.toString(); + httpExchange.sendResponseHeaders(200, responseString.length()); + outputStream.write(responseString.getBytes()); + outputStream.flush(); + outputStream.close(); + } + + Map splitQuery(String query) throws UnsupportedEncodingException { + Map query_pairs = new HashMap(); + String[] pairs = query.split("&"); + for (String pair : pairs) { + int idx = pair.indexOf("="); + query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); + } + return query_pairs; + } + + // bpm, set, decrease, increase, on, off + String getParameter(String param) { + return queryPairs.get(param); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpServer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpServer.java new file mode 100755 index 0000000..c97bd25 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpServer.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.combined.djview; + +import com.sun.net.httpserver.HttpServer; +import java.net.InetSocketAddress; + +public class DJViewHttpServer { + + public static void main(String[] args) { + + try { + System.out.println("DJView Http Server Running"); + + BeatModel beatModel = new BeatModel(); + beatModel.initialize(); + // create a server on port 8080, with a backlog queue allowed of size 0 (ie, no queue) + // most people will already have a web server running on 80, so we're using 8080 + HttpServer server = HttpServer.create(new InetSocketAddress("localhost", 8080), 0); + server.createContext("/djview", new DJViewHttpHandler(beatModel)); + server.start(); + System.out.println("DJView Server is running at http://localhost:8080/djview"); + + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewServlet.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewServlet.java new file mode 100644 index 0000000..91c3791 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewServlet.java @@ -0,0 +1,77 @@ +// This code is from Head First Design Patterns first edition +// and has been removed from the second edition. +// +// Left here for those with the first edition, but no guarantees it +// will work. +// +// 9/15/2020 +// +package headfirst.designpatterns.combined.djview; + +import javax.servlet.*; +import javax.servlet.http.*; +import java.io.*; + +public class DJViewServlet extends HttpServlet { + + private static final long serialVersionUID = 2L; + + public void init() throws ServletException { + BeatModel beatModel = new BeatModel(); + beatModel.initialize(); + getServletContext().setAttribute("beatModel", beatModel); + } + + public void doGet(HttpServletRequest request, + HttpServletResponse response) + throws IOException, ServletException + { + doPost(request, response); + } + + public void doPost(HttpServletRequest request, + HttpServletResponse response) + throws IOException, ServletException + { + BeatModel beatModel = + (BeatModel)getServletContext().getAttribute("beatModel"); + + String bpm = request.getParameter("bpm"); + if (bpm == null) { + bpm = beatModel.getBPM() + ""; + } + + String set = request.getParameter("set"); + if (set != null) { + int bpmNumber = 90; + bpmNumber = Integer.parseInt(bpm); + beatModel.setBPM(bpmNumber); + } + + String decrease = request.getParameter("decrease"); + if (decrease != null) { + beatModel.setBPM(beatModel.getBPM() - 1); + } + String increase = request.getParameter("increase"); + if (increase != null) { + beatModel.setBPM(beatModel.getBPM() + 1); + } + String on = request.getParameter("on"); + if (on != null) { + beatModel.on(); + } + String off = request.getParameter("off"); + if (off != null) { + beatModel.off(); + } + + request.setAttribute("beatModel", beatModel); + + RequestDispatcher dispatcher = + request.getRequestDispatcher("/djview.jsp"); + dispatcher.forward(request, response); + + } + + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartAdapter.java new file mode 100755 index 0000000..3333edc --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartAdapter.java @@ -0,0 +1,37 @@ +package headfirst.designpatterns.combined.djview; + +public class HeartAdapter implements BeatModelInterface { + HeartModelInterface heart; + + public HeartAdapter(HeartModelInterface heart) { + this.heart = heart; + } + + public void initialize() {} + + public void on() {} + + public void off() {} + + public int getBPM() { + return heart.getHeartRate(); + } + + public void setBPM(int bpm) {} + + public void registerObserver(BeatObserver o) { + heart.registerObserver(o); + } + + public void removeObserver(BeatObserver o) { + heart.removeObserver(o); + } + + public void registerObserver(BPMObserver o) { + heart.registerObserver(o); + } + + public void removeObserver(BPMObserver o) { + heart.removeObserver(o); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartController.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartController.java new file mode 100755 index 0000000..97a855c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartController.java @@ -0,0 +1,28 @@ +package headfirst.designpatterns.combined.djview; + +public class HeartController implements ControllerInterface { + HeartModelInterface model; + DJView view; + + public HeartController(HeartModelInterface model) { + this.model = model; + view = new DJView(this, new HeartAdapter(model)); + view.createView(); + view.createControls(); + view.disableStopMenuItem(); + view.disableStartMenuItem(); + } + + public void start() {} + + public void stop() {} + + public void increaseBPM() {} + + public void decreaseBPM() {} + + public void setBPM(int bpm) {} +} + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModel.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModel.java new file mode 100755 index 0000000..9791b83 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModel.java @@ -0,0 +1,79 @@ +package headfirst.designpatterns.combined.djview; + +import java.util.*; + +public class HeartModel implements HeartModelInterface, Runnable { + ArrayList beatObservers = new ArrayList(); + ArrayList bpmObservers = new ArrayList(); + int time = 1000; + int bpm = 90; + Random random = new Random(System.currentTimeMillis()); + Thread thread; + + public HeartModel() { + thread = new Thread(this); + thread.start(); + } + + public void run() { + int lastrate = -1; + + for(;;) { + int change = random.nextInt(10); + if (random.nextInt(2) == 0) { + change = 0 - change; + } + int rate = 60000/(time + change); + if (rate < 120 && rate > 50) { + time += change; + notifyBeatObservers(); + if (rate != lastrate) { + lastrate = rate; + notifyBPMObservers(); + } + } + try { + Thread.sleep(time); + } catch (Exception e) {} + } + } + public int getHeartRate() { + return 60000/time; + } + + public void registerObserver(BeatObserver o) { + beatObservers.add(o); + } + + public void removeObserver(BeatObserver o) { + int i = beatObservers.indexOf(o); + if (i >= 0) { + beatObservers.remove(i); + } + } + + public void notifyBeatObservers() { + for(int i = 0; i < beatObservers.size(); i++) { + BeatObserver observer = (BeatObserver)beatObservers.get(i); + observer.updateBeat(); + } + } + + public void registerObserver(BPMObserver o) { + bpmObservers.add(o); + } + + public void removeObserver(BPMObserver o) { + int i = bpmObservers.indexOf(o); + if (i >= 0) { + bpmObservers.remove(i); + } + } + + public void notifyBPMObservers() { + for(int i = 0; i < bpmObservers.size(); i++) { + BPMObserver observer = (BPMObserver)bpmObservers.get(i); + observer.updateBPM(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModelInterface.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModelInterface.java new file mode 100755 index 0000000..65d76dc --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModelInterface.java @@ -0,0 +1,9 @@ +package headfirst.designpatterns.combined.djview; + +public interface HeartModelInterface { + int getHeartRate(); + void registerObserver(BeatObserver o); + void removeObserver(BeatObserver o); + void registerObserver(BPMObserver o); + void removeObserver(BPMObserver o); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartTestDrive.java new file mode 100755 index 0000000..b3099d1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartTestDrive.java @@ -0,0 +1,9 @@ +package headfirst.designpatterns.combined.djview; + +public class HeartTestDrive { + + public static void main (String[] args) { + HeartModel heartModel = new HeartModel(); + ControllerInterface model = new HeartController(heartModel); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/README.md b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/README.md new file mode 100644 index 0000000..32224a8 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/README.md @@ -0,0 +1,66 @@ +# The Servlet code has been removed from +# Head First Design Patterns 2nd edition +# +# No guarantees that it will work. +# +# 9/15/2020 +# +# To run the DJView Servlet on localhost + +1. Download Tomcat: http://tomcat.apache.org/index.html +Place the folder (apache-tomcat-VERSION) in a folder somewhere. +The instructions below refer to this folder as the "tomcat" folder. + +2. Build the code and note where the binary files are generated (in the +bin/ directory in your project directory). + +3. In Eclipse, add the servlet and jsp jars: + * lib/servlet-api-3.1.jar + * lib/jsp/javax.servlet.jsp-2.3.2.jar + +4. From tomcat folder, run: + * bin/startup.sh + +5. Navigate to localhost:8080 in your browser; if you see a page, Tomcat is running! + +6. Under tomcat/webapps make a new folder, djview/ + +7. Copy the jsp/index.html file and the jsp/djview.jsp file there. + +8. Make a new folder in the tomcat/webapps/djview/ folder named "WEB-INF". + +9. Place a copy of the jsp/web.xml file there. This file maps the Servlet class to a URL +for the form post/get in index.html + +10. Create a set of folders that create the path: +tomcat/webapps/djview/WEB-INF/classes/headfirst/designpatterns/combined/djview/ + +11. Copy the following classes from headfirst/designpatterns/combined/djview/ to the +tomcat/webapps/djview/WEB-INF/classes/headfirst/designpatterns/combined/djview/ +folder: + * BeatModel.class + * BeatModelInterface.class + * BeatController.class + * BeatObserver.class + * BPMObserver.class + * ControllerInterface.class + * DJViewServlet.class + +12. Restart tomcat from the top tomcat folder: + * bin/shutdown.sh + * bin/startup.sh + +13. Navigate to localhost:8080/djview/djview.jsp + + +NEW +Don't need tomcat. +Run DJViewHttpServer, this will run the server on port 8080. +CORS disabled so requests can come from different servers. +Client: +run HFDP/dj/dj.html from local web server (port 80 usually). + + + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/WEB-INF/web.xml b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/WEB-INF/web.xml new file mode 100644 index 0000000..008a4b4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/WEB-INF/web.xml @@ -0,0 +1,40 @@ + + + + + + DJView Servlet Application + + DJView Servlet Application + + + DJViewServlet + headfirst.designpatterns.combined.djview.DJViewServlet + + + + DJViewServlet + /servlet/DJViewServlet + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/djview.jsp b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/djview.jsp new file mode 100644 index 0000000..be85a5b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/djview.jsp @@ -0,0 +1,29 @@ + + + + +DJ View + + + +

DJ View

+Beats per minutes = +
+
+
+ +
+BPM: +  + +
+ +
+ +
+
+ + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/index.html b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/index.html new file mode 100644 index 0000000..497b542 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/index.html @@ -0,0 +1,10 @@ + + + + + DJView Web Application + + + DJView + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DecoyDuck.java new file mode 100755 index 0000000..982ea2e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DecoyDuck.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.adapter; + +public class DecoyDuck implements Quackable { + public void quack() { + System.out.println("<< Silence >>"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckCall.java new file mode 100755 index 0000000..6e8f3b5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckCall.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.adapter; + +public class DuckCall implements Quackable { + public void quack() { + System.out.println("Kwak"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckSimulator.java new file mode 100755 index 0000000..cefaa8f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckSimulator.java @@ -0,0 +1,28 @@ +package headfirst.designpatterns.combining.adapter; + +public class DuckSimulator { + public static void main(String[] args) { + DuckSimulator simulator = new DuckSimulator(); + simulator.simulate(); + } + + void simulate() { + Quackable mallardDuck = new MallardDuck(); + Quackable redheadDuck = new RedheadDuck(); + Quackable duckCall = new DuckCall(); + Quackable rubberDuck = new RubberDuck(); + Quackable gooseDuck = new GooseAdapter(new Goose()); + + System.out.println("\nDuck Simulator: With Goose Adapter"); + + simulate(mallardDuck); + simulate(redheadDuck); + simulate(duckCall); + simulate(rubberDuck); + simulate(gooseDuck); + } + + void simulate(Quackable duck) { + duck.quack(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Goose.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Goose.java new file mode 100755 index 0000000..1ba551f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Goose.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.adapter; + +public class Goose { + public void honk() { + System.out.println("Honk"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/GooseAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/GooseAdapter.java new file mode 100755 index 0000000..6e8914b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/GooseAdapter.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.combining.adapter; + +public class GooseAdapter implements Quackable { + Goose goose; + + public GooseAdapter(Goose goose) { + this.goose = goose; + } + + public void quack() { + goose.honk(); + } + + public String toString() { + return "Goose pretending to be a Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/MallardDuck.java new file mode 100755 index 0000000..b61416e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/MallardDuck.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.adapter; + +public class MallardDuck implements Quackable { + public void quack() { + System.out.println("Quack"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Quackable.java new file mode 100755 index 0000000..22ffb80 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Quackable.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.combining.adapter; + +public interface Quackable { + public void quack(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RedheadDuck.java new file mode 100755 index 0000000..772bf33 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RedheadDuck.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.adapter; + +public class RedheadDuck implements Quackable { + public void quack() { + System.out.println("Quack"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RubberDuck.java new file mode 100755 index 0000000..fe36fcc --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RubberDuck.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.adapter; + +public class RubberDuck implements Quackable { + public void quack() { + System.out.println("Squeak"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/AbstractDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/AbstractDuckFactory.java new file mode 100755 index 0000000..ae23a25 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/AbstractDuckFactory.java @@ -0,0 +1,9 @@ +package headfirst.designpatterns.combining.composite; + +public abstract class AbstractDuckFactory { + + public abstract Quackable createMallardDuck(); + public abstract Quackable createRedheadDuck(); + public abstract Quackable createDuckCall(); + public abstract Quackable createRubberDuck(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/CountingDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/CountingDuckFactory.java new file mode 100755 index 0000000..bb1db47 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/CountingDuckFactory.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.combining.composite; + +public class CountingDuckFactory extends AbstractDuckFactory { + + public Quackable createMallardDuck() { + return new QuackCounter(new MallardDuck()); + } + + public Quackable createRedheadDuck() { + return new QuackCounter(new RedheadDuck()); + } + + public Quackable createDuckCall() { + return new QuackCounter(new DuckCall()); + } + + public Quackable createRubberDuck() { + return new QuackCounter(new RubberDuck()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DecoyDuck.java new file mode 100755 index 0000000..4e3b94e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DecoyDuck.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.composite; + +public class DecoyDuck implements Quackable { + + public void quack() { + System.out.println("<< Silence >>"); + } + + public String toString() { + return "Decoy Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckCall.java new file mode 100755 index 0000000..306a99b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckCall.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.composite; + +public class DuckCall implements Quackable { + + public void quack() { + System.out.println("Kwak"); + } + + public String toString() { + return "Duck Call"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckFactory.java new file mode 100755 index 0000000..3858271 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckFactory.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.combining.composite; + +public class DuckFactory extends AbstractDuckFactory { + + public Quackable createMallardDuck() { + return new MallardDuck(); + } + + public Quackable createRedheadDuck() { + return new RedheadDuck(); + } + + public Quackable createDuckCall() { + return new DuckCall(); + } + + public Quackable createRubberDuck() { + return new RubberDuck(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckSimulator.java new file mode 100755 index 0000000..b619aff --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckSimulator.java @@ -0,0 +1,55 @@ +package headfirst.designpatterns.combining.composite; + +public class DuckSimulator { + + public static void main(String[] args) { + DuckSimulator simulator = new DuckSimulator(); + AbstractDuckFactory duckFactory = new CountingDuckFactory(); + + simulator.simulate(duckFactory); + } + + void simulate(AbstractDuckFactory duckFactory) { + Quackable redheadDuck = duckFactory.createRedheadDuck(); + Quackable duckCall = duckFactory.createDuckCall(); + Quackable rubberDuck = duckFactory.createRubberDuck(); + Quackable gooseDuck = new GooseAdapter(new Goose()); + + System.out.println("\nDuck Simulator: With Composite - Flocks"); + + Flock flockOfDucks = new Flock(); + + flockOfDucks.add(redheadDuck); + flockOfDucks.add(duckCall); + flockOfDucks.add(rubberDuck); + flockOfDucks.add(gooseDuck); + + Flock flockOfMallards = new Flock(); + + Quackable mallardOne = duckFactory.createMallardDuck(); + Quackable mallardTwo = duckFactory.createMallardDuck(); + Quackable mallardThree = duckFactory.createMallardDuck(); + Quackable mallardFour = duckFactory.createMallardDuck(); + + flockOfMallards.add(mallardOne); + flockOfMallards.add(mallardTwo); + flockOfMallards.add(mallardThree); + flockOfMallards.add(mallardFour); + + flockOfDucks.add(flockOfMallards); + + System.out.println("\nDuck Simulator: Whole Flock Simulation"); + simulate(flockOfDucks); + + System.out.println("\nDuck Simulator: Mallard Flock Simulation"); + simulate(flockOfMallards); + + System.out.println("\nThe ducks quacked " + + QuackCounter.getQuacks() + + " times"); + } + + void simulate(Quackable duck) { + duck.quack(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Flock.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Flock.java new file mode 100755 index 0000000..3c5ad65 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Flock.java @@ -0,0 +1,24 @@ +package headfirst.designpatterns.combining.composite; + +import java.util.Iterator; +import java.util.ArrayList; + +public class Flock implements Quackable { + ArrayList quackers = new ArrayList(); + + public void add(Quackable quacker) { + quackers.add(quacker); + } + + public void quack() { + Iterator iterator = quackers.iterator(); + while (iterator.hasNext()) { + Quackable quacker = iterator.next(); + quacker.quack(); + } + } + + public String toString() { + return "Flock of Quackers"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Goose.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Goose.java new file mode 100755 index 0000000..f2d4a11 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Goose.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.combining.composite; + +public class Goose { + public void honk() { + System.out.println("Honk"); + } + + public String toString() { + return "Goose"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/GooseAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/GooseAdapter.java new file mode 100755 index 0000000..9cb0fe6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/GooseAdapter.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.combining.composite; + +public class GooseAdapter implements Quackable { + Goose goose; + + public GooseAdapter(Goose goose) { + this.goose = goose; + } + + public void quack() { + goose.honk(); + } + + public String toString() { + return "Goose pretending to be a Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/MallardDuck.java new file mode 100755 index 0000000..6145e6b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/MallardDuck.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.composite; + +public class MallardDuck implements Quackable { + + public void quack() { + System.out.println("Quack"); + } + + public String toString() { + return "Mallard Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/QuackCounter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/QuackCounter.java new file mode 100755 index 0000000..0f1e7e8 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/QuackCounter.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.combining.composite; + +public class QuackCounter implements Quackable { + Quackable duck; + static int numberOfQuacks; + + public QuackCounter(Quackable duck) { + this.duck = duck; + } + + public void quack() { + duck.quack(); + numberOfQuacks++; + } + + public static int getQuacks() { + return numberOfQuacks; + } + + public String toString() { + return duck.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Quackable.java new file mode 100755 index 0000000..62392fb --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Quackable.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.combining.composite; + +public interface Quackable { + public void quack(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RedheadDuck.java new file mode 100755 index 0000000..4bd5ace --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RedheadDuck.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.combining.composite; + +public class RedheadDuck implements Quackable { + public void quack() { + System.out.println("Quack"); + } + + public String toString() { + return "Redhead Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RubberDuck.java new file mode 100755 index 0000000..929260b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RubberDuck.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.composite; + +public class RubberDuck implements Quackable { + + public void quack() { + System.out.println("Squeak"); + } + + public String toString() { + return "Rubber Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DecoyDuck.java new file mode 100755 index 0000000..4306404 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DecoyDuck.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.decorator; + +public class DecoyDuck implements Quackable { + + public void quack() { + System.out.println("<< Silence >>"); + } + + public String toString() { + return "Decoy Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckCall.java new file mode 100755 index 0000000..54fedc3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckCall.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.decorator; + +public class DuckCall implements Quackable { + + public void quack() { + System.out.println("Kwak"); + } + + public String toString() { + return "Duck Call"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckSimulator.java new file mode 100755 index 0000000..feeada0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckSimulator.java @@ -0,0 +1,31 @@ +package headfirst.designpatterns.combining.decorator; + +public class DuckSimulator { + public static void main(String[] args) { + DuckSimulator simulator = new DuckSimulator(); + simulator.simulate(); + } + + void simulate() { + Quackable mallardDuck = new QuackCounter(new MallardDuck()); + Quackable redheadDuck = new QuackCounter(new RedheadDuck()); + Quackable duckCall = new QuackCounter(new DuckCall()); + Quackable rubberDuck = new QuackCounter(new RubberDuck()); + Quackable gooseDuck = new GooseAdapter(new Goose()); + + System.out.println("\nDuck Simulator: With Decorator"); + + simulate(mallardDuck); + simulate(redheadDuck); + simulate(duckCall); + simulate(rubberDuck); + simulate(gooseDuck); + + System.out.println("The ducks quacked " + + QuackCounter.getQuacks() + " times"); + } + + void simulate(Quackable duck) { + duck.quack(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Goose.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Goose.java new file mode 100755 index 0000000..4d3f39d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Goose.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.combining.decorator; + +public class Goose { + public void honk() { + System.out.println("Honk"); + } + + public String toString() { + return "Goose"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/GooseAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/GooseAdapter.java new file mode 100755 index 0000000..a616ce8 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/GooseAdapter.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.combining.decorator; + +public class GooseAdapter implements Quackable { + Goose goose; + + public GooseAdapter(Goose goose) { + this.goose = goose; + } + + public void quack() { + goose.honk(); + } + + public String toString() { + return "Goose pretending to be a Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/MallardDuck.java new file mode 100755 index 0000000..74ba629 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/MallardDuck.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.decorator; + +public class MallardDuck implements Quackable { + + public void quack() { + System.out.println("Quack"); + } + + public String toString() { + return "Mallard Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/QuackCounter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/QuackCounter.java new file mode 100755 index 0000000..0ebf299 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/QuackCounter.java @@ -0,0 +1,22 @@ +package headfirst.designpatterns.combining.decorator; + +public class QuackCounter implements Quackable { + Quackable duck; + static int numberOfQuacks; + + public QuackCounter (Quackable duck) { + this.duck = duck; + } + + public void quack() { + duck.quack(); + numberOfQuacks++; + } + + public static int getQuacks() { + return numberOfQuacks; + } + public String toString() { + return duck.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Quackable.java new file mode 100755 index 0000000..84e4a19 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Quackable.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.combining.decorator; + +public interface Quackable { + public void quack(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RedheadDuck.java new file mode 100755 index 0000000..5111b51 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RedheadDuck.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.decorator; + +public class RedheadDuck implements Quackable { + public void quack() { + System.out.println("Quack"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RubberDuck.java new file mode 100755 index 0000000..e564f88 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RubberDuck.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.decorator; + +public class RubberDuck implements Quackable { + + public void quack() { + System.out.println("Squeak"); + } + + public String toString() { + return "Rubber Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DecoyDuck.java new file mode 100755 index 0000000..444d02a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DecoyDuck.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.ducks; + +public class DecoyDuck implements Quackable { + public void quack() { + System.out.println("<< Silence >>"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckCall.java new file mode 100755 index 0000000..ff62541 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckCall.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.ducks; + +public class DuckCall implements Quackable { + public void quack() { + System.out.println("Kwak"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckSimulator.java new file mode 100755 index 0000000..eebe612 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckSimulator.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.combining.ducks; + +public class DuckSimulator { + public static void main(String[] args) { + DuckSimulator simulator = new DuckSimulator(); + simulator.simulate(); + } + + void simulate() { + Quackable mallardDuck = new MallardDuck(); + Quackable redheadDuck = new RedheadDuck(); + Quackable duckCall = new DuckCall(); + Quackable rubberDuck = new RubberDuck(); + + System.out.println("\nDuck Simulator"); + + simulate(mallardDuck); + simulate(redheadDuck); + simulate(duckCall); + simulate(rubberDuck); + } + + void simulate(Quackable duck) { + duck.quack(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/MallardDuck.java new file mode 100755 index 0000000..35917cf --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/MallardDuck.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.ducks; + +public class MallardDuck implements Quackable { + public void quack() { + System.out.println("Quack"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/Quackable.java new file mode 100755 index 0000000..7b57f13 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/Quackable.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.combining.ducks; + +public interface Quackable { + public void quack(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RedheadDuck.java new file mode 100755 index 0000000..2c73bca --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RedheadDuck.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.ducks; + +public class RedheadDuck implements Quackable { + public void quack() { + System.out.println("Quack"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RubberDuck.java new file mode 100755 index 0000000..12cd62d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RubberDuck.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.ducks; + +public class RubberDuck implements Quackable { + public void quack() { + System.out.println("Squeak"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/AbstractDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/AbstractDuckFactory.java new file mode 100755 index 0000000..207b3fa --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/AbstractDuckFactory.java @@ -0,0 +1,9 @@ +package headfirst.designpatterns.combining.factory; + +public abstract class AbstractDuckFactory { + + public abstract Quackable createMallardDuck(); + public abstract Quackable createRedheadDuck(); + public abstract Quackable createDuckCall(); + public abstract Quackable createRubberDuck(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/CountingDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/CountingDuckFactory.java new file mode 100755 index 0000000..31793d3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/CountingDuckFactory.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.combining.factory; + +public class CountingDuckFactory extends AbstractDuckFactory { + + public Quackable createMallardDuck() { + return new QuackCounter(new MallardDuck()); + } + + public Quackable createRedheadDuck() { + return new QuackCounter(new RedheadDuck()); + } + + public Quackable createDuckCall() { + return new QuackCounter(new DuckCall()); + } + + public Quackable createRubberDuck() { + return new QuackCounter(new RubberDuck()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DecoyDuck.java new file mode 100755 index 0000000..8ab970f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DecoyDuck.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.factory; + +public class DecoyDuck implements Quackable { + + public void quack() { + System.out.println("<< Silence >>"); + } + + public String toString() { + return "Decoy Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckCall.java new file mode 100755 index 0000000..3632024 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckCall.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.factory; + +public class DuckCall implements Quackable { + + public void quack() { + System.out.println("Kwak"); + } + + public String toString() { + return "Duck Call"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckFactory.java new file mode 100755 index 0000000..e830807 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckFactory.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.combining.factory; + +public class DuckFactory extends AbstractDuckFactory { + + public Quackable createMallardDuck() { + return new MallardDuck(); + } + + public Quackable createRedheadDuck() { + return new RedheadDuck(); + } + + public Quackable createDuckCall() { + return new DuckCall(); + } + + public Quackable createRubberDuck() { + return new RubberDuck(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckSimulator.java new file mode 100755 index 0000000..5522d8f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckSimulator.java @@ -0,0 +1,34 @@ +package headfirst.designpatterns.combining.factory; + +public class DuckSimulator { + public static void main(String[] args) { + DuckSimulator simulator = new DuckSimulator(); + AbstractDuckFactory duckFactory = new CountingDuckFactory(); + + simulator.simulate(duckFactory); + } + + void simulate(AbstractDuckFactory duckFactory) { + Quackable mallardDuck = duckFactory.createMallardDuck(); + Quackable redheadDuck = duckFactory.createRedheadDuck(); + Quackable duckCall = duckFactory.createDuckCall(); + Quackable rubberDuck = duckFactory.createRubberDuck(); + Quackable gooseDuck = new GooseAdapter(new Goose()); + + System.out.println("\nDuck Simulator: With Abstract Factory"); + + simulate(mallardDuck); + simulate(redheadDuck); + simulate(duckCall); + simulate(rubberDuck); + simulate(gooseDuck); + + System.out.println("The ducks quacked " + + QuackCounter.getQuacks() + + " times"); + } + + void simulate(Quackable duck) { + duck.quack(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Goose.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Goose.java new file mode 100755 index 0000000..6c35145 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Goose.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.combining.factory; + +public class Goose { + public void honk() { + System.out.println("Honk"); + } + + public String toString() { + return "Goose"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/GooseAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/GooseAdapter.java new file mode 100755 index 0000000..915155c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/GooseAdapter.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.combining.factory; + +public class GooseAdapter implements Quackable { + Goose goose; + + public GooseAdapter(Goose goose) { + this.goose = goose; + } + + public void quack() { + goose.honk(); + } + + public String toString() { + return "Goose pretending to be a Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/MallardDuck.java new file mode 100755 index 0000000..b91b33c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/MallardDuck.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.factory; + +public class MallardDuck implements Quackable { + + public void quack() { + System.out.println("Quack"); + } + + public String toString() { + return "Mallard Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/QuackCounter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/QuackCounter.java new file mode 100755 index 0000000..6a73c30 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/QuackCounter.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.combining.factory; + +public class QuackCounter implements Quackable { + Quackable duck; + static int numberOfQuacks; + + public QuackCounter(Quackable duck) { + this.duck = duck; + } + + public void quack() { + duck.quack(); + numberOfQuacks++; + } + + public static int getQuacks() { + return numberOfQuacks; + } + + public String toString() { + return duck.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Quackable.java new file mode 100755 index 0000000..37c50a5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Quackable.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.combining.factory; + +public interface Quackable { + public void quack(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RedheadDuck.java new file mode 100755 index 0000000..e7df76b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RedheadDuck.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.combining.factory; + +public class RedheadDuck implements Quackable { + public void quack() { + System.out.println("Quack"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RubberDuck.java new file mode 100755 index 0000000..ddd7ae4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RubberDuck.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.factory; + +public class RubberDuck implements Quackable { + + public void quack() { + System.out.println("Squeak"); + } + + public String toString() { + return "Rubber Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/.QuackDecorator.java.swp b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/.QuackDecorator.java.swp new file mode 100755 index 0000000000000000000000000000000000000000..873837cff6bb8e239ca064d97d0ad692b20b99f3 GIT binary patch literal 12288 zcmeI2-D(p-6vwCD1=RX+Esphrl;Uo!&9m{ObY>FN8ZQK2 z!8`FWMErUM-#`&xz$-x%{qJOx%?D|&yim@UL_}(zq3*1i{1jmb&RpA z8+WgL+q=N{GGkJ!FkPN>t;VWW7Z+7ogkF?{A{vwMBrWK#udQtQ>rzzKls4Ai6xK=| z8~=Jzk-pKPzl~Vc#loZ>s941{KM9P~EvfyRO%d*{$S~2uCfeH(Eiq;{S|$TzVA#O? zrG?A<%*@#nCvOjj=$;Ia0Wv@a$N(8217v^r_S-di2%qP{REArm4>CXo z$N(8217v^p?6Rp;mZ1+T= z%?brAZBxg*(hPS!o7}P*L(j$85-T*CL8L<7S>btz?=#N%#O+;iS2a$osy^(V+w>Q2 zC91+l;^_`7&)2f13?{X^6^h-F?7maFLL(1$Gk7l}FP-%rH|qgPSDj>&w{5Jj=w8K^ z*QD)4i?ez9VBXvuG7GNTy>v``q{nR4x$CrMx0UhI48G*#=UcnYdV}UgcPoNOy2soR zV5jeVgGWJ~!Hg2izR55W#tgj=T-6(qtjpMD5x3F)#8-zk(50wJ-W!?sdL#2**LLZk GGVBiseMCS2 literal 0 HcmV?d00001 diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/AbstractDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/AbstractDuckFactory.java new file mode 100755 index 0000000..71aac2b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/AbstractDuckFactory.java @@ -0,0 +1,9 @@ +package headfirst.designpatterns.combining.observer; + +public abstract class AbstractDuckFactory { + + public abstract Quackable createMallardDuck(); + public abstract Quackable createRedheadDuck(); + public abstract Quackable createDuckCall(); + public abstract Quackable createRubberDuck(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/CountingDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/CountingDuckFactory.java new file mode 100755 index 0000000..22de8cd --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/CountingDuckFactory.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.combining.observer; + +public class CountingDuckFactory extends AbstractDuckFactory { + + public Quackable createMallardDuck() { + return new QuackCounter(new MallardDuck()); + } + + public Quackable createRedheadDuck() { + return new QuackCounter(new RedheadDuck()); + } + + public Quackable createDuckCall() { + return new QuackCounter(new DuckCall()); + } + + public Quackable createRubberDuck() { + return new QuackCounter(new RubberDuck()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DecoyDuck.java new file mode 100755 index 0000000..54d042d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DecoyDuck.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.combining.observer; + +public class DecoyDuck implements Quackable { + Observable observable; + + public DecoyDuck() { + observable = new Observable(this); + } + + public void quack() { + System.out.println("<< Silence >>"); + notifyObservers(); + } + + public void registerObserver(Observer observer) { + observable.registerObserver(observer); + } + + public void notifyObservers() { + observable.notifyObservers(); + } + + public String toString() { + return "Decoy Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckCall.java new file mode 100755 index 0000000..241afb7 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckCall.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.combining.observer; + +public class DuckCall implements Quackable { + Observable observable; + + public DuckCall() { + observable = new Observable(this); + } + + public void quack() { + System.out.println("Kwak"); + notifyObservers(); + } + + public void registerObserver(Observer observer) { + observable.registerObserver(observer); + } + + public void notifyObservers() { + observable.notifyObservers(); + } + + public String toString() { + return "Duck Call"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckFactory.java new file mode 100755 index 0000000..25bfdf9 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckFactory.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.combining.observer; + +public class DuckFactory extends AbstractDuckFactory { + + public Quackable createMallardDuck() { + return new MallardDuck(); + } + + public Quackable createRedheadDuck() { + return new RedheadDuck(); + } + + public Quackable createDuckCall() { + return new DuckCall(); + } + + public Quackable createRubberDuck() { + return new RubberDuck(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckSimulator.java new file mode 100755 index 0000000..1f1851e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckSimulator.java @@ -0,0 +1,54 @@ +package headfirst.designpatterns.combining.observer; + +public class DuckSimulator { + public static void main(String[] args) { + DuckSimulator simulator = new DuckSimulator(); + AbstractDuckFactory duckFactory = new CountingDuckFactory(); + + simulator.simulate(duckFactory); + } + + void simulate(AbstractDuckFactory duckFactory) { + + Quackable redheadDuck = duckFactory.createRedheadDuck(); + Quackable duckCall = duckFactory.createDuckCall(); + Quackable rubberDuck = duckFactory.createRubberDuck(); + Quackable gooseDuck = new GooseAdapter(new Goose()); + + Flock flockOfDucks = new Flock(); + + flockOfDucks.add(redheadDuck); + flockOfDucks.add(duckCall); + flockOfDucks.add(rubberDuck); + flockOfDucks.add(gooseDuck); + + Flock flockOfMallards = new Flock(); + + Quackable mallardOne = duckFactory.createMallardDuck(); + Quackable mallardTwo = duckFactory.createMallardDuck(); + Quackable mallardThree = duckFactory.createMallardDuck(); + Quackable mallardFour = duckFactory.createMallardDuck(); + + flockOfMallards.add(mallardOne); + flockOfMallards.add(mallardTwo); + flockOfMallards.add(mallardThree); + flockOfMallards.add(mallardFour); + + flockOfDucks.add(flockOfMallards); + + System.out.println("\nDuck Simulator: With Observer"); + + Quackologist quackologist = new Quackologist(); + flockOfDucks.registerObserver(quackologist); + + simulate(flockOfDucks); + + System.out.println("\nThe ducks quacked " + + QuackCounter.getQuacks() + + " times"); + } + + void simulate(Quackable duck) { + duck.quack(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Flock.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Flock.java new file mode 100755 index 0000000..1d995c0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Flock.java @@ -0,0 +1,34 @@ +package headfirst.designpatterns.combining.observer; + +import java.util.Iterator; +import java.util.*; + +public class Flock implements Quackable { + List ducks = new ArrayList(); + + public void add(Quackable duck) { + ducks.add(duck); + } + + public void quack() { + Iterator iterator = ducks.iterator(); + while (iterator.hasNext()) { + Quackable duck = (Quackable)iterator.next(); + duck.quack(); + } + } + + public void registerObserver(Observer observer) { + Iterator iterator = ducks.iterator(); + while (iterator.hasNext()) { + Quackable duck = (Quackable)iterator.next(); + duck.registerObserver(observer); + } + } + + public void notifyObservers() { } + + public String toString() { + return "Flock of Ducks"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Goose.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Goose.java new file mode 100755 index 0000000..e00c8b0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Goose.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.observer; + +public class Goose { + + public void honk() { + System.out.println("Honk"); + } + + public String toString() { + return "Goose"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/GooseAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/GooseAdapter.java new file mode 100755 index 0000000..d2b2168 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/GooseAdapter.java @@ -0,0 +1,28 @@ +package headfirst.designpatterns.combining.observer; + +public class GooseAdapter implements Quackable { + Goose goose; + Observable observable; + + public GooseAdapter(Goose goose) { + this.goose = goose; + observable = new Observable(this); + } + + public void quack() { + goose.honk(); + notifyObservers(); + } + + public void registerObserver(Observer observer) { + observable.registerObserver(observer); + } + + public void notifyObservers() { + observable.notifyObservers(); + } + + public String toString() { + return "Goose pretending to be a Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/MallardDuck.java new file mode 100755 index 0000000..ede2c2c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/MallardDuck.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.combining.observer; + +public class MallardDuck implements Quackable { + Observable observable; + + public MallardDuck() { + observable = new Observable(this); + } + + public void quack() { + System.out.println("Quack"); + notifyObservers(); + } + + public void registerObserver(Observer observer) { + observable.registerObserver(observer); + } + + public void notifyObservers() { + observable.notifyObservers(); + } + + public String toString() { + return "Mallard Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observable.java new file mode 100755 index 0000000..bf954a5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observable.java @@ -0,0 +1,30 @@ +package headfirst.designpatterns.combining.observer; + +import java.util.Iterator; +import java.util.List; +import java.util.ArrayList; + +public class Observable implements QuackObservable { + List observers = new ArrayList(); + QuackObservable duck; + + public Observable(QuackObservable duck) { + this.duck = duck; + } + + public void registerObserver(Observer observer) { + observers.add(observer); + } + + public void notifyObservers() { + Iterator iterator = observers.iterator(); + while (iterator.hasNext()) { + Observer observer = iterator.next(); + observer.update(duck); + } + } + + public Iterator getObservers() { + return observers.iterator(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observer.java new file mode 100755 index 0000000..bbdd809 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observer.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.combining.observer; + +public interface Observer { + public void update(QuackObservable duck); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackCounter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackCounter.java new file mode 100755 index 0000000..3e67c69 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackCounter.java @@ -0,0 +1,31 @@ +package headfirst.designpatterns.combining.observer; + +public class QuackCounter implements Quackable { + Quackable duck; + static int numberOfQuacks; + + public QuackCounter(Quackable duck) { + this.duck = duck; + } + + public void quack() { + duck.quack(); + numberOfQuacks++; + } + + public static int getQuacks() { + return numberOfQuacks; + } + + public void registerObserver(Observer observer) { + duck.registerObserver(observer); + } + + public void notifyObservers() { + duck.notifyObservers(); + } + + public String toString() { + return duck.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackObservable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackObservable.java new file mode 100755 index 0000000..88db133 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackObservable.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.combining.observer; + +public interface QuackObservable { + public void registerObserver(Observer observer); + public void notifyObservers(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackable.java new file mode 100755 index 0000000..d77272d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackable.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.combining.observer; + +public interface Quackable extends QuackObservable { + public void quack(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackologist.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackologist.java new file mode 100755 index 0000000..f145144 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackologist.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.combining.observer; + +public class Quackologist implements Observer { + + public void update(QuackObservable duck) { + System.out.println("Quackologist: " + duck + " just quacked."); + } + + public String toString() { + return "Quackologist"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RedheadDuck.java new file mode 100755 index 0000000..2b5aa54 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RedheadDuck.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.combining.observer; + +public class RedheadDuck implements Quackable { + Observable observable; + + public RedheadDuck() { + observable = new Observable(this); + } + + public void quack() { + System.out.println("Quack"); + notifyObservers(); + } + + public void registerObserver(Observer observer) { + observable.registerObserver(observer); + } + + public void notifyObservers() { + observable.notifyObservers(); + } + + public String toString() { + return "Redhead Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RubberDuck.java new file mode 100755 index 0000000..19c5d48 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RubberDuck.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.combining.observer; + +public class RubberDuck implements Quackable { + Observable observable; + + public RubberDuck() { + observable = new Observable(this); + } + + public void quack() { + System.out.println("Squeak"); + notifyObservers(); + } + + public void registerObserver(Observer observer) { + observable.registerObserver(observer); + } + + public void notifyObservers() { + observable.notifyObservers(); + } + + public String toString() { + return "Rubber Duck"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/BurgerAndFriesOrder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/BurgerAndFriesOrder.java new file mode 100644 index 0000000..937cb8f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/BurgerAndFriesOrder.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.command.diner; + +public class BurgerAndFriesOrder implements Order { + Cook cook; + public BurgerAndFriesOrder(Cook cook) { + this.cook = cook; + } + public void orderUp() { + cook.makeBurger(); + cook.makeFries(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Cook.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Cook.java new file mode 100644 index 0000000..7df0663 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Cook.java @@ -0,0 +1,14 @@ +package headfirst.designpatterns.command.diner; + +public class Cook { + + public Cook() {} + + public void makeBurger() { + System.out.println("Making a burger"); + } + + public void makeFries() { + System.out.println("Making fries"); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Customer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Customer.java new file mode 100644 index 0000000..b764a40 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Customer.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.command.diner; + +public class Customer { + Waitress waitress; + Order order; + public Customer(Waitress waitress) { + this.waitress = waitress; + } + public void createOrder(Order order) { + this.order = order; + } + public void hungry() { + waitress.takeOrder(order); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Diner.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Diner.java new file mode 100644 index 0000000..4a695ea --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Diner.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.command.diner; + +public class Diner { + public static void main(String[] args) { + Cook cook = new Cook(); + Waitress waitress = new Waitress(); + Customer customer = new Customer(waitress); + customer.createOrder(new BurgerAndFriesOrder(cook)); + customer.hungry(); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Order.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Order.java new file mode 100755 index 0000000..2bcad5e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Order.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.command.diner; + +@FunctionalInterface +public interface Order { + public void orderUp(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Waitress.java new file mode 100644 index 0000000..c53025c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Waitress.java @@ -0,0 +1,10 @@ +package headfirst.designpatterns.command.diner; + +public class Waitress { + Order order; + public Waitress() {} + public void takeOrder(Order order) { + this.order = order; + order.orderUp(); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Cook.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Cook.java new file mode 100644 index 0000000..f16cd68 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Cook.java @@ -0,0 +1,14 @@ +package headfirst.designpatterns.command.dinerLambda; + +public class Cook { + + public Cook() {} + + public void makeBurger() { + System.out.println("Making a burger"); + } + + public void makeFries() { + System.out.println("Making fries"); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Customer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Customer.java new file mode 100644 index 0000000..cbfeb77 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Customer.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.command.dinerLambda; + +public class Customer { + Waitress waitress; + Cook cook; + Order o; + public Customer(Waitress waitress, Cook cook) { + this.waitress = waitress; + this.cook = cook; + } + public void createOrder() { + Order o = () -> { cook.makeBurger(); cook.makeFries(); }; + } + public void hungry() { + waitress.takeOrder(o); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Diner.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Diner.java new file mode 100644 index 0000000..1df5379 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Diner.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.command.dinerLambda; + +public class Diner { + public static void main(String[] args) { + Cook cook = new Cook(); + Waitress waitress = new Waitress(); + Customer customer = new Customer(waitress, cook); + customer.createOrder(); + customer.hungry(); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Order.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Order.java new file mode 100755 index 0000000..457dce0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Order.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.command.dinerLambda; + +@FunctionalInterface +public interface Order { + public void orderUp(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Waitress.java new file mode 100644 index 0000000..5ae13ec --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Waitress.java @@ -0,0 +1,10 @@ +package headfirst.designpatterns.command.dinerLambda; + +public class Waitress { + Order order; + public Waitress() {} + public void takeOrder(Order order) { + this.order = order; + order.orderUp(); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFan.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFan.java new file mode 100755 index 0000000..56c730e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFan.java @@ -0,0 +1,42 @@ +package headfirst.designpatterns.command.party; + +public class CeilingFan { + public static final int HIGH = 3; + public static final int MEDIUM = 2; + public static final int LOW = 1; + public static final int OFF = 0; + String location; + int speed; + + public CeilingFan(String location) { + this.location = location; + } + + public void high() { + // turns the ceiling fan on to high + speed = HIGH; + System.out.println(location + " ceiling fan is on high"); + } + + public void medium() { + // turns the ceiling fan on to medium + speed = MEDIUM; + System.out.println(location + " ceiling fan is on medium"); + } + + public void low() { + // turns the ceiling fan on to low + speed = LOW; + System.out.println(location + " ceiling fan is on low"); + } + + public void off() { + // turns the ceiling fan off + speed = OFF; + System.out.println(location + " ceiling fan is off"); + } + + public int getSpeed() { + return speed; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanHighCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanHighCommand.java new file mode 100755 index 0000000..69fee07 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanHighCommand.java @@ -0,0 +1,22 @@ +package headfirst.designpatterns.command.party; + +public class CeilingFanHighCommand implements Command { + CeilingFan ceilingFan; + int prevSpeed; + + public CeilingFanHighCommand(CeilingFan ceilingFan) { + this.ceilingFan = ceilingFan; + } + public void execute() { + prevSpeed = ceilingFan.getSpeed(); + ceilingFan.high(); + } + public void undo() { + switch (prevSpeed) { + case CeilingFan.HIGH: ceilingFan.high(); break; + case CeilingFan.MEDIUM: ceilingFan.medium(); break; + case CeilingFan.LOW: ceilingFan.low(); break; + default: ceilingFan.off(); break; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanMediumCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanMediumCommand.java new file mode 100755 index 0000000..3c687b6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanMediumCommand.java @@ -0,0 +1,22 @@ +package headfirst.designpatterns.command.party; + +public class CeilingFanMediumCommand implements Command { + CeilingFan ceilingFan; + int prevSpeed; + + public CeilingFanMediumCommand(CeilingFan ceilingFan) { + this.ceilingFan = ceilingFan; + } + public void execute() { + prevSpeed = ceilingFan.getSpeed(); + ceilingFan.medium(); + } + public void undo() { + switch (prevSpeed) { + case CeilingFan.HIGH: ceilingFan.high(); break; + case CeilingFan.MEDIUM: ceilingFan.medium(); break; + case CeilingFan.LOW: ceilingFan.low(); break; + default: ceilingFan.off(); break; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanOffCommand.java new file mode 100755 index 0000000..4548fa5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanOffCommand.java @@ -0,0 +1,22 @@ +package headfirst.designpatterns.command.party; + +public class CeilingFanOffCommand implements Command { + CeilingFan ceilingFan; + int prevSpeed; + + public CeilingFanOffCommand(CeilingFan ceilingFan) { + this.ceilingFan = ceilingFan; + } + public void execute() { + prevSpeed = ceilingFan.getSpeed(); + ceilingFan.off(); + } + public void undo() { + switch (prevSpeed) { + case CeilingFan.HIGH: ceilingFan.high(); break; + case CeilingFan.MEDIUM: ceilingFan.medium(); break; + case CeilingFan.LOW: ceilingFan.low(); break; + default: ceilingFan.off(); break; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Command.java new file mode 100755 index 0000000..01b969f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Command.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.command.party; + +public interface Command { + public void execute(); + public void undo(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Hottub.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Hottub.java new file mode 100755 index 0000000..dbd1518 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Hottub.java @@ -0,0 +1,45 @@ +package headfirst.designpatterns.command.party; + +public class Hottub { + boolean on; + int temperature; + + public Hottub() { + } + + public void on() { + on = true; + } + + public void off() { + on = false; + } + + public void circulate() { + if (on) { + System.out.println("Hottub is bubbling!"); + } + } + + public void jetsOn() { + if (on) { + System.out.println("Hottub jets are on"); + } + } + + public void jetsOff() { + if (on) { + System.out.println("Hottub jets are off"); + } + } + + public void setTemperature(int temperature) { + if (temperature > this.temperature) { + System.out.println("Hottub is heating to a steaming " + temperature + " degrees"); + } + else { + System.out.println("Hottub is cooling to " + temperature + " degrees"); + } + this.temperature = temperature; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOffCommand.java new file mode 100755 index 0000000..0883db5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOffCommand.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.command.party; + +public class HottubOffCommand implements Command { + Hottub hottub; + + public HottubOffCommand(Hottub hottub) { + this.hottub = hottub; + } + + public void execute() { + hottub.setTemperature(98); + hottub.off(); + } + public void undo() { + hottub.on(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOnCommand.java new file mode 100755 index 0000000..a175bff --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOnCommand.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.command.party; + +public class HottubOnCommand implements Command { + Hottub hottub; + + public HottubOnCommand(Hottub hottub) { + this.hottub = hottub; + } + public void execute() { + hottub.on(); + hottub.setTemperature(104); + hottub.circulate(); + } + public void undo() { + hottub.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Light.java new file mode 100755 index 0000000..e7e9947 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Light.java @@ -0,0 +1,34 @@ +package headfirst.designpatterns.command.party; + +public class Light { + String location; + int level; + + public Light(String location) { + this.location = location; + } + + public void on() { + level = 100; + System.out.println("Light is on"); + } + + public void off() { + level = 0; + System.out.println("Light is off"); + } + + public void dim(int level) { + this.level = level; + if (level == 0) { + off(); + } + else { + System.out.println("Light is dimmed to " + level + "%"); + } + } + + public int getLevel() { + return level; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOffCommand.java new file mode 100755 index 0000000..18b322a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOffCommand.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.command.party; + +public class LightOffCommand implements Command { + Light light; + + public LightOffCommand(Light light) { + this.light = light; + } + + public void execute() { + light.off(); + } + + public void undo() { + light.on(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOnCommand.java new file mode 100755 index 0000000..86ee80a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOnCommand.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.command.party; + +public class LightOnCommand implements Command { + Light light; + + public LightOnCommand(Light light) { + this.light = light; + } + + public void execute() { + light.on(); + } + + public void undo() { + light.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOffCommand.java new file mode 100755 index 0000000..3df6631 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOffCommand.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.command.party; + +public class LivingroomLightOffCommand implements Command { + Light light; + + public LivingroomLightOffCommand(Light light) { + this.light = light; + } + public void execute() { + light.off(); + } + public void undo() { + light.on(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOnCommand.java new file mode 100755 index 0000000..b7314dd --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOnCommand.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.command.party; + +public class LivingroomLightOnCommand implements Command { + Light light; + + public LivingroomLightOnCommand(Light light) { + this.light = light; + } + public void execute() { + light.on(); + } + public void undo() { + light.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/MacroCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/MacroCommand.java new file mode 100755 index 0000000..5016cf8 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/MacroCommand.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.command.party; + +public class MacroCommand implements Command { + Command[] commands; + + public MacroCommand(Command[] commands) { + this.commands = commands; + } + + public void execute() { + for (int i = 0; i < commands.length; i++) { + commands[i].execute(); + } + } + + /** + * NOTE: these commands have to be done backwards to ensure + * proper undo functionality + */ + public void undo() { + for (int i = commands.length -1; i >= 0; i--) { + commands[i].undo(); + } + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/NoCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/NoCommand.java new file mode 100755 index 0000000..2c88823 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/NoCommand.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.command.party; + +public class NoCommand implements Command { + public void execute() { } + public void undo() { } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteControl.java new file mode 100755 index 0000000..ab3584e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteControl.java @@ -0,0 +1,52 @@ +package headfirst.designpatterns.command.party; + +// +// This is the invoker +// +public class RemoteControl { + Command[] onCommands; + Command[] offCommands; + Command undoCommand; + + public RemoteControl() { + onCommands = new Command[7]; + offCommands = new Command[7]; + + Command noCommand = new NoCommand(); + for(int i=0;i<7;i++) { + onCommands[i] = noCommand; + offCommands[i] = noCommand; + } + undoCommand = noCommand; + } + + public void setCommand(int slot, Command onCommand, Command offCommand) { + onCommands[slot] = onCommand; + offCommands[slot] = offCommand; + } + + public void onButtonWasPushed(int slot) { + onCommands[slot].execute(); + undoCommand = onCommands[slot]; + } + + public void offButtonWasPushed(int slot) { + offCommands[slot].execute(); + undoCommand = offCommands[slot]; + } + + public void undoButtonWasPushed() { + undoCommand.undo(); + } + + public String toString() { + StringBuffer stringBuff = new StringBuffer(); + stringBuff.append("\n------ Remote Control -------\n"); + for (int i = 0; i < onCommands.length; i++) { + stringBuff.append("[slot " + i + "] " + onCommands[i].getClass().getName() + + " " + offCommands[i].getClass().getName() + "\n"); + } + stringBuff.append("[undo] " + undoCommand.getClass().getName() + "\n"); + return stringBuff.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteLoader.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteLoader.java new file mode 100755 index 0000000..354a585 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteLoader.java @@ -0,0 +1,37 @@ +package headfirst.designpatterns.command.party; + +public class RemoteLoader { + + public static void main(String[] args) { + + RemoteControl remoteControl = new RemoteControl(); + + Light light = new Light("Living Room"); + TV tv = new TV("Living Room"); + Stereo stereo = new Stereo("Living Room"); + Hottub hottub = new Hottub(); + + LightOnCommand lightOn = new LightOnCommand(light); + StereoOnCommand stereoOn = new StereoOnCommand(stereo); + TVOnCommand tvOn = new TVOnCommand(tv); + HottubOnCommand hottubOn = new HottubOnCommand(hottub); + LightOffCommand lightOff = new LightOffCommand(light); + StereoOffCommand stereoOff = new StereoOffCommand(stereo); + TVOffCommand tvOff = new TVOffCommand(tv); + HottubOffCommand hottubOff = new HottubOffCommand(hottub); + + Command[] partyOn = { lightOn, stereoOn, tvOn, hottubOn}; + Command[] partyOff = { lightOff, stereoOff, tvOff, hottubOff}; + + MacroCommand partyOnMacro = new MacroCommand(partyOn); + MacroCommand partyOffMacro = new MacroCommand(partyOff); + + remoteControl.setCommand(0, partyOnMacro, partyOffMacro); + + System.out.println(remoteControl); + System.out.println("--- Pushing Macro On---"); + remoteControl.onButtonWasPushed(0); + System.out.println("--- Pushing Macro Off---"); + remoteControl.offButtonWasPushed(0); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Stereo.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Stereo.java new file mode 100755 index 0000000..51466cd --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Stereo.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.command.party; + +public class Stereo { + String location; + + public Stereo(String location) { + this.location = location; + } + + public void on() { + System.out.println(location + " stereo is on"); + } + + public void off() { + System.out.println(location + " stereo is off"); + } + + public void setCD() { + System.out.println(location + " stereo is set for CD input"); + } + + public void setDVD() { + System.out.println(location + " stereo is set for DVD input"); + } + + public void setRadio() { + System.out.println(location + " stereo is set for Radio"); + } + + public void setVolume(int volume) { + // code to set the volume + // valid range: 1-11 (after all 11 is better than 10, right?) + System.out.println(location + " Stereo volume set to " + volume); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOffCommand.java new file mode 100755 index 0000000..6eaa36b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOffCommand.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.command.party; + +public class StereoOffCommand implements Command { + Stereo stereo; + + public StereoOffCommand(Stereo stereo) { + this.stereo = stereo; + } + + public void execute() { + stereo.off(); + } + + public void undo() { + stereo.on(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnCommand.java new file mode 100755 index 0000000..926dd1b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnCommand.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.command.party; + +public class StereoOnCommand implements Command { + Stereo stereo; + + public StereoOnCommand(Stereo stereo) { + this.stereo = stereo; + } + + public void execute() { + stereo.on(); + } + + public void undo() { + stereo.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnWithCDCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnWithCDCommand.java new file mode 100755 index 0000000..984daba --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnWithCDCommand.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.command.party; + +public class StereoOnWithCDCommand implements Command { + Stereo stereo; + + public StereoOnWithCDCommand(Stereo stereo) { + this.stereo = stereo; + } + + public void execute() { + stereo.on(); + stereo.setCD(); + stereo.setVolume(11); + } + + public void undo() { + stereo.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TV.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TV.java new file mode 100755 index 0000000..bc1d0fd --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TV.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.command.party; + +public class TV { + String location; + int channel; + + public TV(String location) { + this.location = location; + } + + public void on() { + System.out.println(location + " TV is on"); + } + + public void off() { + System.out.println(location + " TV is off"); + } + + public void setInputChannel() { + this.channel = 3; + System.out.println(location + " TV channel is set for DVD"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOffCommand.java new file mode 100755 index 0000000..39d3304 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOffCommand.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.command.party; + +public class TVOffCommand implements Command { + TV tv; + + public TVOffCommand(TV tv) { + this.tv= tv; + } + + public void execute() { + tv.off(); + } + + public void undo() { + tv.on(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOnCommand.java new file mode 100755 index 0000000..fd089a4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOnCommand.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.command.party; + +public class TVOnCommand implements Command { + TV tv; + + public TVOnCommand(TV tv) { + this.tv= tv; + } + + public void execute() { + tv.on(); + tv.setInputChannel(); + } + + public void undo() { + tv.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFan.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFan.java new file mode 100755 index 0000000..1ea1dfb --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFan.java @@ -0,0 +1,42 @@ +package headfirst.designpatterns.command.remote; + +public class CeilingFan { + String location = ""; + int level; + public static final int HIGH = 2; + public static final int MEDIUM = 1; + public static final int LOW = 0; + + public CeilingFan(String location) { + this.location = location; + } + + public void high() { + // turns the ceiling fan on to high + level = HIGH; + System.out.println(location + " ceiling fan is on high"); + + } + + public void medium() { + // turns the ceiling fan on to medium + level = MEDIUM; + System.out.println(location + " ceiling fan is on medium"); + } + + public void low() { + // turns the ceiling fan on to low + level = LOW; + System.out.println(location + " ceiling fan is on low"); + } + + public void off() { + // turns the ceiling fan off + level = 0; + System.out.println(location + " ceiling fan is off"); + } + + public int getSpeed() { + return level; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOffCommand.java new file mode 100755 index 0000000..9b78518 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOffCommand.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.command.remote; + +public class CeilingFanOffCommand implements Command { + CeilingFan ceilingFan; + + public CeilingFanOffCommand(CeilingFan ceilingFan) { + this.ceilingFan = ceilingFan; + } + public void execute() { + ceilingFan.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOnCommand.java new file mode 100755 index 0000000..c0b21f6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOnCommand.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.command.remote; + +public class CeilingFanOnCommand implements Command { + CeilingFan ceilingFan; + + public CeilingFanOnCommand(CeilingFan ceilingFan) { + this.ceilingFan = ceilingFan; + } + public void execute() { + ceilingFan.high(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Command.java new file mode 100755 index 0000000..15ef179 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Command.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.command.remote; + +public interface Command { + public void execute(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoor.java new file mode 100755 index 0000000..35cf681 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoor.java @@ -0,0 +1,29 @@ +package headfirst.designpatterns.command.remote; + +public class GarageDoor { + String location; + + public GarageDoor(String location) { + this.location = location; + } + + public void up() { + System.out.println(location + " garage Door is Up"); + } + + public void down() { + System.out.println(location + " garage Door is Down"); + } + + public void stop() { + System.out.println(location + " garage Door is Stopped"); + } + + public void lightOn() { + System.out.println(location + " garage light is on"); + } + + public void lightOff() { + System.out.println(location + " garage light is off"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorDownCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorDownCommand.java new file mode 100755 index 0000000..f10af51 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorDownCommand.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.command.remote; + +public class GarageDoorDownCommand implements Command { + GarageDoor garageDoor; + + public GarageDoorDownCommand(GarageDoor garageDoor) { + this.garageDoor = garageDoor; + } + + public void execute() { + garageDoor.up(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorUpCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorUpCommand.java new file mode 100755 index 0000000..0de73c5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorUpCommand.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.command.remote; + +public class GarageDoorUpCommand implements Command { + GarageDoor garageDoor; + + public GarageDoorUpCommand(GarageDoor garageDoor) { + this.garageDoor = garageDoor; + } + + public void execute() { + garageDoor.up(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Hottub.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Hottub.java new file mode 100755 index 0000000..b1efb40 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Hottub.java @@ -0,0 +1,56 @@ +package headfirst.designpatterns.command.remote; + +public class Hottub { + boolean on; + int temperature; + + public Hottub() { + } + + public void on() { + on = true; + } + + public void off() { + on = false; + } + + public void bubblesOn() { + if (on) { + System.out.println("Hottub is bubbling!"); + } + } + + public void bubblesOff() { + if (on) { + System.out.println("Hottub is not bubbling"); + } + } + + public void jetsOn() { + if (on) { + System.out.println("Hottub jets are on"); + } + } + + public void jetsOff() { + if (on) { + System.out.println("Hottub jets are off"); + } + } + + public void setTemperature(int temperature) { + this.temperature = temperature; + } + + public void heat() { + temperature = 105; + System.out.println("Hottub is heating to a steaming 105 degrees"); + } + + public void cool() { + temperature = 98; + System.out.println("Hottub is cooling to 98 degrees"); + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOffCommand.java new file mode 100755 index 0000000..e87c43b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOffCommand.java @@ -0,0 +1,14 @@ +package headfirst.designpatterns.command.remote; + +public class HottubOffCommand implements Command { + Hottub hottub; + + public HottubOffCommand(Hottub hottub) { + this.hottub = hottub; + } + + public void execute() { + hottub.cool(); + hottub.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOnCommand.java new file mode 100755 index 0000000..bb639fe --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOnCommand.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.command.remote; + +public class HottubOnCommand implements Command { + Hottub hottub; + + public HottubOnCommand(Hottub hottub) { + this.hottub = hottub; + } + + public void execute() { + hottub.on(); + hottub.heat(); + hottub.bubblesOn(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Light.java new file mode 100755 index 0000000..68c743f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Light.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.command.remote; + +public class Light { + String location = ""; + + public Light(String location) { + this.location = location; + } + + public void on() { + System.out.println(location + " light is on"); + } + + public void off() { + System.out.println(location + " light is off"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOffCommand.java new file mode 100755 index 0000000..9b054c6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOffCommand.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.command.remote; + +public class LightOffCommand implements Command { + Light light; + + public LightOffCommand(Light light) { + this.light = light; + } + + public void execute() { + light.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOnCommand.java new file mode 100755 index 0000000..38d2e34 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOnCommand.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.command.remote; + +public class LightOnCommand implements Command { + Light light; + + public LightOnCommand(Light light) { + this.light = light; + } + + public void execute() { + light.on(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOffCommand.java new file mode 100755 index 0000000..f1dc730 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOffCommand.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.command.remote; + +public class LivingroomLightOffCommand implements Command { + Light light; + + public LivingroomLightOffCommand(Light light) { + this.light = light; + } + + public void execute() { + light.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOnCommand.java new file mode 100755 index 0000000..bb7e6bb --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOnCommand.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.command.remote; + +public class LivingroomLightOnCommand implements Command { + Light light; + + public LivingroomLightOnCommand(Light light) { + this.light = light; + } + + public void execute() { + light.on(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/NoCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/NoCommand.java new file mode 100755 index 0000000..6f58f42 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/NoCommand.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.command.remote; + +public class NoCommand implements Command { + public void execute() { } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteControl.java new file mode 100755 index 0000000..72697c7 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteControl.java @@ -0,0 +1,43 @@ +package headfirst.designpatterns.command.remote; + +// +// This is the invoker +// +public class RemoteControl { + Command[] onCommands; + Command[] offCommands; + + public RemoteControl() { + onCommands = new Command[7]; + offCommands = new Command[7]; + + Command noCommand = new NoCommand(); + for (int i = 0; i < 7; i++) { + onCommands[i] = noCommand; + offCommands[i] = noCommand; + } + } + + public void setCommand(int slot, Command onCommand, Command offCommand) { + onCommands[slot] = onCommand; + offCommands[slot] = offCommand; + } + + public void onButtonWasPushed(int slot) { + onCommands[slot].execute(); + } + + public void offButtonWasPushed(int slot) { + offCommands[slot].execute(); + } + + public String toString() { + StringBuffer stringBuff = new StringBuffer(); + stringBuff.append("\n------ Remote Control -------\n"); + for (int i = 0; i < onCommands.length; i++) { + stringBuff.append("[slot " + i + "] " + onCommands[i].getClass().getName() + + " " + offCommands[i].getClass().getName() + "\n"); + } + return stringBuff.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteLoader.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteLoader.java new file mode 100755 index 0000000..61dea51 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteLoader.java @@ -0,0 +1,54 @@ +package headfirst.designpatterns.command.remote; + +public class RemoteLoader { + + public static void main(String[] args) { + RemoteControl remoteControl = new RemoteControl(); + + Light livingRoomLight = new Light("Living Room"); + Light kitchenLight = new Light("Kitchen"); + CeilingFan ceilingFan= new CeilingFan("Living Room"); + GarageDoor garageDoor = new GarageDoor("Garage"); + Stereo stereo = new Stereo("Living Room"); + + LightOnCommand livingRoomLightOn = + new LightOnCommand(livingRoomLight); + LightOffCommand livingRoomLightOff = + new LightOffCommand(livingRoomLight); + LightOnCommand kitchenLightOn = + new LightOnCommand(kitchenLight); + LightOffCommand kitchenLightOff = + new LightOffCommand(kitchenLight); + + CeilingFanOnCommand ceilingFanOn = + new CeilingFanOnCommand(ceilingFan); + CeilingFanOffCommand ceilingFanOff = + new CeilingFanOffCommand(ceilingFan); + + GarageDoorUpCommand garageDoorUp = + new GarageDoorUpCommand(garageDoor); + GarageDoorDownCommand garageDoorDown = + new GarageDoorDownCommand(garageDoor); + + StereoOnWithCDCommand stereoOnWithCD = + new StereoOnWithCDCommand(stereo); + StereoOffCommand stereoOff = + new StereoOffCommand(stereo); + + remoteControl.setCommand(0, livingRoomLightOn, livingRoomLightOff); + remoteControl.setCommand(1, kitchenLightOn, kitchenLightOff); + remoteControl.setCommand(2, ceilingFanOn, ceilingFanOff); + remoteControl.setCommand(3, stereoOnWithCD, stereoOff); + + System.out.println(remoteControl); + + remoteControl.onButtonWasPushed(0); + remoteControl.offButtonWasPushed(0); + remoteControl.onButtonWasPushed(1); + remoteControl.offButtonWasPushed(1); + remoteControl.onButtonWasPushed(2); + remoteControl.offButtonWasPushed(2); + remoteControl.onButtonWasPushed(3); + remoteControl.offButtonWasPushed(3); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Stereo.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Stereo.java new file mode 100755 index 0000000..9a520d0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Stereo.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.command.remote; + +public class Stereo { + String location; + + public Stereo(String location) { + this.location = location; + } + + public void on() { + System.out.println(location + " stereo is on"); + } + + public void off() { + System.out.println(location + " stereo is off"); + } + + public void setCD() { + System.out.println(location + " stereo is set for CD input"); + } + + public void setDVD() { + System.out.println(location + " stereo is set for DVD input"); + } + + public void setRadio() { + System.out.println(location + " stereo is set for Radio"); + } + + public void setVolume(int volume) { + // code to set the volume + // valid range: 1-11 (after all 11 is better than 10, right?) + System.out.println(location + " stereo volume set to " + volume); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOffCommand.java new file mode 100755 index 0000000..01b6d16 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOffCommand.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.command.remote; + +public class StereoOffCommand implements Command { + Stereo stereo; + + public StereoOffCommand(Stereo stereo) { + this.stereo = stereo; + } + + public void execute() { + stereo.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOnWithCDCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOnWithCDCommand.java new file mode 100755 index 0000000..e3dd08b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOnWithCDCommand.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.command.remote; + +public class StereoOnWithCDCommand implements Command { + Stereo stereo; + + public StereoOnWithCDCommand(Stereo stereo) { + this.stereo = stereo; + } + + public void execute() { + stereo.on(); + stereo.setCD(); + stereo.setVolume(11); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/TV.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/TV.java new file mode 100755 index 0000000..fbdf007 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/TV.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.command.remote; + +public class TV { + String location; + int channel; + + public TV(String location) { + this.location = location; + } + + public void on() { + System.out.println("TV is on"); + } + + public void off() { + System.out.println("TV is off"); + } + + public void setInputChannel() { + this.channel = 3; + System.out.println("Channel is set for VCR"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/CeilingFan.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/CeilingFan.java new file mode 100755 index 0000000..31da30e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/CeilingFan.java @@ -0,0 +1,42 @@ +package headfirst.designpatterns.command.remoteWL; + +public class CeilingFan { + String location = ""; + int level; + public static final int HIGH = 2; + public static final int MEDIUM = 1; + public static final int LOW = 0; + + public CeilingFan(String location) { + this.location = location; + } + + public void high() { + // turns the ceiling fan on to high + level = HIGH; + System.out.println(location + " ceiling fan is on high"); + + } + + public void medium() { + // turns the ceiling fan on to medium + level = MEDIUM; + System.out.println(location + " ceiling fan is on medium"); + } + + public void low() { + // turns the ceiling fan on to low + level = LOW; + System.out.println(location + " ceiling fan is on low"); + } + + public void off() { + // turns the ceiling fan off + level = 0; + System.out.println(location + " ceiling fan is off"); + } + + public int getSpeed() { + return level; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Command.java new file mode 100755 index 0000000..264affe --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Command.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.command.remoteWL; + +@FunctionalInterface +public interface Command { + public void execute(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/GarageDoor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/GarageDoor.java new file mode 100755 index 0000000..bc93e09 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/GarageDoor.java @@ -0,0 +1,29 @@ +package headfirst.designpatterns.command.remoteWL; + +public class GarageDoor { + String location; + + public GarageDoor(String location) { + this.location = location; + } + + public void up() { + System.out.println(location + " garage Door is Up"); + } + + public void down() { + System.out.println(location + " garage Door is Down"); + } + + public void stop() { + System.out.println(location + " garage Door is Stopped"); + } + + public void lightOn() { + System.out.println(location + " garage light is on"); + } + + public void lightOff() { + System.out.println(location + " garage light is off"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Hottub.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Hottub.java new file mode 100755 index 0000000..e8c909c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Hottub.java @@ -0,0 +1,56 @@ +package headfirst.designpatterns.command.remoteWL; + +public class Hottub { + boolean on; + int temperature; + + public Hottub() { + } + + public void on() { + on = true; + } + + public void off() { + on = false; + } + + public void bubblesOn() { + if (on) { + System.out.println("Hottub is bubbling!"); + } + } + + public void bubblesOff() { + if (on) { + System.out.println("Hottub is not bubbling"); + } + } + + public void jetsOn() { + if (on) { + System.out.println("Hottub jets are on"); + } + } + + public void jetsOff() { + if (on) { + System.out.println("Hottub jets are off"); + } + } + + public void setTemperature(int temperature) { + this.temperature = temperature; + } + + public void heat() { + temperature = 105; + System.out.println("Hottub is heating to a steaming 105 degrees"); + } + + public void cool() { + temperature = 98; + System.out.println("Hottub is cooling to 98 degrees"); + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Light.java new file mode 100755 index 0000000..a79c65e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Light.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.command.remoteWL; + +public class Light { + String location = ""; + + public Light(String location) { + this.location = location; + } + + public void on() { + System.out.println(location + " light is on"); + } + + public void off() { + System.out.println(location + " light is off"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteControl.java new file mode 100755 index 0000000..807b0e6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteControl.java @@ -0,0 +1,43 @@ +package headfirst.designpatterns.command.remoteWL; + +// +// This is the invoker +// +public class RemoteControl { + Command[] onCommands; + Command[] offCommands; + + public RemoteControl() { + onCommands = new Command[7]; + offCommands = new Command[7]; + + for (int i = 0; i < 7; i++) { + onCommands[i] = () -> { }; + offCommands[i] = () -> { }; + } + } + + public void setCommand(int slot, Command onCommand, Command offCommand) { + onCommands[slot] = onCommand; + offCommands[slot] = offCommand; + } + + public void onButtonWasPushed(int slot) { + onCommands[slot].execute(); + } + + public void offButtonWasPushed(int slot) { + offCommands[slot].execute(); + } + + public String toString() { + StringBuffer stringBuff = new StringBuffer(); + stringBuff.append("\n------ Remote Control -------\n"); + for (int i = 0; i < onCommands.length; i++) { + stringBuff.append("[slot " + i + "] " + onCommands[i].getClass().getName() + + " " + offCommands[i].getClass().getName() + "\n"); + } + return stringBuff.toString(); + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteLoader.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteLoader.java new file mode 100755 index 0000000..bce86a6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteLoader.java @@ -0,0 +1,38 @@ +package headfirst.designpatterns.command.remoteWL; + +public class RemoteLoader { + + public static void main(String[] args) { + RemoteControl remoteControl = new RemoteControl(); + + Light livingRoomLight = new Light("Living Room"); + Light kitchenLight = new Light("Kitchen"); + CeilingFan ceilingFan= new CeilingFan("Living Room"); + GarageDoor garageDoor = new GarageDoor("Main house"); + Stereo stereo = new Stereo("Living Room"); + + remoteControl.setCommand(0, livingRoomLight::on, livingRoomLight::off); + remoteControl.setCommand(1, kitchenLight::on, kitchenLight::off); + remoteControl.setCommand(2, ceilingFan::high, ceilingFan::off); + + Command stereoOnWithCD = () -> { + stereo.on(); stereo.setCD(); stereo.setVolume(11); + }; + remoteControl.setCommand(3, stereoOnWithCD, stereo::off); + remoteControl.setCommand(4, garageDoor::up, garageDoor::down); + + System.out.println(remoteControl); + + remoteControl.onButtonWasPushed(0); + remoteControl.offButtonWasPushed(0); + remoteControl.onButtonWasPushed(1); + remoteControl.offButtonWasPushed(1); + remoteControl.onButtonWasPushed(2); + remoteControl.offButtonWasPushed(2); + remoteControl.onButtonWasPushed(3); + remoteControl.offButtonWasPushed(3); + remoteControl.onButtonWasPushed(4); + remoteControl.offButtonWasPushed(4); + remoteControl.onButtonWasPushed(5); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Stereo.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Stereo.java new file mode 100755 index 0000000..47f01b5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Stereo.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.command.remoteWL; + +public class Stereo { + String location; + + public Stereo(String location) { + this.location = location; + } + + public void on() { + System.out.println(location + " stereo is on"); + } + + public void off() { + System.out.println(location + " stereo is off"); + } + + public void setCD() { + System.out.println(location + " stereo is set for CD input"); + } + + public void setDVD() { + System.out.println(location + " stereo is set for DVD input"); + } + + public void setRadio() { + System.out.println(location + " stereo is set for Radio"); + } + + public void setVolume(int volume) { + // code to set the volume + // valid range: 1-11 (after all 11 is better than 10, right?) + System.out.println(location + " stereo volume set to " + volume); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/TV.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/TV.java new file mode 100755 index 0000000..b686f4f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/TV.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.command.remoteWL; + +public class TV { + String location; + int channel; + + public TV(String location) { + this.location = location; + } + + public void on() { + System.out.println("TV is on"); + } + + public void off() { + System.out.println("TV is off"); + } + + public void setInputChannel() { + this.channel = 3; + System.out.println("Channel is set for VCR"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Command.java new file mode 100755 index 0000000..b04b476 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Command.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.command.simpleremote; + +public interface Command { + public void execute(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoor.java new file mode 100755 index 0000000..1eab5b7 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoor.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.command.simpleremote; + +public class GarageDoor { + + public GarageDoor() { + } + + public void up() { + System.out.println("Garage Door is Open"); + } + + public void down() { + System.out.println("Garage Door is Closed"); + } + + public void stop() { + System.out.println("Garage Door is Stopped"); + } + + public void lightOn() { + System.out.println("Garage light is on"); + } + + public void lightOff() { + System.out.println("Garage light is off"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoorOpenCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoorOpenCommand.java new file mode 100755 index 0000000..12c32bd --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoorOpenCommand.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.command.simpleremote; + +public class GarageDoorOpenCommand implements Command { + GarageDoor garageDoor; + + public GarageDoorOpenCommand(GarageDoor garageDoor) { + this.garageDoor = garageDoor; + } + + public void execute() { + garageDoor.up(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Light.java new file mode 100755 index 0000000..93fcfab --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Light.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.command.simpleremote; + +public class Light { + + public Light() { + } + + public void on() { + System.out.println("Light is on"); + } + + public void off() { + System.out.println("Light is off"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOffCommand.java new file mode 100755 index 0000000..cb3bd21 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOffCommand.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.command.simpleremote; + +public class LightOffCommand implements Command { + Light light; + + public LightOffCommand(Light light) { + this.light = light; + } + + public void execute() { + light.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOnCommand.java new file mode 100755 index 0000000..b8ad69c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOnCommand.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.command.simpleremote; + +public class LightOnCommand implements Command { + Light light; + + public LightOnCommand(Light light) { + this.light = light; + } + + public void execute() { + light.on(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/RemoteControlTest.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/RemoteControlTest.java new file mode 100755 index 0000000..61d6a77 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/RemoteControlTest.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.command.simpleremote; + +public class RemoteControlTest { + public static void main(String[] args) { + SimpleRemoteControl remote = new SimpleRemoteControl(); + Light light = new Light(); + GarageDoor garageDoor = new GarageDoor(); + LightOnCommand lightOn = new LightOnCommand(light); + GarageDoorOpenCommand garageOpen = + new GarageDoorOpenCommand(garageDoor); + + remote.setCommand(lightOn); + remote.buttonWasPressed(); + remote.setCommand(garageOpen); + remote.buttonWasPressed(); + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/SimpleRemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/SimpleRemoteControl.java new file mode 100755 index 0000000..8206f50 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/SimpleRemoteControl.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.command.simpleremote; + +// +// This is the invoker +// +public class SimpleRemoteControl { + Command slot; + + public SimpleRemoteControl() {} + + public void setCommand(Command command) { + slot = command; + } + + public void buttonWasPressed() { + slot.execute(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Command.java new file mode 100755 index 0000000..fd87776 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Command.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.command.simpleremoteWL; + +@FunctionalInterface +public interface Command { + public void execute(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/GarageDoor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/GarageDoor.java new file mode 100755 index 0000000..4b102fc --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/GarageDoor.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.command.simpleremoteWL; + +public class GarageDoor { + + public GarageDoor() { + } + + public void up() { + System.out.println("Garage Door is Open"); + } + + public void down() { + System.out.println("Garage Door is Closed"); + } + + public void stop() { + System.out.println("Garage Door is Stopped"); + } + + public void lightOn() { + System.out.println("Garage light is on"); + } + + public void lightOff() { + System.out.println("Garage light is off"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Light.java new file mode 100755 index 0000000..ae3ac35 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Light.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.command.simpleremoteWL; + +public class Light { + + public Light() { + } + + public void on() { + System.out.println("Light is on"); + } + + public void off() { + System.out.println("Light is off"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/RemoteControlTest.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/RemoteControlTest.java new file mode 100755 index 0000000..f465af1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/RemoteControlTest.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.command.simpleremoteWL; + +public class RemoteControlTest { + public static void main(String[] args) { + SimpleRemoteControl remote = new SimpleRemoteControl(); + Light light = new Light(); + GarageDoor garageDoor = new GarageDoor(); + remote.setCommand(light::on); + remote.buttonWasPressed(); + remote.setCommand(garageDoor::up); + remote.buttonWasPressed(); + remote.setCommand(garageDoor::lightOn); + remote.buttonWasPressed(); + remote.setCommand(garageDoor::lightOff); + remote.buttonWasPressed(); + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/SimpleRemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/SimpleRemoteControl.java new file mode 100755 index 0000000..dac6f69 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/SimpleRemoteControl.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.command.simpleremoteWL; + +// +// This is the invoker +// +public class SimpleRemoteControl { + Command slot; + + public SimpleRemoteControl() {} + + public void setCommand(Command command) { + slot = command; + } + + public void buttonWasPressed() { + slot.execute(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/swing/SwingCommandExample.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/swing/SwingCommandExample.java new file mode 100755 index 0000000..3727978 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/swing/SwingCommandExample.java @@ -0,0 +1,71 @@ +package headfirst.designpatterns.command.swing; + +import java.awt.*; +import javax.swing.*; + +public class SwingCommandExample { + JFrame frame; + JPanel panel; + + public static void main(String[] args) { + SwingCommandExample example = new SwingCommandExample(); + example.go(); + } + + public void go() { + frame = new JFrame(); + panel = new JPanel(); + + // The GUI is the client + // The buttons are the invokers + JButton onButton = new JButton("On"); + JButton offButton = new JButton("Off"); + + // The light is the receiver + JLabel light = new JLabel("light"); + light.setOpaque(true); + light.setBackground(Color.LIGHT_GRAY); + + // The lambdas (ActionListeners) are the commands & actionPerformed() method implementation in one. + // We use addActionListener() to set the commands and code for the actionPerformed() method + // in the invokers (the buttons) + // The interface that all the commands (listeners) implement is the ActionListener interface. + // This interface has one method, actionPerformed(). + // This is equivalent to the execute() method. + // The buttons invoke the actionPerformed() method when they are clicked, which is the method + // we implemented in the command (the listeners) + // This method which executes the code to run on the receiver, the light. + onButton.addActionListener(event -> + light.setBackground(Color.YELLOW) + ); + offButton.addActionListener(event -> + light.setBackground(Color.LIGHT_GRAY) + ); + // Set frame properties + frame.setContentPane(panel); + panel.add(onButton); + panel.add(light); + panel.add(offButton); + + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setSize(300,300); + frame.setVisible(true); + } + + /* + * Remove these two inner classes to use lambda expressions instead. + * + class AngelListener implements ActionListener { + public void actionPerformed(ActionEvent event) { + System.out.println("Don't do it, you might regret it!"); + } + } + + class DevilListener implements ActionListener { + public void actionPerformed(ActionEvent event) { + System.out.println("Come on, do it!"); + } + } + */ + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFan.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFan.java new file mode 100755 index 0000000..6dd42b1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFan.java @@ -0,0 +1,39 @@ +package headfirst.designpatterns.command.undo; + +public class CeilingFan { + public static final int HIGH = 3; + public static final int MEDIUM = 2; + public static final int LOW = 1; + public static final int OFF = 0; + String location; + int speed; + + public CeilingFan(String location) { + this.location = location; + speed = OFF; + } + + public void high() { + speed = HIGH; + System.out.println(location + " ceiling fan is on high"); + } + + public void medium() { + speed = MEDIUM; + System.out.println(location + " ceiling fan is on medium"); + } + + public void low() { + speed = LOW; + System.out.println(location + " ceiling fan is on low"); + } + + public void off() { + speed = OFF; + System.out.println(location + " ceiling fan is off"); + } + + public int getSpeed() { + return speed; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanHighCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanHighCommand.java new file mode 100755 index 0000000..c2d61c0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanHighCommand.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.command.undo; + +public class CeilingFanHighCommand implements Command { + CeilingFan ceilingFan; + int prevSpeed; + + public CeilingFanHighCommand(CeilingFan ceilingFan) { + this.ceilingFan = ceilingFan; + } + + public void execute() { + prevSpeed = ceilingFan.getSpeed(); + ceilingFan.high(); + } + + public void undo() { + if (prevSpeed == CeilingFan.HIGH) { + ceilingFan.high(); + } else if (prevSpeed == CeilingFan.MEDIUM) { + ceilingFan.medium(); + } else if (prevSpeed == CeilingFan.LOW) { + ceilingFan.low(); + } else if (prevSpeed == CeilingFan.OFF) { + ceilingFan.off(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanLowCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanLowCommand.java new file mode 100755 index 0000000..85383c7 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanLowCommand.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.command.undo; + +public class CeilingFanLowCommand implements Command { + CeilingFan ceilingFan; + int prevSpeed; + + public CeilingFanLowCommand(CeilingFan ceilingFan) { + this.ceilingFan = ceilingFan; + } + + public void execute() { + prevSpeed = ceilingFan.getSpeed(); + ceilingFan.low(); + } + + public void undo() { + if (prevSpeed == CeilingFan.HIGH) { + ceilingFan.high(); + } else if (prevSpeed == CeilingFan.MEDIUM) { + ceilingFan.medium(); + } else if (prevSpeed == CeilingFan.LOW) { + ceilingFan.low(); + } else if (prevSpeed == CeilingFan.OFF) { + ceilingFan.off(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanMediumCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanMediumCommand.java new file mode 100755 index 0000000..51a1c3c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanMediumCommand.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.command.undo; + +public class CeilingFanMediumCommand implements Command { + CeilingFan ceilingFan; + int prevSpeed; + + public CeilingFanMediumCommand(CeilingFan ceilingFan) { + this.ceilingFan = ceilingFan; + } + + public void execute() { + prevSpeed = ceilingFan.getSpeed(); + ceilingFan.medium(); + } + + public void undo() { + if (prevSpeed == CeilingFan.HIGH) { + ceilingFan.high(); + } else if (prevSpeed == CeilingFan.MEDIUM) { + ceilingFan.medium(); + } else if (prevSpeed == CeilingFan.LOW) { + ceilingFan.low(); + } else if (prevSpeed == CeilingFan.OFF) { + ceilingFan.off(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanOffCommand.java new file mode 100755 index 0000000..577d109 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanOffCommand.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.command.undo; + +public class CeilingFanOffCommand implements Command { + CeilingFan ceilingFan; + int prevSpeed; + + public CeilingFanOffCommand(CeilingFan ceilingFan) { + this.ceilingFan = ceilingFan; + } + + public void execute() { + prevSpeed = ceilingFan.getSpeed(); + ceilingFan.off(); + } + + public void undo() { + if (prevSpeed == CeilingFan.HIGH) { + ceilingFan.high(); + } else if (prevSpeed == CeilingFan.MEDIUM) { + ceilingFan.medium(); + } else if (prevSpeed == CeilingFan.LOW) { + ceilingFan.low(); + } else if (prevSpeed == CeilingFan.OFF) { + ceilingFan.off(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Command.java new file mode 100755 index 0000000..23e1444 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Command.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.command.undo; + +public interface Command { + public void execute(); + public void undo(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOffCommand.java new file mode 100755 index 0000000..2f15474 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOffCommand.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.command.undo; + +public class DimmerLightOffCommand implements Command { + Light light; + int prevLevel; + + public DimmerLightOffCommand(Light light) { + this.light = light; + prevLevel = 100; + } + + public void execute() { + prevLevel = light.getLevel(); + light.off(); + } + + public void undo() { + light.dim(prevLevel); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOnCommand.java new file mode 100755 index 0000000..abcf08e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOnCommand.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.command.undo; + +public class DimmerLightOnCommand implements Command { + Light light; + int prevLevel; + + public DimmerLightOnCommand(Light light) { + this.light = light; + } + + public void execute() { + prevLevel = light.getLevel(); + light.dim(75); + } + + public void undo() { + light.dim(prevLevel); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Light.java new file mode 100755 index 0000000..278a60a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Light.java @@ -0,0 +1,34 @@ +package headfirst.designpatterns.command.undo; + +public class Light { + String location; + int level; + + public Light(String location) { + this.location = location; + } + + public void on() { + level = 100; + System.out.println("Light is on"); + } + + public void off() { + level = 0; + System.out.println("Light is off"); + } + + public void dim(int level) { + this.level = level; + if (level == 0) { + off(); + } + else { + System.out.println("Light is dimmed to " + level + "%"); + } + } + + public int getLevel() { + return level; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOffCommand.java new file mode 100755 index 0000000..dbcf415 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOffCommand.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.command.undo; + +public class LightOffCommand implements Command { + Light light; + int level; + public LightOffCommand(Light light) { + this.light = light; + } + + public void execute() { + level = light.getLevel(); + light.off(); + } + + public void undo() { + light.dim(level); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOnCommand.java new file mode 100755 index 0000000..ac07ff1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOnCommand.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.command.undo; + +public class LightOnCommand implements Command { + Light light; + int level; + public LightOnCommand(Light light) { + this.light = light; + } + + public void execute() { + level = light.getLevel(); + light.on(); + } + + public void undo() { + light.dim(level); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/NoCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/NoCommand.java new file mode 100755 index 0000000..2d2e01e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/NoCommand.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.command.undo; + +public class NoCommand implements Command { + public void execute() { } + public void undo() { } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteControlWithUndo.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteControlWithUndo.java new file mode 100755 index 0000000..964ce03 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteControlWithUndo.java @@ -0,0 +1,52 @@ +package headfirst.designpatterns.command.undo; + +// +// This is the invoker +// +public class RemoteControlWithUndo { + Command[] onCommands; + Command[] offCommands; + Command undoCommand; + + public RemoteControlWithUndo() { + onCommands = new Command[7]; + offCommands = new Command[7]; + + Command noCommand = new NoCommand(); + for(int i=0;i<7;i++) { + onCommands[i] = noCommand; + offCommands[i] = noCommand; + } + undoCommand = noCommand; + } + + public void setCommand(int slot, Command onCommand, Command offCommand) { + onCommands[slot] = onCommand; + offCommands[slot] = offCommand; + } + + public void onButtonWasPushed(int slot) { + onCommands[slot].execute(); + undoCommand = onCommands[slot]; + } + + public void offButtonWasPushed(int slot) { + offCommands[slot].execute(); + undoCommand = offCommands[slot]; + } + + public void undoButtonWasPushed() { + undoCommand.undo(); + } + + public String toString() { + StringBuffer stringBuff = new StringBuffer(); + stringBuff.append("\n------ Remote Control -------\n"); + for (int i = 0; i < onCommands.length; i++) { + stringBuff.append("[slot " + i + "] " + onCommands[i].getClass().getName() + + " " + offCommands[i].getClass().getName() + "\n"); + } + stringBuff.append("[undo] " + undoCommand.getClass().getName() + "\n"); + return stringBuff.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteLoader.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteLoader.java new file mode 100755 index 0000000..a484c3f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteLoader.java @@ -0,0 +1,47 @@ +package headfirst.designpatterns.command.undo; + +public class RemoteLoader { + + public static void main(String[] args) { + RemoteControlWithUndo remoteControl = new RemoteControlWithUndo(); + + Light livingRoomLight = new Light("Living Room"); + + LightOnCommand livingRoomLightOn = + new LightOnCommand(livingRoomLight); + LightOffCommand livingRoomLightOff = + new LightOffCommand(livingRoomLight); + + remoteControl.setCommand(0, livingRoomLightOn, livingRoomLightOff); + + remoteControl.onButtonWasPushed(0); + remoteControl.offButtonWasPushed(0); + System.out.println(remoteControl); + remoteControl.undoButtonWasPushed(); + remoteControl.offButtonWasPushed(0); + remoteControl.onButtonWasPushed(0); + System.out.println(remoteControl); + remoteControl.undoButtonWasPushed(); + + CeilingFan ceilingFan = new CeilingFan("Living Room"); + + CeilingFanMediumCommand ceilingFanMedium = + new CeilingFanMediumCommand(ceilingFan); + CeilingFanHighCommand ceilingFanHigh = + new CeilingFanHighCommand(ceilingFan); + CeilingFanOffCommand ceilingFanOff = + new CeilingFanOffCommand(ceilingFan); + + remoteControl.setCommand(0, ceilingFanMedium, ceilingFanOff); + remoteControl.setCommand(1, ceilingFanHigh, ceilingFanOff); + + remoteControl.onButtonWasPushed(0); + remoteControl.offButtonWasPushed(0); + System.out.println(remoteControl); + remoteControl.undoButtonWasPushed(); + + remoteControl.onButtonWasPushed(1); + System.out.println(remoteControl); + remoteControl.undoButtonWasPushed(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Menu.java new file mode 100755 index 0000000..d658d9b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Menu.java @@ -0,0 +1,48 @@ +package headfirst.designpatterns.composite.menu; + +import java.util.Iterator; +import java.util.ArrayList; + +public class Menu extends MenuComponent { + ArrayList menuComponents = new ArrayList(); + String name; + String description; + + public Menu(String name, String description) { + this.name = name; + this.description = description; + } + + public void add(MenuComponent menuComponent) { + menuComponents.add(menuComponent); + } + + public void remove(MenuComponent menuComponent) { + menuComponents.remove(menuComponent); + } + + public MenuComponent getChild(int i) { + return (MenuComponent)menuComponents.get(i); + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public void print() { + System.out.print("\n" + getName()); + System.out.println(", " + getDescription()); + System.out.println("---------------------"); + + Iterator iterator = menuComponents.iterator(); + while (iterator.hasNext()) { + MenuComponent menuComponent = + (MenuComponent)iterator.next(); + menuComponent.print(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuComponent.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuComponent.java new file mode 100755 index 0000000..f90748d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuComponent.java @@ -0,0 +1,31 @@ +package headfirst.designpatterns.composite.menu; + +public abstract class MenuComponent { + + public void add(MenuComponent menuComponent) { + throw new UnsupportedOperationException(); + } + public void remove(MenuComponent menuComponent) { + throw new UnsupportedOperationException(); + } + public MenuComponent getChild(int i) { + throw new UnsupportedOperationException(); + } + + public String getName() { + throw new UnsupportedOperationException(); + } + public String getDescription() { + throw new UnsupportedOperationException(); + } + public double getPrice() { + throw new UnsupportedOperationException(); + } + public boolean isVegetarian() { + throw new UnsupportedOperationException(); + } + + public void print() { + throw new UnsupportedOperationException(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuItem.java new file mode 100755 index 0000000..47cdb9e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuItem.java @@ -0,0 +1,44 @@ +package headfirst.designpatterns.composite.menu; + +public class MenuItem extends MenuComponent { + String name; + String description; + boolean vegetarian; + double price; + + public MenuItem(String name, + String description, + boolean vegetarian, + double price) + { + this.name = name; + this.description = description; + this.vegetarian = vegetarian; + this.price = price; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public double getPrice() { + return price; + } + + public boolean isVegetarian() { + return vegetarian; + } + + public void print() { + System.out.print(" " + getName()); + if (isVegetarian()) { + System.out.print("(v)"); + } + System.out.println(", " + getPrice()); + System.out.println(" -- " + getDescription()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuTestDrive.java new file mode 100755 index 0000000..baa30c9 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuTestDrive.java @@ -0,0 +1,131 @@ +package headfirst.designpatterns.composite.menu; + +public class MenuTestDrive { + public static void main(String args[]) { + MenuComponent pancakeHouseMenu = + new Menu("PANCAKE HOUSE MENU", "Breakfast"); + MenuComponent dinerMenu = + new Menu("DINER MENU", "Lunch"); + MenuComponent cafeMenu = + new Menu("CAFE MENU", "Dinner"); + MenuComponent dessertMenu = + new Menu("DESSERT MENU", "Dessert of course!"); + MenuComponent coffeeMenu = new Menu("COFFEE MENU", "Stuff to go with your afternoon coffee"); + + MenuComponent allMenus = new Menu("ALL MENUS", "All menus combined"); + + allMenus.add(pancakeHouseMenu); + allMenus.add(dinerMenu); + allMenus.add(cafeMenu); + + pancakeHouseMenu.add(new MenuItem( + "K&B's Pancake Breakfast", + "Pancakes with scrambled eggs and toast", + true, + 2.99)); + pancakeHouseMenu.add(new MenuItem( + "Regular Pancake Breakfast", + "Pancakes with fried eggs, sausage", + false, + 2.99)); + pancakeHouseMenu.add(new MenuItem( + "Blueberry Pancakes", + "Pancakes made with fresh blueberries, and blueberry syrup", + true, + 3.49)); + pancakeHouseMenu.add(new MenuItem( + "Waffles", + "Waffles with your choice of blueberries or strawberries", + true, + 3.59)); + + dinerMenu.add(new MenuItem( + "Vegetarian BLT", + "(Fakin') Bacon with lettuce & tomato on whole wheat", + true, + 2.99)); + dinerMenu.add(new MenuItem( + "BLT", + "Bacon with lettuce & tomato on whole wheat", + false, + 2.99)); + dinerMenu.add(new MenuItem( + "Soup of the day", + "A bowl of the soup of the day, with a side of potato salad", + false, + 3.29)); + dinerMenu.add(new MenuItem( + "Hot Dog", + "A hot dog, with saurkraut, relish, onions, topped with cheese", + false, + 3.05)); + dinerMenu.add(new MenuItem( + "Steamed Veggies and Brown Rice", + "Steamed vegetables over brown rice", + true, + 3.99)); + + dinerMenu.add(new MenuItem( + "Pasta", + "Spaghetti with marinara sauce, and a slice of sourdough bread", + true, + 3.89)); + + dinerMenu.add(dessertMenu); + + dessertMenu.add(new MenuItem( + "Apple Pie", + "Apple pie with a flakey crust, topped with vanilla icecream", + true, + 1.59)); + + dessertMenu.add(new MenuItem( + "Cheesecake", + "Creamy New York cheesecake, with a chocolate graham crust", + true, + 1.99)); + dessertMenu.add(new MenuItem( + "Sorbet", + "A scoop of raspberry and a scoop of lime", + true, + 1.89)); + + cafeMenu.add(new MenuItem( + "Veggie Burger and Air Fries", + "Veggie burger on a whole wheat bun, lettuce, tomato, and fries", + true, + 3.99)); + cafeMenu.add(new MenuItem( + "Soup of the day", + "A cup of the soup of the day, with a side salad", + false, + 3.69)); + cafeMenu.add(new MenuItem( + "Burrito", + "A large burrito, with whole pinto beans, salsa, guacamole", + true, + 4.29)); + + cafeMenu.add(coffeeMenu); + + coffeeMenu.add(new MenuItem( + "Coffee Cake", + "Crumbly cake topped with cinnamon and walnuts", + true, + 1.59)); + coffeeMenu.add(new MenuItem( + "Bagel", + "Flavors include sesame, poppyseed, cinnamon raisin, pumpkin", + false, + 0.69)); + coffeeMenu.add(new MenuItem( + "Biscotti", + "Three almond or hazelnut biscotti cookies", + true, + 0.89)); + + Waitress waitress = new Waitress(allMenus); + + waitress.printMenu(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Waitress.java new file mode 100755 index 0000000..5b1b445 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Waitress.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.composite.menu; + +public class Waitress { + MenuComponent allMenus; + + public Waitress(MenuComponent allMenus) { + this.allMenus = allMenus; + } + + public void printMenu() { + allMenus.print(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/CompositeIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/CompositeIterator.java new file mode 100755 index 0000000..255bf66 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/CompositeIterator.java @@ -0,0 +1,49 @@ +package headfirst.designpatterns.composite.menuiterator; + +import java.util.*; + +public class CompositeIterator implements Iterator { + Stack> stack = new Stack>(); + + public CompositeIterator(Iterator iterator) { + stack.push(iterator); + } + + public MenuComponent next() { + if (hasNext()) { + Iterator iterator = stack.peek(); + MenuComponent component = iterator.next(); + stack.push(component.createIterator()); + return component; + } else { + return null; + } + } + + public boolean hasNext() { + if (stack.empty()) { + return false; + } else { + Iterator iterator = stack.peek(); + if (!iterator.hasNext()) { + stack.pop(); + return hasNext(); + } else { + return true; + } + } + } + + /* + * No longer needed as of Java 8 + * + * (non-Javadoc) + * @see java.util.Iterator#remove() + * + public void remove() { + throw new UnsupportedOperationException(); + } + */ +} + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Menu.java new file mode 100755 index 0000000..9a07bec --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Menu.java @@ -0,0 +1,57 @@ +package headfirst.designpatterns.composite.menuiterator; + +import java.util.Iterator; +import java.util.ArrayList; + +public class Menu extends MenuComponent { + Iterator iterator = null; + ArrayList menuComponents = new ArrayList(); + String name; + String description; + + public Menu(String name, String description) { + this.name = name; + this.description = description; + } + + public void add(MenuComponent menuComponent) { + menuComponents.add(menuComponent); + } + + public void remove(MenuComponent menuComponent) { + menuComponents.remove(menuComponent); + } + + public MenuComponent getChild(int i) { + return menuComponents.get(i); + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + + public Iterator createIterator() { + if (iterator == null) { + iterator = new CompositeIterator(menuComponents.iterator()); + } + return iterator; + } + + + public void print() { + System.out.print("\n" + getName()); + System.out.println(", " + getDescription()); + System.out.println("---------------------"); + + Iterator iterator = menuComponents.iterator(); + while (iterator.hasNext()) { + MenuComponent menuComponent = iterator.next(); + menuComponent.print(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuComponent.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuComponent.java new file mode 100755 index 0000000..8b19342 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuComponent.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.composite.menuiterator; + +import java.util.*; + +public abstract class MenuComponent { + + public void add(MenuComponent menuComponent) { + throw new UnsupportedOperationException(); + } + public void remove(MenuComponent menuComponent) { + throw new UnsupportedOperationException(); + } + public MenuComponent getChild(int i) { + throw new UnsupportedOperationException(); + } + + public String getName() { + throw new UnsupportedOperationException(); + } + public String getDescription() { + throw new UnsupportedOperationException(); + } + public double getPrice() { + throw new UnsupportedOperationException(); + } + public boolean isVegetarian() { + throw new UnsupportedOperationException(); + } + + public abstract Iterator createIterator(); + + public void print() { + throw new UnsupportedOperationException(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuItem.java new file mode 100755 index 0000000..fb97b4a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuItem.java @@ -0,0 +1,53 @@ +package headfirst.designpatterns.composite.menuiterator; + +import java.util.Iterator; + +public class MenuItem extends MenuComponent { + + String name; + String description; + boolean vegetarian; + double price; + + public MenuItem(String name, + String description, + boolean vegetarian, + double price) + { + this.name = name; + this.description = description; + this.vegetarian = vegetarian; + this.price = price; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public double getPrice() { + return price; + } + + public boolean isVegetarian() { + return vegetarian; + } + + public Iterator createIterator() { + return new NullIterator(); + } + + public void print() { + System.out.print(" " + getName()); + if (isVegetarian()) { + System.out.print("(v)"); + } + System.out.println(", " + getPrice()); + System.out.println(" -- " + getDescription()); + } + +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuTestDrive.java new file mode 100755 index 0000000..6c2fe0a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuTestDrive.java @@ -0,0 +1,114 @@ +package headfirst.designpatterns.composite.menuiterator; + +public class MenuTestDrive { + public static void main(String args[]) { + + MenuComponent pancakeHouseMenu = + new Menu("PANCAKE HOUSE MENU", "Breakfast"); + MenuComponent dinerMenu = + new Menu("DINER MENU", "Lunch"); + MenuComponent cafeMenu = + new Menu("CAFE MENU", "Dinner"); + MenuComponent dessertMenu = + new Menu("DESSERT MENU", "Dessert of course!"); + + MenuComponent allMenus = new Menu("ALL MENUS", "All menus combined"); + + allMenus.add(pancakeHouseMenu); + allMenus.add(dinerMenu); + allMenus.add(cafeMenu); + + pancakeHouseMenu.add(new MenuItem( + "K&B's Pancake Breakfast", + "Pancakes with scrambled eggs and toast", + true, + 2.99)); + pancakeHouseMenu.add(new MenuItem( + "Regular Pancake Breakfast", + "Pancakes with fried eggs, sausage", + false, + 2.99)); + pancakeHouseMenu.add(new MenuItem( + "Blueberry Pancakes", + "Pancakes made with fresh blueberries and blueberry syrup", + true, + 3.49)); + pancakeHouseMenu.add(new MenuItem( + "Waffles", + "Waffles with your choice of blueberries or strawberries", + true, + 3.59)); + + dinerMenu.add(new MenuItem( + "Vegetarian BLT", + "(Fakin') Bacon with lettuce & tomato on whole wheat", + true, + 2.99)); + dinerMenu.add(new MenuItem( + "BLT", + "Bacon with lettuce & tomato on whole wheat", + false, + 2.99)); + dinerMenu.add(new MenuItem( + "Soup of the day", + "A bowl of the soup of the day, with a side of potato salad", + false, + 3.29)); + dinerMenu.add(new MenuItem( + "Hot Dog", + "A hot dog, with saurkraut, relish, onions, topped with cheese", + false, + 3.05)); + dinerMenu.add(new MenuItem( + "Steamed Veggies and Brown Rice", + "A medly of steamed vegetables over brown rice", + true, + 3.99)); + + dinerMenu.add(new MenuItem( + "Pasta", + "Spaghetti with marinara sauce, and a slice of sourdough bread", + true, + 3.89)); + + dinerMenu.add(dessertMenu); + + dessertMenu.add(new MenuItem( + "Apple Pie", + "Apple pie with a flakey crust, topped with vanilla icecream", + true, + 1.59)); + dessertMenu.add(new MenuItem( + "Cheesecake", + "Creamy New York cheesecake, with a chocolate graham crust", + true, + 1.99)); + dessertMenu.add(new MenuItem( + "Sorbet", + "A scoop of raspberry and a scoop of lime", + true, + 1.89)); + + cafeMenu.add(new MenuItem( + "Veggie Burger and Air Fries", + "Veggie burger on a whole wheat bun, lettuce, tomato, and fries", + true, + 3.99)); + cafeMenu.add(new MenuItem( + "Soup of the day", + "A cup of the soup of the day, with a side salad", + false, + 3.69)); + cafeMenu.add(new MenuItem( + "Burrito", + "A large burrito, with whole pinto beans, salsa, guacamole", + true, + 4.29)); + + Waitress waitress = new Waitress(allMenus); + + waitress.printVegetarianMenu(); + //waitress.printMenu(); + + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/NullIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/NullIterator.java new file mode 100755 index 0000000..77e9c22 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/NullIterator.java @@ -0,0 +1,25 @@ +package headfirst.designpatterns.composite.menuiterator; + +import java.util.Iterator; + +public class NullIterator implements Iterator { + + public MenuComponent next() { + return null; + } + + public boolean hasNext() { + return false; + } + + /* + * No longer needed as of Java 8 + * + * (non-Javadoc) + * @see java.util.Iterator#remove() + * + public void remove() { + throw new UnsupportedOperationException(); + } + */ +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Waitress.java new file mode 100755 index 0000000..dae2ec0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Waitress.java @@ -0,0 +1,29 @@ +package headfirst.designpatterns.composite.menuiterator; + +import java.util.Iterator; + +public class Waitress { + MenuComponent allMenus; + + public Waitress(MenuComponent allMenus) { + this.allMenus = allMenus; + } + + public void printMenu() { + allMenus.print(); + } + + public void printVegetarianMenu() { + Iterator iterator = allMenus.createIterator(); + + System.out.println("\nVEGETARIAN MENU\n----"); + while (iterator.hasNext()) { + MenuComponent menuComponent = iterator.next(); + try { + if (menuComponent.isVegetarian()) { + menuComponent.print(); + } + } catch (UnsupportedOperationException e) {} + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/InputTest.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/InputTest.java new file mode 100755 index 0000000..bec0c80 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/InputTest.java @@ -0,0 +1,36 @@ +package headfirst.designpatterns.decorator.io; + +import java.io.*; + +public class InputTest { + public static void main(String[] args) throws IOException { + int c; + InputStream in = null; + try { + in = + new LowerCaseInputStream( + new BufferedInputStream( + new FileInputStream("test.txt"))); + + while((c = in.read()) >= 0) { + System.out.print((char)c); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (in != null) { in.close(); } + } + System.out.println(); + try (InputStream in2 = + new LowerCaseInputStream( + new BufferedInputStream( + new FileInputStream("test.txt")))) + { + while((c = in2.read()) >= 0) { + System.out.print((char)c); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/LowerCaseInputStream.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/LowerCaseInputStream.java new file mode 100755 index 0000000..3a3e03b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/LowerCaseInputStream.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.decorator.io; + +import java.io.*; + +public class LowerCaseInputStream extends FilterInputStream { + + public LowerCaseInputStream(InputStream in) { + super(in); + } + + public int read() throws IOException { + int c = in.read(); + return (c == -1 ? c : Character.toLowerCase((char)c)); + } + + public int read(byte[] b, int offset, int len) throws IOException { + int result = in.read(b, offset, len); + for (int i = offset; i < offset+result; i++) { + b[i] = (byte)Character.toLowerCase((char)b[i]); + } + return result; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Cheese.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Cheese.java new file mode 100755 index 0000000..b1e4a54 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Cheese.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.decorator.pizza; + +public class Cheese extends ToppingDecorator { + + + public Cheese(Pizza pizza) { + this.pizza = pizza; + } + + public String getDescription() { + return pizza.getDescription() + ", Cheese"; + } + + public double cost() { + return pizza.cost(); // cheese is free + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Olives.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Olives.java new file mode 100755 index 0000000..0c37888 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Olives.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.decorator.pizza; + +public class Olives extends ToppingDecorator { + + + public Olives(Pizza pizza) { + this.pizza = pizza; + } + + public String getDescription() { + return pizza.getDescription() + ", Olives"; + } + + public double cost() { + return pizza.cost() + .30; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Pizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Pizza.java new file mode 100755 index 0000000..4d2fb8f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Pizza.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.decorator.pizza; + +public abstract class Pizza { + String description = "Basic Pizza"; + + public String getDescription() { + return description; + } + + public abstract double cost(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/PizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/PizzaStore.java new file mode 100755 index 0000000..847fc2c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/PizzaStore.java @@ -0,0 +1,14 @@ +package headfirst.designpatterns.decorator.pizza; + +public class PizzaStore { + + public static void main(String args[]) { + Pizza pizza = new ThincrustPizza(); + Pizza cheesePizza = new Cheese(pizza); + Pizza greekPizza = new Olives(cheesePizza); + + System.out.println(greekPizza.getDescription() + + " $" + greekPizza.cost()); + + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThickcrustPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThickcrustPizza.java new file mode 100755 index 0000000..d12c2cd --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThickcrustPizza.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.decorator.pizza; + +public class ThickcrustPizza extends Pizza { + + public ThickcrustPizza() { + description = "Thick crust pizza, with tomato sauce"; + } + + public double cost() { + return 7.99; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThincrustPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThincrustPizza.java new file mode 100755 index 0000000..402d4bf --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThincrustPizza.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.decorator.pizza; + +public class ThincrustPizza extends Pizza { + + public ThincrustPizza() { + description = "Thin crust pizza, with tomato sauce"; + } + + public double cost() { + return 7.99; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ToppingDecorator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ToppingDecorator.java new file mode 100755 index 0000000..a7e95eb --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ToppingDecorator.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.decorator.pizza; + +public abstract class ToppingDecorator extends Pizza { + Pizza pizza; + public abstract String getDescription(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Beverage.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Beverage.java new file mode 100755 index 0000000..8c77fb8 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Beverage.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public abstract class Beverage { + String description = "Unknown Beverage"; + + public String getDescription() { + return description; + } + + public abstract double cost(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/CondimentDecorator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/CondimentDecorator.java new file mode 100755 index 0000000..30d1025 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/CondimentDecorator.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public abstract class CondimentDecorator extends Beverage { + Beverage beverage; + public abstract String getDescription(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/DarkRoast.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/DarkRoast.java new file mode 100755 index 0000000..f952683 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/DarkRoast.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public class DarkRoast extends Beverage { + public DarkRoast() { + description = "Dark Roast Coffee"; + } + + public double cost() { + return .99; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Decaf.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Decaf.java new file mode 100755 index 0000000..d637b36 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Decaf.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public class Decaf extends Beverage { + public Decaf() { + description = "Decaf Coffee"; + } + + public double cost() { + return 1.05; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Espresso.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Espresso.java new file mode 100755 index 0000000..592c0b6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Espresso.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public class Espresso extends Beverage { + + public Espresso() { + description = "Espresso"; + } + + public double cost() { + return 1.99; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/HouseBlend.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/HouseBlend.java new file mode 100755 index 0000000..34de0d1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/HouseBlend.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public class HouseBlend extends Beverage { + public HouseBlend() { + description = "House Blend Coffee"; + } + + public double cost() { + return .89; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Milk.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Milk.java new file mode 100755 index 0000000..17e1bef --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Milk.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public class Milk extends CondimentDecorator { + public Milk(Beverage beverage) { + this.beverage = beverage; + } + + public String getDescription() { + return beverage.getDescription() + ", Milk"; + } + + public double cost() { + return .10 + beverage.cost(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Mocha.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Mocha.java new file mode 100755 index 0000000..1df34ae --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Mocha.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public class Mocha extends CondimentDecorator { + public Mocha(Beverage beverage) { + this.beverage = beverage; + } + + public String getDescription() { + return beverage.getDescription() + ", Mocha"; + } + + public double cost() { + return .20 + beverage.cost(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Soy.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Soy.java new file mode 100755 index 0000000..ea6a92c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Soy.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public class Soy extends CondimentDecorator { + public Soy(Beverage beverage) { + this.beverage = beverage; + } + + public String getDescription() { + return beverage.getDescription() + ", Soy"; + } + + public double cost() { + return .15 + beverage.cost(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/StarbuzzCoffee.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/StarbuzzCoffee.java new file mode 100755 index 0000000..7d2fe33 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/StarbuzzCoffee.java @@ -0,0 +1,24 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public class StarbuzzCoffee { + + public static void main(String args[]) { + Beverage beverage = new Espresso(); + System.out.println(beverage.getDescription() + + " $" + beverage.cost()); + + Beverage beverage2 = new DarkRoast(); + beverage2 = new Mocha(beverage2); + beverage2 = new Mocha(beverage2); + beverage2 = new Whip(beverage2); + System.out.println(beverage2.getDescription() + + " $" + beverage2.cost()); + + Beverage beverage3 = new HouseBlend(); + beverage3 = new Soy(beverage3); + beverage3 = new Mocha(beverage3); + beverage3 = new Whip(beverage3); + System.out.println(beverage3.getDescription() + + " $" + beverage3.cost()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Whip.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Whip.java new file mode 100755 index 0000000..318c187 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Whip.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.decorator.starbuzz; + +public class Whip extends CondimentDecorator { + public Whip(Beverage beverage) { + this.beverage = beverage; + } + + public String getDescription() { + return beverage.getDescription() + ", Whip"; + } + + public double cost() { + return .10 + beverage.cost(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Beverage.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Beverage.java new file mode 100755 index 0000000..989f23c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Beverage.java @@ -0,0 +1,21 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +public abstract class Beverage { + public enum Size { TALL, GRANDE, VENTI }; + Size size = Size.TALL; + String description = "Unknown Beverage"; + + public String getDescription() { + return description; + } + + public void setSize(Size size) { + this.size = size; + } + + public Size getSize() { + return this.size; + } + + public abstract double cost(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/CondimentDecorator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/CondimentDecorator.java new file mode 100755 index 0000000..ddc96fb --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/CondimentDecorator.java @@ -0,0 +1,10 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +public abstract class CondimentDecorator extends Beverage { + public Beverage beverage; + public abstract String getDescription(); + + public Size getSize() { + return beverage.getSize(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/DarkRoast.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/DarkRoast.java new file mode 100755 index 0000000..a6e9afe --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/DarkRoast.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +public class DarkRoast extends Beverage { + public DarkRoast() { + description = "Dark Roast Coffee"; + } + + public double cost() { + return .99; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Decaf.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Decaf.java new file mode 100755 index 0000000..053d4ee --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Decaf.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +public class Decaf extends Beverage { + public Decaf() { + description = "Decaf Coffee"; + } + + public double cost() { + return 1.05; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Espresso.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Espresso.java new file mode 100755 index 0000000..2807569 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Espresso.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +public class Espresso extends Beverage { + + public Espresso() { + description = "Espresso"; + } + + public double cost() { + return 1.99; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/HouseBlend.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/HouseBlend.java new file mode 100755 index 0000000..fa7044b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/HouseBlend.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +public class HouseBlend extends Beverage { + public HouseBlend() { + description = "House Blend Coffee"; + } + + public double cost() { + return .89; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Milk.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Milk.java new file mode 100755 index 0000000..6414ea5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Milk.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +public class Milk extends CondimentDecorator { + public Milk(Beverage beverage) { + this.beverage = beverage; + } + + public String getDescription() { + return beverage.getDescription() + ", Milk"; + } + + public double cost() { + return beverage.cost() + .10; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Mocha.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Mocha.java new file mode 100755 index 0000000..4c70abd --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Mocha.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +public class Mocha extends CondimentDecorator { + public Mocha(Beverage beverage) { + this.beverage = beverage; + } + + public String getDescription() { + return beverage.getDescription() + ", Mocha"; + } + + public double cost() { + return beverage.cost() + .20; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Soy.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Soy.java new file mode 100755 index 0000000..ce3d58a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Soy.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +public class Soy extends CondimentDecorator { + public Soy(Beverage beverage) { + this.beverage = beverage; + } + + public String getDescription() { + return beverage.getDescription() + ", Soy"; + } + + public double cost() { + double cost = beverage.cost(); + if (beverage.getSize() == Size.TALL) { + cost += .10; + } else if (beverage.getSize() == Size.GRANDE) { + cost += .15; + } else if (beverage.getSize() == Size.VENTI) { + cost += .20; + } + return cost; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/StarbuzzCoffee.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/StarbuzzCoffee.java new file mode 100755 index 0000000..34bfa7b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/StarbuzzCoffee.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +import headfirst.designpatterns.decorator.starbuzzWithSizes.Beverage.Size; + +public class StarbuzzCoffee { + + public static void main(String args[]) { + Beverage beverage = new Espresso(); + System.out.println(beverage.getDescription() + + " $" + String.format("%.2f", beverage.cost())); + + Beverage beverage2 = new DarkRoast(); + beverage2 = new Mocha(beverage2); + beverage2 = new Mocha(beverage2); + beverage2 = new Whip(beverage2); + System.out.println(beverage2.getDescription() + + " $" + String.format("%.2f", beverage2.cost())); + + Beverage beverage3 = new HouseBlend(); + beverage3.setSize(Size.VENTI); + beverage3 = new Soy(beverage3); + beverage3 = new Mocha(beverage3); + beverage3 = new Whip(beverage3); + System.out.println(beverage3.getDescription() + + " $" + String.format("%.2f", beverage3.cost())); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Whip.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Whip.java new file mode 100755 index 0000000..890e10d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Whip.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.decorator.starbuzzWithSizes; + +public class Whip extends CondimentDecorator { + public Whip(Beverage beverage) { + this.beverage = beverage; + } + + public String getDescription() { + return beverage.getDescription() + ", Whip"; + } + + public double cost() { + return beverage.cost() + .10; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Duck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Duck.java new file mode 100755 index 0000000..6226ab2 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Duck.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.ducks; + +public interface Duck { + public void quack(); + public void fly(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckAdapter.java new file mode 100755 index 0000000..312acd4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckAdapter.java @@ -0,0 +1,22 @@ +package headfirst.designpatterns.ducks; +import java.util.Random; + +public class DuckAdapter implements Turkey { + Duck duck; + Random rand; + + public DuckAdapter(Duck duck) { + this.duck = duck; + rand = new Random(); + } + + public void gobble() { + duck.quack(); + } + + public void fly() { + if (rand.nextInt(5) == 0) { + duck.fly(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckTestDrive.java new file mode 100755 index 0000000..356bac7 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckTestDrive.java @@ -0,0 +1,25 @@ +package headfirst.designpatterns.ducks; + +public class DuckTestDrive { + public static void main(String[] args) { + MallardDuck duck = new MallardDuck(); + + WildTurkey turkey = new WildTurkey(); + Duck turkeyAdapter = new TurkeyAdapter(turkey); + + System.out.println("The Turkey says..."); + turkey.gobble(); + turkey.fly(); + + System.out.println("\nThe Duck says..."); + testDuck(duck); + + System.out.println("\nThe TurkeyAdapter says..."); + testDuck(turkeyAdapter); + } + + static void testDuck(Duck duck) { + duck.quack(); + duck.fly(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/MallardDuck.java new file mode 100755 index 0000000..f27b5df --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/MallardDuck.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.ducks; + +public class MallardDuck implements Duck { + public void quack() { + System.out.println("Quack"); + } + + public void fly() { + System.out.println("I'm flying"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Turkey.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Turkey.java new file mode 100755 index 0000000..e486899 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Turkey.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.ducks; + +public interface Turkey { + public void gobble(); + public void fly(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyAdapter.java new file mode 100755 index 0000000..2f62e42 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyAdapter.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.ducks; + +public class TurkeyAdapter implements Duck { + Turkey turkey; + + public TurkeyAdapter(Turkey turkey) { + this.turkey = turkey; + } + + public void quack() { + turkey.gobble(); + } + + public void fly() { + for(int i=0; i < 5; i++) { + turkey.fly(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyTestDrive.java new file mode 100755 index 0000000..301f04a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyTestDrive.java @@ -0,0 +1,14 @@ +package headfirst.designpatterns.ducks; + +public class TurkeyTestDrive { + public static void main(String[] args) { + MallardDuck duck = new MallardDuck(); + Turkey duckAdapter = new DuckAdapter(duck); + + for(int i=0;i<10;i++) { + System.out.println("The DuckAdapter says..."); + duckAdapter.gobble(); + duckAdapter.fly(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/WildTurkey.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/WildTurkey.java new file mode 100755 index 0000000..9a5cf01 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/WildTurkey.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.ducks; + +public class WildTurkey implements Turkey { + public void gobble() { + System.out.println("Gobble gobble"); + } + + public void fly() { + System.out.println("I'm flying a short distance"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Amplifier.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Amplifier.java new file mode 100755 index 0000000..a320147 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Amplifier.java @@ -0,0 +1,45 @@ +package headfirst.designpatterns.facade.hometheater; + +public class Amplifier { + String description; + Tuner tuner; + StreamingPlayer player; + + public Amplifier(String description) { + this.description = description; + } + + public void on() { + System.out.println(description + " on"); + } + + public void off() { + System.out.println(description + " off"); + } + + public void setStereoSound() { + System.out.println(description + " stereo mode on"); + } + + public void setSurroundSound() { + System.out.println(description + " surround sound on (5 speakers, 1 subwoofer)"); + } + + public void setVolume(int level) { + System.out.println(description + " setting volume to " + level); + } + + public void setTuner(Tuner tuner) { + System.out.println(description + " setting tuner to " + player); + this.tuner = tuner; + } + + public void setStreamingPlayer(StreamingPlayer player) { + System.out.println(description + " setting Streaming player to " + player); + this.player = player; + } + + public String toString() { + return description; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/CdPlayer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/CdPlayer.java new file mode 100755 index 0000000..5cf810e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/CdPlayer.java @@ -0,0 +1,55 @@ +package headfirst.designpatterns.facade.hometheater; + +public class CdPlayer { + String description; + int currentTrack; + Amplifier amplifier; + String title; + + public CdPlayer(String description, Amplifier amplifier) { + this.description = description; + this.amplifier = amplifier; + } + + public void on() { + System.out.println(description + " on"); + } + + public void off() { + System.out.println(description + " off"); + } + + public void eject() { + title = null; + System.out.println(description + " eject"); + } + + public void play(String title) { + this.title = title; + currentTrack = 0; + System.out.println(description + " playing \"" + title + "\""); + } + + public void play(int track) { + if (title == null) { + System.out.println(description + " can't play track " + currentTrack + + ", no cd inserted"); + } else { + currentTrack = track; + System.out.println(description + " playing track " + currentTrack); + } + } + + public void stop() { + currentTrack = 0; + System.out.println(description + " stopped"); + } + + public void pause() { + System.out.println(description + " paused \"" + title + "\""); + } + + public String toString() { + return description; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterFacade.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterFacade.java new file mode 100755 index 0000000..5ac81d1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterFacade.java @@ -0,0 +1,72 @@ +package headfirst.designpatterns.facade.hometheater; + +public class HomeTheaterFacade { + Amplifier amp; + Tuner tuner; + StreamingPlayer player; + CdPlayer cd; + Projector projector; + TheaterLights lights; + Screen screen; + PopcornPopper popper; + + public HomeTheaterFacade(Amplifier amp, + Tuner tuner, + StreamingPlayer player, + Projector projector, + Screen screen, + TheaterLights lights, + PopcornPopper popper) { + + this.amp = amp; + this.tuner = tuner; + this.player = player; + this.projector = projector; + this.screen = screen; + this.lights = lights; + this.popper = popper; + } + + public void watchMovie(String movie) { + System.out.println("Get ready to watch a movie..."); + popper.on(); + popper.pop(); + lights.dim(10); + screen.down(); + projector.on(); + projector.wideScreenMode(); + amp.on(); + amp.setStreamingPlayer(player); + amp.setSurroundSound(); + amp.setVolume(5); + player.on(); + player.play(movie); + } + + + public void endMovie() { + System.out.println("Shutting movie theater down..."); + popper.off(); + lights.on(); + screen.up(); + projector.off(); + amp.off(); + player.stop(); + player.off(); + } + + public void listenToRadio(double frequency) { + System.out.println("Tuning in the airwaves..."); + tuner.on(); + tuner.setFrequency(frequency); + amp.on(); + amp.setVolume(5); + amp.setTuner(tuner); + } + + public void endRadio() { + System.out.println("Shutting down the tuner..."); + tuner.off(); + amp.off(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterTestDrive.java new file mode 100755 index 0000000..604f247 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterTestDrive.java @@ -0,0 +1,21 @@ +package headfirst.designpatterns.facade.hometheater; + +public class HomeTheaterTestDrive { + public static void main(String[] args) { + Amplifier amp = new Amplifier("Amplifier"); + Tuner tuner = new Tuner("AM/FM Tuner", amp); + StreamingPlayer player = new StreamingPlayer("Streaming Player", amp); + CdPlayer cd = new CdPlayer("CD Player", amp); + Projector projector = new Projector("Projector", player); + TheaterLights lights = new TheaterLights("Theater Ceiling Lights"); + Screen screen = new Screen("Theater Screen"); + PopcornPopper popper = new PopcornPopper("Popcorn Popper"); + + HomeTheaterFacade homeTheater = + new HomeTheaterFacade(amp, tuner, player, + projector, screen, lights, popper); + + homeTheater.watchMovie("Raiders of the Lost Ark"); + homeTheater.endMovie(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/PopcornPopper.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/PopcornPopper.java new file mode 100755 index 0000000..35e4292 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/PopcornPopper.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.facade.hometheater; + +public class PopcornPopper { + String description; + + public PopcornPopper(String description) { + this.description = description; + } + + public void on() { + System.out.println(description + " on"); + } + + public void off() { + System.out.println(description + " off"); + } + + public void pop() { + System.out.println(description + " popping popcorn!"); + } + + + public String toString() { + return description; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Projector.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Projector.java new file mode 100755 index 0000000..8abeb8f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Projector.java @@ -0,0 +1,31 @@ +package headfirst.designpatterns.facade.hometheater; + +public class Projector { + String description; + StreamingPlayer player; + + public Projector(String description, StreamingPlayer player) { + this.description = description; + this.player = player; + } + + public void on() { + System.out.println(description + " on"); + } + + public void off() { + System.out.println(description + " off"); + } + + public void wideScreenMode() { + System.out.println(description + " in widescreen mode (16x9 aspect ratio)"); + } + + public void tvMode() { + System.out.println(description + " in tv mode (4x3 aspect ratio)"); + } + + public String toString() { + return description; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Screen.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Screen.java new file mode 100755 index 0000000..a8b068b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Screen.java @@ -0,0 +1,22 @@ +package headfirst.designpatterns.facade.hometheater; + +public class Screen { + String description; + + public Screen(String description) { + this.description = description; + } + + public void up() { + System.out.println(description + " going up"); + } + + public void down() { + System.out.println(description + " going down"); + } + + + public String toString() { + return description; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/StreamingPlayer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/StreamingPlayer.java new file mode 100755 index 0000000..7db362b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/StreamingPlayer.java @@ -0,0 +1,57 @@ +package headfirst.designpatterns.facade.hometheater; + +public class StreamingPlayer { + String description; + int currentChapter; + Amplifier amplifier; + String movie; + + public StreamingPlayer(String description, Amplifier amplifier) { + this.description = description; + this.amplifier = amplifier; + } + + public void on() { + System.out.println(description + " on"); + } + + public void off() { + System.out.println(description + " off"); + } + + public void play(String movie) { + this.movie = movie; + currentChapter = 0; + System.out.println(description + " playing \"" + movie + "\""); + } + + public void play(int chapter) { + if (movie == null) { + System.out.println(description + " can't play chapter " + chapter + " no movie selected"); + } else { + currentChapter = chapter; + System.out.println(description + " playing chapter " + currentChapter + " of \"" + movie + "\""); + } + } + + public void stop() { + currentChapter = 0; + System.out.println(description + " stopped \"" + movie + "\""); + } + + public void pause() { + System.out.println(description + " paused \"" + movie + "\""); + } + + public void setTwoChannelAudio() { + System.out.println(description + " set two channel audio"); + } + + public void setSurroundAudio() { + System.out.println(description + " set surround audio"); + } + + public String toString() { + return description; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/TheaterLights.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/TheaterLights.java new file mode 100755 index 0000000..f034adb --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/TheaterLights.java @@ -0,0 +1,25 @@ +package headfirst.designpatterns.facade.hometheater; + +public class TheaterLights { + String description; + + public TheaterLights(String description) { + this.description = description; + } + + public void on() { + System.out.println(description + " on"); + } + + public void off() { + System.out.println(description + " off"); + } + + public void dim(int level) { + System.out.println(description + " dimming to " + level + "%"); + } + + public String toString() { + return description; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Tuner.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Tuner.java new file mode 100755 index 0000000..c68dc30 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Tuner.java @@ -0,0 +1,36 @@ +package headfirst.designpatterns.facade.hometheater; + +public class Tuner { + String description; + Amplifier amplifier; + double frequency; + + public Tuner(String description, Amplifier amplifier) { + this.description = description; + } + + public void on() { + System.out.println(description + " on"); + } + + public void off() { + System.out.println(description + " off"); + } + + public void setFrequency(double frequency) { + System.out.println(description + " setting frequency to " + frequency); + this.frequency = frequency; + } + + public void setAm() { + System.out.println(description + " setting AM mode"); + } + + public void setFm() { + System.out.println(description + " setting FM mode"); + } + + public String toString() { + return description; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Calendar.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Calendar.java new file mode 100644 index 0000000..f0a256e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Calendar.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.factory.challenge; + +import java.util.*; + +public abstract class Calendar { + Zone zone; + public void print() { + System.out.println("--- " + zone.getDisplayName() + " Calendar ---"); + // print all appointments in correct time zone + System.out.println("Offset from GMT: " + zone.getOffset()); + } + public abstract void createCalendar(List appointments); +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/CalendarTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/CalendarTestDrive.java new file mode 100755 index 0000000..bfb6bb6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/CalendarTestDrive.java @@ -0,0 +1,14 @@ +package headfirst.designpatterns.factory.challenge; + +import java.util.*; + +public class CalendarTestDrive { + + public static void main(String[] args) { + ZoneFactory zoneFactory = new ZoneFactory(); + Calendar calendar = new PacificCalendar(zoneFactory); + List appts = Arrays.asList("appt 1", "appt 2"); + calendar.createCalendar(appts); + calendar.print(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/PacificCalendar.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/PacificCalendar.java new file mode 100644 index 0000000..f1cf599 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/PacificCalendar.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.factory.challenge; + +import java.util.*; + +public class PacificCalendar extends Calendar { + public PacificCalendar(ZoneFactory zoneFactory) { + zone = zoneFactory.createZone("US/Pacific"); + // make a calendar for the pacific zone + // ... + } + public void createCalendar(List appointments) { + // make calendar from appointments + System.out.println("Making the calendar"); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Zone.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Zone.java new file mode 100644 index 0000000..e1379f2 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Zone.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.challenge; + +public class Zone { + String displayName; + int offset; + public String getDisplayName() { return displayName; } + public int getOffset() { return offset; } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneCentral.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneCentral.java new file mode 100644 index 0000000..97d6632 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneCentral.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.challenge; + +public class ZoneCentral extends Zone { + public ZoneCentral() { + displayName = "US/Central"; + offset = -6; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneEastern.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneEastern.java new file mode 100644 index 0000000..f758a87 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneEastern.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.challenge; + +public class ZoneEastern extends Zone { + public ZoneEastern() { + displayName = "US/Eastern"; + offset = -5; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneFactory.java new file mode 100644 index 0000000..f23c757 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneFactory.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.factory.challenge; + +public class ZoneFactory { + public Zone createZone(String zoneId) { + Zone zone = null; + if (zoneId == "US/Pacific") { + zone = new ZonePacific(); + } + else if (zoneId == "US/Mountain") { + zone = new ZoneMountain(); + } + else if (zoneId == "US/Central") { + zone = new ZoneCentral(); + } + else if (zoneId == "US/Eastern") { + zone = new ZoneEastern(); + } + return zone; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneMountain.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneMountain.java new file mode 100644 index 0000000..13731ea --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneMountain.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.challenge; + +public class ZoneMountain extends Zone { + public ZoneMountain() { + displayName = "US/Mountain"; + offset = -7; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZonePacific.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZonePacific.java new file mode 100644 index 0000000..080a9a6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZonePacific.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.challenge; + +public class ZonePacific extends Zone { + public ZonePacific() { + displayName = "US/Pacific"; + offset = -8; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/BlackOlives.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/BlackOlives.java new file mode 100755 index 0000000..4688924 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/BlackOlives.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class BlackOlives implements Veggies { + + public String toString() { + return "Black Olives"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Cheese.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Cheese.java new file mode 100755 index 0000000..b2c3388 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Cheese.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public interface Cheese { + public String toString(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/CheesePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/CheesePizza.java new file mode 100755 index 0000000..1087f07 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/CheesePizza.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class CheesePizza extends Pizza { + PizzaIngredientFactory ingredientFactory; + + public CheesePizza(PizzaIngredientFactory ingredientFactory) { + this.ingredientFactory = ingredientFactory; + } + + void prepare() { + System.out.println("Preparing " + name); + dough = ingredientFactory.createDough(); + sauce = ingredientFactory.createSauce(); + cheese = ingredientFactory.createCheese(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaIngredientFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaIngredientFactory.java new file mode 100755 index 0000000..27c2f82 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaIngredientFactory.java @@ -0,0 +1,33 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class ChicagoPizzaIngredientFactory + implements PizzaIngredientFactory +{ + + public Dough createDough() { + return new ThickCrustDough(); + } + + public Sauce createSauce() { + return new PlumTomatoSauce(); + } + + public Cheese createCheese() { + return new MozzarellaCheese(); + } + + public Veggies[] createVeggies() { + Veggies veggies[] = { new BlackOlives(), + new Spinach(), + new Eggplant() }; + return veggies; + } + + public Pepperoni createPepperoni() { + return new SlicedPepperoni(); + } + + public Clams createClam() { + return new FrozenClams(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaStore.java new file mode 100755 index 0000000..230f7e3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaStore.java @@ -0,0 +1,33 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class ChicagoPizzaStore extends PizzaStore { + + protected Pizza createPizza(String item) { + Pizza pizza = null; + PizzaIngredientFactory ingredientFactory = + new ChicagoPizzaIngredientFactory(); + + if (item.equals("cheese")) { + + pizza = new CheesePizza(ingredientFactory); + pizza.setName("Chicago Style Cheese Pizza"); + + } else if (item.equals("veggie")) { + + pizza = new VeggiePizza(ingredientFactory); + pizza.setName("Chicago Style Veggie Pizza"); + + } else if (item.equals("clam")) { + + pizza = new ClamPizza(ingredientFactory); + pizza.setName("Chicago Style Clam Pizza"); + + } else if (item.equals("pepperoni")) { + + pizza = new PepperoniPizza(ingredientFactory); + pizza.setName("Chicago Style Pepperoni Pizza"); + + } + return pizza; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ClamPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ClamPizza.java new file mode 100755 index 0000000..1950ef9 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ClamPizza.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class ClamPizza extends Pizza { + PizzaIngredientFactory ingredientFactory; + + public ClamPizza(PizzaIngredientFactory ingredientFactory) { + this.ingredientFactory = ingredientFactory; + } + + void prepare() { + System.out.println("Preparing " + name); + dough = ingredientFactory.createDough(); + sauce = ingredientFactory.createSauce(); + cheese = ingredientFactory.createCheese(); + clam = ingredientFactory.createClam(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Clams.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Clams.java new file mode 100755 index 0000000..994ddca --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Clams.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public interface Clams { + public String toString(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Dough.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Dough.java new file mode 100755 index 0000000..88f90ae --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Dough.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public interface Dough { + public String toString(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Eggplant.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Eggplant.java new file mode 100755 index 0000000..ab4f970 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Eggplant.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class Eggplant implements Veggies { + + public String toString() { + return "Eggplant"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FreshClams.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FreshClams.java new file mode 100755 index 0000000..4d47054 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FreshClams.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class FreshClams implements Clams { + + public String toString() { + return "Fresh Clams from Long Island Sound"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FrozenClams.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FrozenClams.java new file mode 100755 index 0000000..17a2c2f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FrozenClams.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class FrozenClams implements Clams { + + public String toString() { + return "Frozen Clams from Chesapeake Bay"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Garlic.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Garlic.java new file mode 100755 index 0000000..58ecfd6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Garlic.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class Garlic implements Veggies { + + public String toString() { + return "Garlic"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MarinaraSauce.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MarinaraSauce.java new file mode 100755 index 0000000..3c4f153 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MarinaraSauce.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class MarinaraSauce implements Sauce { + public String toString() { + return "Marinara Sauce"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MozzarellaCheese.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MozzarellaCheese.java new file mode 100755 index 0000000..ed22b75 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MozzarellaCheese.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class MozzarellaCheese implements Cheese { + + public String toString() { + return "Shredded Mozzarella"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Mushroom.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Mushroom.java new file mode 100755 index 0000000..ed9dd06 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Mushroom.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class Mushroom implements Veggies { + + public String toString() { + return "Mushrooms"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaIngredientFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaIngredientFactory.java new file mode 100755 index 0000000..996a98c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaIngredientFactory.java @@ -0,0 +1,29 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class NYPizzaIngredientFactory implements PizzaIngredientFactory { + + public Dough createDough() { + return new ThinCrustDough(); + } + + public Sauce createSauce() { + return new MarinaraSauce(); + } + + public Cheese createCheese() { + return new ReggianoCheese(); + } + + public Veggies[] createVeggies() { + Veggies veggies[] = { new Garlic(), new Onion(), new Mushroom(), new RedPepper() }; + return veggies; + } + + public Pepperoni createPepperoni() { + return new SlicedPepperoni(); + } + + public Clams createClam() { + return new FreshClams(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaStore.java new file mode 100755 index 0000000..d0ef2a1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaStore.java @@ -0,0 +1,33 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class NYPizzaStore extends PizzaStore { + + protected Pizza createPizza(String item) { + Pizza pizza = null; + PizzaIngredientFactory ingredientFactory = + new NYPizzaIngredientFactory(); + + if (item.equals("cheese")) { + + pizza = new CheesePizza(ingredientFactory); + pizza.setName("New York Style Cheese Pizza"); + + } else if (item.equals("veggie")) { + + pizza = new VeggiePizza(ingredientFactory); + pizza.setName("New York Style Veggie Pizza"); + + } else if (item.equals("clam")) { + + pizza = new ClamPizza(ingredientFactory); + pizza.setName("New York Style Clam Pizza"); + + } else if (item.equals("pepperoni")) { + + pizza = new PepperoniPizza(ingredientFactory); + pizza.setName("New York Style Pepperoni Pizza"); + + } + return pizza; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Onion.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Onion.java new file mode 100755 index 0000000..6b9520a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Onion.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class Onion implements Veggies { + + public String toString() { + return "Onion"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ParmesanCheese.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ParmesanCheese.java new file mode 100755 index 0000000..2f16a85 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ParmesanCheese.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class ParmesanCheese implements Cheese { + + public String toString() { + return "Shredded Parmesan"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pepperoni.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pepperoni.java new file mode 100755 index 0000000..dd46b5f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pepperoni.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public interface Pepperoni { + public String toString(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PepperoniPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PepperoniPizza.java new file mode 100755 index 0000000..32c0809 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PepperoniPizza.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class PepperoniPizza extends Pizza { + PizzaIngredientFactory ingredientFactory; + + public PepperoniPizza(PizzaIngredientFactory ingredientFactory) { + this.ingredientFactory = ingredientFactory; + } + + void prepare() { + System.out.println("Preparing " + name); + dough = ingredientFactory.createDough(); + sauce = ingredientFactory.createSauce(); + cheese = ingredientFactory.createCheese(); + veggies = ingredientFactory.createVeggies(); + pepperoni = ingredientFactory.createPepperoni(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pizza.java new file mode 100755 index 0000000..67edec0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pizza.java @@ -0,0 +1,69 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public abstract class Pizza { + String name; + + Dough dough; + Sauce sauce; + Veggies veggies[]; + Cheese cheese; + Pepperoni pepperoni; + Clams clam; + + abstract void prepare(); + + void bake() { + System.out.println("Bake for 25 minutes at 350"); + } + + void cut() { + System.out.println("Cutting the pizza into diagonal slices"); + } + + void box() { + System.out.println("Place pizza in official PizzaStore box"); + } + + void setName(String name) { + this.name = name; + } + + String getName() { + return name; + } + + public String toString() { + StringBuffer result = new StringBuffer(); + result.append("---- " + name + " ----\n"); + if (dough != null) { + result.append(dough); + result.append("\n"); + } + if (sauce != null) { + result.append(sauce); + result.append("\n"); + } + if (cheese != null) { + result.append(cheese); + result.append("\n"); + } + if (veggies != null) { + for (int i = 0; i < veggies.length; i++) { + result.append(veggies[i]); + if (i < veggies.length-1) { + result.append(", "); + } + } + result.append("\n"); + } + if (clam != null) { + result.append(clam); + result.append("\n"); + } + if (pepperoni != null) { + result.append(pepperoni); + result.append("\n"); + } + return result.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaIngredientFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaIngredientFactory.java new file mode 100755 index 0000000..5a21dad --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaIngredientFactory.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public interface PizzaIngredientFactory { + + public Dough createDough(); + public Sauce createSauce(); + public Cheese createCheese(); + public Veggies[] createVeggies(); + public Pepperoni createPepperoni(); + public Clams createClam(); + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaStore.java new file mode 100755 index 0000000..7221648 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaStore.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public abstract class PizzaStore { + + protected abstract Pizza createPizza(String item); + + public Pizza orderPizza(String type) { + Pizza pizza = createPizza(type); + System.out.println("--- Making a " + pizza.getName() + " ---"); + pizza.prepare(); + pizza.bake(); + pizza.cut(); + pizza.box(); + return pizza; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaTestDrive.java new file mode 100755 index 0000000..ae3413c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaTestDrive.java @@ -0,0 +1,33 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class PizzaTestDrive { + + public static void main(String[] args) { + PizzaStore nyStore = new NYPizzaStore(); + PizzaStore chicagoStore = new ChicagoPizzaStore(); + + Pizza pizza = nyStore.orderPizza("cheese"); + System.out.println("Ethan ordered a " + pizza + "\n"); + + pizza = chicagoStore.orderPizza("cheese"); + System.out.println("Joel ordered a " + pizza + "\n"); + + pizza = nyStore.orderPizza("clam"); + System.out.println("Ethan ordered a " + pizza + "\n"); + + pizza = chicagoStore.orderPizza("clam"); + System.out.println("Joel ordered a " + pizza + "\n"); + + pizza = nyStore.orderPizza("pepperoni"); + System.out.println("Ethan ordered a " + pizza + "\n"); + + pizza = chicagoStore.orderPizza("pepperoni"); + System.out.println("Joel ordered a " + pizza + "\n"); + + pizza = nyStore.orderPizza("veggie"); + System.out.println("Ethan ordered a " + pizza + "\n"); + + pizza = chicagoStore.orderPizza("veggie"); + System.out.println("Joel ordered a " + pizza + "\n"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PlumTomatoSauce.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PlumTomatoSauce.java new file mode 100755 index 0000000..b13a108 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PlumTomatoSauce.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class PlumTomatoSauce implements Sauce { + public String toString() { + return "Tomato sauce with plum tomatoes"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/RedPepper.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/RedPepper.java new file mode 100755 index 0000000..d893415 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/RedPepper.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class RedPepper implements Veggies { + + public String toString() { + return "Red Pepper"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ReggianoCheese.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ReggianoCheese.java new file mode 100755 index 0000000..987e653 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ReggianoCheese.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class ReggianoCheese implements Cheese { + + public String toString() { + return "Reggiano Cheese"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Sauce.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Sauce.java new file mode 100755 index 0000000..8506021 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Sauce.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public interface Sauce { + public String toString(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/SlicedPepperoni.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/SlicedPepperoni.java new file mode 100755 index 0000000..87932ed --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/SlicedPepperoni.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class SlicedPepperoni implements Pepperoni { + + public String toString() { + return "Sliced Pepperoni"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Spinach.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Spinach.java new file mode 100755 index 0000000..1489084 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Spinach.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class Spinach implements Veggies { + + public String toString() { + return "Spinach"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThickCrustDough.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThickCrustDough.java new file mode 100755 index 0000000..2f26c80 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThickCrustDough.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class ThickCrustDough implements Dough { + public String toString() { + return "ThickCrust style extra thick crust dough"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThinCrustDough.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThinCrustDough.java new file mode 100755 index 0000000..8993092 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThinCrustDough.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class ThinCrustDough implements Dough { + public String toString() { + return "Thin Crust Dough"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/VeggiePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/VeggiePizza.java new file mode 100755 index 0000000..a8611c4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/VeggiePizza.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public class VeggiePizza extends Pizza { + PizzaIngredientFactory ingredientFactory; + + public VeggiePizza(PizzaIngredientFactory ingredientFactory) { + this.ingredientFactory = ingredientFactory; + } + + void prepare() { + System.out.println("Preparing " + name); + dough = ingredientFactory.createDough(); + sauce = ingredientFactory.createSauce(); + cheese = ingredientFactory.createCheese(); + veggies = ingredientFactory.createVeggies(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Veggies.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Veggies.java new file mode 100755 index 0000000..61c8b84 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Veggies.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.factory.pizzaaf; + +public interface Veggies { + public String toString(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoPizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoPizzaStore.java new file mode 100755 index 0000000..197267b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoPizzaStore.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class ChicagoPizzaStore extends PizzaStore { + + Pizza createPizza(String item) { + if (item.equals("cheese")) { + return new ChicagoStyleCheesePizza(); + } else if (item.equals("veggie")) { + return new ChicagoStyleVeggiePizza(); + } else if (item.equals("clam")) { + return new ChicagoStyleClamPizza(); + } else if (item.equals("pepperoni")) { + return new ChicagoStylePepperoniPizza(); + } else return null; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleCheesePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleCheesePizza.java new file mode 100755 index 0000000..bfacdd4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleCheesePizza.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class ChicagoStyleCheesePizza extends Pizza { + + public ChicagoStyleCheesePizza() { + name = "Chicago Style Deep Dish Cheese Pizza"; + dough = "Extra Thick Crust Dough"; + sauce = "Plum Tomato Sauce"; + + toppings.add("Shredded Mozzarella Cheese"); + } + + void cut() { + System.out.println("Cutting the pizza into square slices"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleClamPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleClamPizza.java new file mode 100755 index 0000000..43f6314 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleClamPizza.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class ChicagoStyleClamPizza extends Pizza { + public ChicagoStyleClamPizza() { + name = "Chicago Style Clam Pizza"; + dough = "Extra Thick Crust Dough"; + sauce = "Plum Tomato Sauce"; + + toppings.add("Shredded Mozzarella Cheese"); + toppings.add("Frozen Clams from Chesapeake Bay"); + } + + void cut() { + System.out.println("Cutting the pizza into square slices"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStylePepperoniPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStylePepperoniPizza.java new file mode 100755 index 0000000..5efc771 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStylePepperoniPizza.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class ChicagoStylePepperoniPizza extends Pizza { + public ChicagoStylePepperoniPizza() { + name = "Chicago Style Pepperoni Pizza"; + dough = "Extra Thick Crust Dough"; + sauce = "Plum Tomato Sauce"; + + toppings.add("Shredded Mozzarella Cheese"); + toppings.add("Black Olives"); + toppings.add("Spinach"); + toppings.add("Eggplant"); + toppings.add("Sliced Pepperoni"); + } + + void cut() { + System.out.println("Cutting the pizza into square slices"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleVeggiePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleVeggiePizza.java new file mode 100755 index 0000000..f086d3e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleVeggiePizza.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class ChicagoStyleVeggiePizza extends Pizza { + public ChicagoStyleVeggiePizza() { + name = "Chicago Deep Dish Veggie Pizza"; + dough = "Extra Thick Crust Dough"; + sauce = "Plum Tomato Sauce"; + + toppings.add("Shredded Mozzarella Cheese"); + toppings.add("Black Olives"); + toppings.add("Spinach"); + toppings.add("Eggplant"); + } + + void cut() { + System.out.println("Cutting the pizza into square slices"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/DependentPizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/DependentPizzaStore.java new file mode 100755 index 0000000..9dbed2c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/DependentPizzaStore.java @@ -0,0 +1,37 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class DependentPizzaStore { + + public Pizza createPizza(String style, String type) { + Pizza pizza = null; + if (style.equals("NY")) { + if (type.equals("cheese")) { + pizza = new NYStyleCheesePizza(); + } else if (type.equals("veggie")) { + pizza = new NYStyleVeggiePizza(); + } else if (type.equals("clam")) { + pizza = new NYStyleClamPizza(); + } else if (type.equals("pepperoni")) { + pizza = new NYStylePepperoniPizza(); + } + } else if (style.equals("Chicago")) { + if (type.equals("cheese")) { + pizza = new ChicagoStyleCheesePizza(); + } else if (type.equals("veggie")) { + pizza = new ChicagoStyleVeggiePizza(); + } else if (type.equals("clam")) { + pizza = new ChicagoStyleClamPizza(); + } else if (type.equals("pepperoni")) { + pizza = new ChicagoStylePepperoniPizza(); + } + } else { + System.out.println("Error: invalid type of pizza"); + return null; + } + pizza.prepare(); + pizza.bake(); + pizza.cut(); + pizza.box(); + return pizza; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYPizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYPizzaStore.java new file mode 100755 index 0000000..276de04 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYPizzaStore.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class NYPizzaStore extends PizzaStore { + + Pizza createPizza(String item) { + if (item.equals("cheese")) { + return new NYStyleCheesePizza(); + } else if (item.equals("veggie")) { + return new NYStyleVeggiePizza(); + } else if (item.equals("clam")) { + return new NYStyleClamPizza(); + } else if (item.equals("pepperoni")) { + return new NYStylePepperoniPizza(); + } else return null; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleCheesePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleCheesePizza.java new file mode 100755 index 0000000..8107096 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleCheesePizza.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class NYStyleCheesePizza extends Pizza { + + public NYStyleCheesePizza() { + name = "NY Style Sauce and Cheese Pizza"; + dough = "Thin Crust Dough"; + sauce = "Marinara Sauce"; + + toppings.add("Grated Reggiano Cheese"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleClamPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleClamPizza.java new file mode 100755 index 0000000..d5037ce --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleClamPizza.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class NYStyleClamPizza extends Pizza { + + public NYStyleClamPizza() { + name = "NY Style Clam Pizza"; + dough = "Thin Crust Dough"; + sauce = "Marinara Sauce"; + + toppings.add("Grated Reggiano Cheese"); + toppings.add("Fresh Clams from Long Island Sound"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStylePepperoniPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStylePepperoniPizza.java new file mode 100755 index 0000000..cbf1f88 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStylePepperoniPizza.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class NYStylePepperoniPizza extends Pizza { + + public NYStylePepperoniPizza() { + name = "NY Style Pepperoni Pizza"; + dough = "Thin Crust Dough"; + sauce = "Marinara Sauce"; + + toppings.add("Grated Reggiano Cheese"); + toppings.add("Sliced Pepperoni"); + toppings.add("Garlic"); + toppings.add("Onion"); + toppings.add("Mushrooms"); + toppings.add("Red Pepper"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleVeggiePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleVeggiePizza.java new file mode 100755 index 0000000..ce10573 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleVeggiePizza.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class NYStyleVeggiePizza extends Pizza { + + public NYStyleVeggiePizza() { + name = "NY Style Veggie Pizza"; + dough = "Thin Crust Dough"; + sauce = "Marinara Sauce"; + + toppings.add("Grated Reggiano Cheese"); + toppings.add("Garlic"); + toppings.add("Onion"); + toppings.add("Mushrooms"); + toppings.add("Red Pepper"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/Pizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/Pizza.java new file mode 100755 index 0000000..6f7cd3b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/Pizza.java @@ -0,0 +1,50 @@ +package headfirst.designpatterns.factory.pizzafm; + +import java.util.ArrayList; + +public abstract class Pizza { + String name; + String dough; + String sauce; + ArrayList toppings = new ArrayList(); + + void prepare() { + System.out.println("Prepare " + name); + System.out.println("Tossing dough..."); + System.out.println("Adding sauce..."); + System.out.println("Adding toppings: "); + for (String topping : toppings) { + System.out.println(" " + topping); + } + } + + void bake() { + System.out.println("Bake for 25 minutes at 350"); + } + + void cut() { + System.out.println("Cut the pizza into diagonal slices"); + } + + void box() { + System.out.println("Place pizza in official PizzaStore box"); + } + + public String getName() { + return name; + } + + public String toString() { + StringBuffer display = new StringBuffer(); + display.append("---- " + name + " ----\n"); + display.append(dough + "\n"); + display.append(sauce + "\n"); + for (String topping : toppings) { + display.append(topping + "\n"); + } + return display.toString(); + } +} + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaStore.java new file mode 100755 index 0000000..1b715b4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaStore.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.factory.pizzafm; + +public abstract class PizzaStore { + + abstract Pizza createPizza(String item); + + public Pizza orderPizza(String type) { + Pizza pizza = createPizza(type); + System.out.println("--- Making a " + pizza.getName() + " ---"); + pizza.prepare(); + pizza.bake(); + pizza.cut(); + pizza.box(); + return pizza; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaTestDrive.java new file mode 100755 index 0000000..13882c5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaTestDrive.java @@ -0,0 +1,33 @@ +package headfirst.designpatterns.factory.pizzafm; + +public class PizzaTestDrive { + + public static void main(String[] args) { + PizzaStore nyStore = new NYPizzaStore(); + PizzaStore chicagoStore = new ChicagoPizzaStore(); + + Pizza pizza = nyStore.orderPizza("cheese"); + System.out.println("Ethan ordered a " + pizza.getName() + "\n"); + + pizza = chicagoStore.orderPizza("cheese"); + System.out.println("Joel ordered a " + pizza.getName() + "\n"); + + pizza = nyStore.orderPizza("clam"); + System.out.println("Ethan ordered a " + pizza.getName() + "\n"); + + pizza = chicagoStore.orderPizza("clam"); + System.out.println("Joel ordered a " + pizza.getName() + "\n"); + + pizza = nyStore.orderPizza("pepperoni"); + System.out.println("Ethan ordered a " + pizza.getName() + "\n"); + + pizza = chicagoStore.orderPizza("pepperoni"); + System.out.println("Joel ordered a " + pizza.getName() + "\n"); + + pizza = nyStore.orderPizza("veggie"); + System.out.println("Ethan ordered a " + pizza.getName() + "\n"); + + pizza = chicagoStore.orderPizza("veggie"); + System.out.println("Joel ordered a " + pizza.getName() + "\n"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/CheesePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/CheesePizza.java new file mode 100755 index 0000000..c6cacbf --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/CheesePizza.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.factory.pizzas; + +public class CheesePizza extends Pizza { + public CheesePizza() { + name = "Cheese Pizza"; + dough = "Regular Crust"; + sauce = "Marinara Pizza Sauce"; + toppings.add("Fresh Mozzarella"); + toppings.add("Parmesan"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/ClamPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/ClamPizza.java new file mode 100755 index 0000000..e132963 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/ClamPizza.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.factory.pizzas; + +public class ClamPizza extends Pizza { + public ClamPizza() { + name = "Clam Pizza"; + dough = "Thin crust"; + sauce = "White garlic sauce"; + toppings.add("Clams"); + toppings.add("Grated parmesan cheese"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PepperoniPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PepperoniPizza.java new file mode 100755 index 0000000..f01cc7d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PepperoniPizza.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.factory.pizzas; + +public class PepperoniPizza extends Pizza { + public PepperoniPizza() { + name = "Pepperoni Pizza"; + dough = "Crust"; + sauce = "Marinara sauce"; + toppings.add("Sliced Pepperoni"); + toppings.add("Sliced Onion"); + toppings.add("Grated parmesan cheese"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/Pizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/Pizza.java new file mode 100755 index 0000000..1fc931f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/Pizza.java @@ -0,0 +1,43 @@ +package headfirst.designpatterns.factory.pizzas; + +import java.util.*; + +abstract public class Pizza { + String name; + String dough; + String sauce; + List toppings = new ArrayList(); + + public String getName() { + return name; + } + + public void prepare() { + System.out.println("Preparing " + name); + } + + public void bake() { + System.out.println("Baking " + name); + } + + public void cut() { + System.out.println("Cutting " + name); + } + + public void box() { + System.out.println("Boxing " + name); + } + + public String toString() { + // code to display pizza name and ingredients + StringBuffer display = new StringBuffer(); + display.append("---- " + name + " ----\n"); + display.append(dough + "\n"); + display.append(sauce + "\n"); + for (String topping : toppings) { + display.append(topping + "\n"); + } + return display.toString(); + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaStore.java new file mode 100755 index 0000000..e36d757 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaStore.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.factory.pizzas; + +public class PizzaStore { + SimplePizzaFactory factory; + + public PizzaStore(SimplePizzaFactory factory) { + this.factory = factory; + } + + public Pizza orderPizza(String type) { + Pizza pizza; + + pizza = factory.createPizza(type); + + pizza.prepare(); + pizza.bake(); + pizza.cut(); + pizza.box(); + + return pizza; + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaTestDrive.java new file mode 100755 index 0000000..6cf4a96 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaTestDrive.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.factory.pizzas; + +public class PizzaTestDrive { + + public static void main(String[] args) { + SimplePizzaFactory factory = new SimplePizzaFactory(); + PizzaStore store = new PizzaStore(factory); + + Pizza pizza = store.orderPizza("cheese"); + System.out.println("We ordered a " + pizza.getName() + "\n"); + System.out.println(pizza); + + pizza = store.orderPizza("veggie"); + System.out.println("We ordered a " + pizza.getName() + "\n"); + System.out.println(pizza); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/SimplePizzaFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/SimplePizzaFactory.java new file mode 100755 index 0000000..291b3d3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/SimplePizzaFactory.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.factory.pizzas; + +public class SimplePizzaFactory { + + public Pizza createPizza(String type) { + Pizza pizza = null; + + if (type.equals("cheese")) { + pizza = new CheesePizza(); + } else if (type.equals("pepperoni")) { + pizza = new PepperoniPizza(); + } else if (type.equals("clam")) { + pizza = new ClamPizza(); + } else if (type.equals("veggie")) { + pizza = new VeggiePizza(); + } + return pizza; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/VeggiePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/VeggiePizza.java new file mode 100755 index 0000000..0d2f799 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/VeggiePizza.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.factory.pizzas; + +public class VeggiePizza extends Pizza { + public VeggiePizza() { + name = "Veggie Pizza"; + dough = "Crust"; + sauce = "Marinara sauce"; + toppings.add("Shredded mozzarella"); + toppings.add("Grated parmesan"); + toppings.add("Diced onion"); + toppings.add("Sliced mushrooms"); + toppings.add("Sliced red pepper"); + toppings.add("Sliced black olives"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Client.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Client.java new file mode 100644 index 0000000..09500d2 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Client.java @@ -0,0 +1,22 @@ +package headfirst.designpatterns.flyweight; + +public class Client { + public static void main(String[] args) { + int[][] deciduousLocations = {{1, 1}, {33, 50}, {100, 90}}; + int[][] coniferLocations = {{10, 87}, {24, 76}, {2, 64}}; + TreeFactory treeFactory = new TreeFactory(); // creates the two flyweights + Tree d, c; + try { + d = treeFactory.getTree("deciduous"); + c = treeFactory.getTree("conifer"); + for (int[] location : deciduousLocations) { + d.display(location[0], location[1]); + } + for (int[] location : coniferLocations) { + c.display(location[0], location[1]); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/ConiferTree.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/ConiferTree.java new file mode 100644 index 0000000..e2861ed --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/ConiferTree.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.flyweight; + +public class ConiferTree implements Tree { + // Complex trunk, branch, needle graphic data + public void display(int x, int y) { + System.out.println("Conifer tree is located at " + x + ", " + y); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/DeciduousTree.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/DeciduousTree.java new file mode 100644 index 0000000..4ac61c4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/DeciduousTree.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.flyweight; + +import java.time.*; + +public class DeciduousTree implements Tree { + // complex trunk, branch, leaf graphic data + public void display(int x, int y) { + System.out.println("Deciduous tree is located at " + x + ", " + y); + if (!this.isWithinRange(LocalDate.now())) { + System.out.println("The tree currently has no leaves"); + } + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Tree.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Tree.java new file mode 100644 index 0000000..8e42f65 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Tree.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.flyweight; + +import java.time.*; + +public interface Tree { + public void display(int x, int y); + public default boolean isWithinRange(LocalDate aDate) { + Month month = aDate.getMonth(); + return (month.getValue() > 2) && (month.getValue() < 11); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/TreeFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/TreeFactory.java new file mode 100644 index 0000000..c158215 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/TreeFactory.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.flyweight; + +public class TreeFactory { + Tree d, c = null; + public TreeFactory() { + this.d = new DeciduousTree(); + this.c = new ConiferTree(); + } + public Tree getTree(String type) throws Exception { + if (type.equals("deciduous")) { + return this.d; + } else if (type.equals("conifer")) { + return this.c; + } else { + throw new Exception("Invalid kind of tree"); + } + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/AlternatingDinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/AlternatingDinerMenuIterator.java new file mode 100755 index 0000000..ef822cb --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/AlternatingDinerMenuIterator.java @@ -0,0 +1,28 @@ +package headfirst.designpatterns.iterator.dinermerger; + +import java.util.Calendar; + +public class AlternatingDinerMenuIterator implements Iterator { + MenuItem[] list; + int position; + + public AlternatingDinerMenuIterator(MenuItem[] list) { + this.list = list; + position = Calendar.DAY_OF_WEEK % 2; + } + public MenuItem next() { + MenuItem menuItem = list[position]; + position = position + 2; + return menuItem; + } + public boolean hasNext() { + if (position >= list.length || list[position] == null) { + return false; + } else { + return true; + } + } + public String toString() { + return "Alternating Diner Menu Iterator"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayIterator.java new file mode 100755 index 0000000..a9a5b20 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayIterator.java @@ -0,0 +1,24 @@ +package headfirst.designpatterns.iterator.dinermerger; + +public class ArrayIterator implements Iterator { + MenuItem[] items; + int position = 0; + + public ArrayIterator(MenuItem[] items) { + this.items = items; + } + + public MenuItem next() { + MenuItem menuItem = items[position]; + position = position + 1; + return menuItem; + } + + public boolean hasNext() { + if (position >= items.length || items[position] == null) { + return false; + } else { + return true; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayListIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayListIterator.java new file mode 100755 index 0000000..02a802b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayListIterator.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.iterator.dinermerger; + +import java.util.ArrayList; + +public class ArrayListIterator implements Iterator { + ArrayList items; + int position = 0; + + public ArrayListIterator(ArrayList items) { + this.items = items; + } + + public MenuItem next() { + MenuItem item = items.get(position); + position = position + 1; + return item; + } + + public boolean hasNext() { + if (position >= items.size()) { + return false; + } else { + return true; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenu.java new file mode 100755 index 0000000..ee87f4a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenu.java @@ -0,0 +1,51 @@ +package headfirst.designpatterns.iterator.dinermerger; + +public class DinerMenu implements Menu { + static final int MAX_ITEMS = 6; + int numberOfItems = 0; + MenuItem[] menuItems; + + public DinerMenu() { + menuItems = new MenuItem[MAX_ITEMS]; + + addItem("Vegetarian BLT", + "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); + addItem("BLT", + "Bacon with lettuce & tomato on whole wheat", false, 2.99); + addItem("Soup of the day", + "Soup of the day, with a side of potato salad", false, 3.29); + addItem("Hotdog", + "A hot dog, with sauerkraut, relish, onions, topped with cheese", + false, 3.05); + addItem("Steamed Veggies and Brown Rice", + "Steamed vegetables over brown rice", true, 3.99); + addItem("Pasta", + "Spaghetti with Marinara Sauce, and a slice of sourdough bread", + true, 3.89); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + if (numberOfItems >= MAX_ITEMS) { + System.err.println("Sorry, menu is full! Can't add item to menu"); + } else { + menuItems[numberOfItems] = menuItem; + numberOfItems = numberOfItems + 1; + } + } + + public MenuItem[] getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return new DinerMenuIterator(menuItems); + // To test Alternating menu items, comment out above line, + // and uncomment the line below. + //return new AlternatingDinerMenuIterator(menuItems); + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenuIterator.java new file mode 100755 index 0000000..75a0e62 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenuIterator.java @@ -0,0 +1,34 @@ +package headfirst.designpatterns.iterator.dinermerger; + +public class DinerMenuIterator implements Iterator { + MenuItem[] items; + int position = 0; + + public DinerMenuIterator(MenuItem[] items) { + this.items = items; + } + + public MenuItem next() { + /* + MenuItem menuItem = items[position]; + position = position + 1; + return menuItem; + */ + + // or shorten to + return items[position++]; + } + + public boolean hasNext() { + /* + if (position >= items.length || items[position] == null) { + return false; + } else { + return true; + } + */ + + // or shorten to + return items.length > position; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Iterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Iterator.java new file mode 100755 index 0000000..0c9edd3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Iterator.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.iterator.dinermerger; + +public interface Iterator { + boolean hasNext(); + MenuItem next(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Menu.java new file mode 100755 index 0000000..c1362b3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Menu.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.iterator.dinermerger; + +public interface Menu { + public Iterator createIterator(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuItem.java new file mode 100755 index 0000000..b715a40 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuItem.java @@ -0,0 +1,38 @@ +package headfirst.designpatterns.iterator.dinermerger; + +public class MenuItem { + String name; + String description; + boolean vegetarian; + double price; + + public MenuItem(String name, + String description, + boolean vegetarian, + double price) + { + this.name = name; + this.description = description; + this.vegetarian = vegetarian; + this.price = price; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public double getPrice() { + return price; + } + + public boolean isVegetarian() { + return vegetarian; + } + public String toString() { + return (name + ", $" + price + "\n " + description); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuTestDrive.java new file mode 100755 index 0000000..c5a2ff1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuTestDrive.java @@ -0,0 +1,75 @@ +package headfirst.designpatterns.iterator.dinermerger; + +import java.util.*; + +public class MenuTestDrive { + public static void main(String args[]) { + Menu pancakeHouseMenu = new PancakeHouseMenu(); + Menu dinerMenu = new DinerMenu(); + + Waitress waitress = new Waitress(pancakeHouseMenu, dinerMenu); + + // With iterators + waitress.printMenu(); + + printMenus(); + } + + /* + * Without the Waitress, we need the code below... + */ + public static void printMenus() { + PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); + DinerMenu dinerMenu = new DinerMenu(); + + List breakfastItems = pancakeHouseMenu.getMenuItems(); + MenuItem[] lunchItems = dinerMenu.getMenuItems(); + + // print as Iterable + printMenu(breakfastItems); + printMenu(Arrays.asList(lunchItems)); + + // print with forEach + System.out.println("=== forEach ==="); + breakfastItems.forEach(item -> System.out.println(item)); + Arrays.asList(lunchItems).forEach(item -> System.out.println(item)); + System.out.println("=== forEach ==="); + + // Using enhanced for loop + System.out.println("USING ENHANCED FOR"); + for (MenuItem menuItem : breakfastItems) { + System.out.print(menuItem.getName()); + System.out.println("\t\t" + menuItem.getPrice()); + System.out.println("\t" + menuItem.getDescription()); + } + for (MenuItem menuItem : lunchItems) { + System.out.print(menuItem.getName()); + System.out.println("\t\t" + menuItem.getPrice()); + System.out.println("\t" + menuItem.getDescription()); + } + + // Exposing implementation + System.out.println("USING FOR LOOPS"); + for (int i = 0; i < breakfastItems.size(); i++) { + MenuItem menuItem = (MenuItem)breakfastItems.get(i); + System.out.print(menuItem.getName()); + System.out.println("\t\t" + menuItem.getPrice()); + System.out.println("\t" + menuItem.getDescription()); + } + + for (int i = 0; i < lunchItems.length; i++) { + MenuItem menuItem = lunchItems[i]; + System.out.print(menuItem.getName()); + System.out.println("\t\t" + menuItem.getPrice()); + System.out.println("\t" + menuItem.getDescription()); + } + } + + public static void printMenu(Iterable a) { + for (MenuItem menuItem : a) { + System.out.print(menuItem.getName()); + System.out.println("\t\t" + menuItem.getPrice()); + System.out.println("\t" + menuItem.getDescription()); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenu.java new file mode 100755 index 0000000..db1be51 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenu.java @@ -0,0 +1,53 @@ +package headfirst.designpatterns.iterator.dinermerger; + +import java.util.ArrayList; +import java.util.List; + +public class PancakeHouseMenu implements Menu { + List menuItems; + + public PancakeHouseMenu() { + menuItems = new ArrayList(); + + addItem("K&B's Pancake Breakfast", + "Pancakes with scrambled eggs and toast", + true, + 2.99); + + addItem("Regular Pancake Breakfast", + "Pancakes with fried eggs, sausage", + false, + 2.99); + + addItem("Blueberry Pancakes", + "Pancakes made with fresh blueberries", + true, + 3.49); + + addItem("Waffles", + "Waffles with your choice of blueberries or strawberries", + true, + 3.59); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + menuItems.add(menuItem); + } + + public List getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return new PancakeHouseMenuIterator(menuItems); + } + + public String toString() { + return "Objectville Pancake House Menu"; + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenuIterator.java new file mode 100755 index 0000000..da749e2 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenuIterator.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.iterator.dinermerger; + +import java.util.ArrayList; +import java.util.List; + +public class PancakeHouseMenuIterator implements Iterator { + List items; + int position = 0; + + public PancakeHouseMenuIterator(List items) { + this.items = items; + } + + public MenuItem next() { + /* + MenuItem item = items.get(position); + position = position + 1; + return item; + */ + // or shorten to: + return items.get(position++); + } + + public boolean hasNext() { + /* + if (position >= items.size()) { + return false; + } else { + return true; + } + */ + // or shorten to: + return items.size() > position; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Waitress.java new file mode 100755 index 0000000..4fd5b3f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Waitress.java @@ -0,0 +1,72 @@ +package headfirst.designpatterns.iterator.dinermerger; + +public class Waitress { + Menu pancakeHouseMenu; + Menu dinerMenu; + + public Waitress(Menu pancakeHouseMenu, Menu dinerMenu) { + this.pancakeHouseMenu = pancakeHouseMenu; + this.dinerMenu = dinerMenu; + } + + public void printMenu() { + Iterator pancakeIterator = pancakeHouseMenu.createIterator(); + Iterator dinerIterator = dinerMenu.createIterator(); + + System.out.println("MENU\n----\nBREAKFAST"); + printMenu(pancakeIterator); + System.out.println("\nLUNCH"); + printMenu(dinerIterator); + + } + + private void printMenu(Iterator iterator) { + while (iterator.hasNext()) { + MenuItem menuItem = iterator.next(); + System.out.print(menuItem.getName() + ", "); + System.out.print(menuItem.getPrice() + " -- "); + System.out.println(menuItem.getDescription()); + } + } + + public void printVegetarianMenu() { + printVegetarianMenu(pancakeHouseMenu.createIterator()); + printVegetarianMenu(dinerMenu.createIterator()); + } + + public boolean isItemVegetarian(String name) { + Iterator breakfastIterator = pancakeHouseMenu.createIterator(); + if (isVegetarian(name, breakfastIterator)) { + return true; + } + Iterator dinnerIterator = dinerMenu.createIterator(); + if (isVegetarian(name, dinnerIterator)) { + return true; + } + return false; + } + + + private void printVegetarianMenu(Iterator iterator) { + while (iterator.hasNext()) { + MenuItem menuItem = iterator.next(); + if (menuItem.isVegetarian()) { + System.out.print(menuItem.getName()); + System.out.println("\t\t" + menuItem.getPrice()); + System.out.println("\t" + menuItem.getDescription()); + } + } + } + + private boolean isVegetarian(String name, Iterator iterator) { + while (iterator.hasNext()) { + MenuItem menuItem = iterator.next(); + if (menuItem.getName().equals(name)) { + if (menuItem.isVegetarian()) { + return true; + } + } + } + return false; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/AlternatingDinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/AlternatingDinerMenuIterator.java new file mode 100755 index 0000000..1b78a51 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/AlternatingDinerMenuIterator.java @@ -0,0 +1,37 @@ +package headfirst.designpatterns.iterator.dinermergercafe; + +import java.util.Iterator; +import java.util.Calendar; + +public class AlternatingDinerMenuIterator implements Iterator { + MenuItem[] items; + int position; + + public AlternatingDinerMenuIterator(MenuItem[] items) { + this.items = items; + position = Calendar.DAY_OF_WEEK % 2; + } + public MenuItem next() { + MenuItem menuItem = items[position]; + position = position + 2; + return menuItem; + } + public boolean hasNext() { + if (position >= items.length || items[position] == null) { + return false; + } else { + return true; + } + } + /* + * No longer needed as of Java 8 + * + * (non-Javadoc) + * @see java.util.Iterator#remove() + * + public void remove() { + throw new UnsupportedOperationException( + "Alternating Diner Menu Iterator does not support remove()"); + } + */ +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/CafeMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/CafeMenu.java new file mode 100755 index 0000000..e3646cd --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/CafeMenu.java @@ -0,0 +1,34 @@ +package headfirst.designpatterns.iterator.dinermergercafe; + +import java.util.*; + +public class CafeMenu implements Menu { + HashMap menuItems = new HashMap(); + + public CafeMenu() { + addItem("Veggie Burger and Air Fries", + "Veggie burger on a whole wheat bun, lettuce, tomato, and fries", + true, 3.99); + addItem("Soup of the day", + "A cup of the soup of the day, with a side salad", + false, 3.69); + addItem("Burrito", + "A large burrito, with whole pinto beans, salsa, guacamole", + true, 4.29); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + menuItems.put(name, menuItem); + } + + public Map getItems() { + return menuItems; + } + + public Iterator createIterator() { + return menuItems.values().iterator(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenu.java new file mode 100755 index 0000000..5199f49 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenu.java @@ -0,0 +1,51 @@ +package headfirst.designpatterns.iterator.dinermergercafe; + +import java.util.Iterator; + +public class DinerMenu implements Menu { + static final int MAX_ITEMS = 6; + int numberOfItems = 0; + MenuItem[] menuItems; + + public DinerMenu() { + menuItems = new MenuItem[MAX_ITEMS]; + + addItem("Vegetarian BLT", + "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); + addItem("BLT", + "Bacon with lettuce & tomato on whole wheat", false, 2.99); + addItem("Soup of the day", + "Soup of the day, with a side of potato salad", false, 3.29); + addItem("Hotdog", + "A hot dog, with sauerkraut, relish, onions, topped with cheese", + false, 3.05); + addItem("Steamed Veggies and Brown Rice", + "A medly of steamed vegetables over brown rice", true, 3.99); + addItem("Pasta", + "Spaghetti with Marinara Sauce, and a slice of sourdough bread", + true, 3.89); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + if (numberOfItems >= MAX_ITEMS) { + System.err.println("Sorry, menu is full! Can't add item to menu"); + } else { + menuItems[numberOfItems] = menuItem; + numberOfItems = numberOfItems + 1; + } + } + + public MenuItem[] getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return new DinerMenuIterator(menuItems); + //return new AlternatingDinerMenuIterator(menuItems); + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenuIterator.java new file mode 100755 index 0000000..1f2f46d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenuIterator.java @@ -0,0 +1,40 @@ +package headfirst.designpatterns.iterator.dinermergercafe; + +import java.util.Iterator; + +public class DinerMenuIterator implements Iterator { + MenuItem[] list; + int position = 0; + + public DinerMenuIterator(MenuItem[] list) { + this.list = list; + } + + public MenuItem next() { + MenuItem menuItem = list[position]; + position = position + 1; + return menuItem; + } + + public boolean hasNext() { + if (position >= list.length || list[position] == null) { + return false; + } else { + return true; + } + } + + public void remove() { + if (position <= 0) { + throw new IllegalStateException + ("You can't remove an item until you've done at least one next()"); + } + if (list[position-1] != null) { + for (int i = position-1; i < (list.length-1); i++) { + list[i] = list[i+1]; + } + list[list.length-1] = null; + } + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Menu.java new file mode 100755 index 0000000..4218a43 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Menu.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.iterator.dinermergercafe; + +import java.util.Iterator; + +public interface Menu { + public Iterator createIterator(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuItem.java new file mode 100755 index 0000000..0e1dbf2 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuItem.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.iterator.dinermergercafe; + +public class MenuItem { + String name; + String description; + boolean vegetarian; + double price; + + public MenuItem(String name, + String description, + boolean vegetarian, + double price) + { + this.name = name; + this.description = description; + this.vegetarian = vegetarian; + this.price = price; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public double getPrice() { + return price; + } + + public boolean isVegetarian() { + return vegetarian; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuTestDrive.java new file mode 100755 index 0000000..c19a811 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuTestDrive.java @@ -0,0 +1,29 @@ +package headfirst.designpatterns.iterator.dinermergercafe; + +public class MenuTestDrive { + public static void main(String args[]) { + PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); + DinerMenu dinerMenu = new DinerMenu(); + CafeMenu cafeMenu = new CafeMenu(); + + Waitress waitress = new Waitress(pancakeHouseMenu, dinerMenu, cafeMenu); + + waitress.printMenu(); + waitress.printVegetarianMenu(); + + System.out.println("\nCustomer asks, is the Hotdog vegetarian?"); + System.out.print("Waitress says: "); + if (waitress.isItemVegetarian("Hotdog")) { + System.out.println("Yes"); + } else { + System.out.println("No"); + } + System.out.println("\nCustomer asks, are the Waffles vegetarian?"); + System.out.print("Waitress says: "); + if (waitress.isItemVegetarian("Waffles")) { + System.out.println("Yes"); + } else { + System.out.println("No"); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/PancakeHouseMenu.java new file mode 100755 index 0000000..094fae5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/PancakeHouseMenu.java @@ -0,0 +1,49 @@ +package headfirst.designpatterns.iterator.dinermergercafe; + +import java.util.ArrayList; +import java.util.Iterator; + +public class PancakeHouseMenu implements Menu { + ArrayList menuItems; + + public PancakeHouseMenu() { + menuItems = new ArrayList(); + + addItem("K&B's Pancake Breakfast", + "Pancakes with scrambled eggs and toast", + true, + 2.99); + + addItem("Regular Pancake Breakfast", + "Pancakes with fried eggs, sausage", + false, + 2.99); + + addItem("Blueberry Pancakes", + "Pancakes made with fresh blueberries and blueberry syrup", + true, + 3.49); + + addItem("Waffles", + "Waffles with your choice of blueberries or strawberries", + true, + 3.59); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + menuItems.add(menuItem); + } + + public ArrayList getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return menuItems.iterator(); + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Waitress.java new file mode 100755 index 0000000..c04d08a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Waitress.java @@ -0,0 +1,85 @@ +package headfirst.designpatterns.iterator.dinermergercafe; + +import java.util.Iterator; + +public class Waitress { + Menu pancakeHouseMenu; + Menu dinerMenu; + Menu cafeMenu; + + public Waitress(Menu pancakeHouseMenu, Menu dinerMenu, Menu cafeMenu) { + this.pancakeHouseMenu = pancakeHouseMenu; + this.dinerMenu = dinerMenu; + this.cafeMenu = cafeMenu; + } + + public void printMenu() { + Iterator pancakeIterator = pancakeHouseMenu.createIterator(); + Iterator dinerIterator = dinerMenu.createIterator(); + Iterator cafeIterator = cafeMenu.createIterator(); + + System.out.println("MENU\n----\nBREAKFAST"); + printMenu(pancakeIterator); + System.out.println("\nLUNCH"); + printMenu(dinerIterator); + System.out.println("\nDINNER"); + printMenu(cafeIterator); + } + + private void printMenu(Iterator iterator) { + while (iterator.hasNext()) { + MenuItem menuItem = iterator.next(); + System.out.print(menuItem.getName() + ", "); + System.out.print(menuItem.getPrice() + " -- "); + System.out.println(menuItem.getDescription()); + } + } + + public void printVegetarianMenu() { + System.out.println("\nVEGETARIAN MENU\n---------------"); + printVegetarianMenu(pancakeHouseMenu.createIterator()); + printVegetarianMenu(dinerMenu.createIterator()); + printVegetarianMenu(cafeMenu.createIterator()); + } + + public boolean isItemVegetarian(String name) { + Iterator pancakeIterator = pancakeHouseMenu.createIterator(); + if (isVegetarian(name, pancakeIterator)) { + return true; + } + Iterator dinerIterator = dinerMenu.createIterator(); + if (isVegetarian(name, dinerIterator)) { + return true; + } + Iterator cafeIterator = cafeMenu.createIterator(); + if (isVegetarian(name, cafeIterator)) { + return true; + } + return false; + } + + + private void printVegetarianMenu(Iterator iterator) { + while (iterator.hasNext()) { + MenuItem menuItem = iterator.next(); + if (menuItem.isVegetarian()) { + System.out.print(menuItem.getName() + ", "); + System.out.print(menuItem.getPrice() + " -- "); + System.out.println(menuItem.getDescription()); + } + } + } + + private boolean isVegetarian(String name, Iterator iterator) { + while (iterator.hasNext()) { + MenuItem menuItem = iterator.next(); + if (menuItem.getName().equals(name)) { + if (menuItem.isVegetarian()) { + return true; + } + } + } + return false; + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/AlternatingDinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/AlternatingDinerMenuIterator.java new file mode 100755 index 0000000..2e69d99 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/AlternatingDinerMenuIterator.java @@ -0,0 +1,30 @@ +package headfirst.designpatterns.iterator.dinermergeri; + +import java.util.Iterator; +import java.util.Calendar; + +public class AlternatingDinerMenuIterator implements Iterator { + MenuItem[] items; + int position; + + public AlternatingDinerMenuIterator(MenuItem[] items) { + this.items = items; + position = Calendar.DAY_OF_WEEK % 2; + } + public Object next() { + MenuItem menuItem = items[position]; + position = position + 2; + return menuItem; + } + public boolean hasNext() { + if (position >= items.length || items[position] == null) { + return false; + } else { + return true; + } + } + public void remove() { + throw new UnsupportedOperationException( + "Alternating Diner Menu Iterator does not support remove()"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenu.java new file mode 100755 index 0000000..13a8a82 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenu.java @@ -0,0 +1,51 @@ +package headfirst.designpatterns.iterator.dinermergeri; + +import java.util.Iterator; + +public class DinerMenu implements Menu { + static final int MAX_ITEMS = 6; + int numberOfItems = 0; + MenuItem[] menuItems; + + public DinerMenu() { + menuItems = new MenuItem[MAX_ITEMS]; + + addItem("Vegetarian BLT", + "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); + addItem("BLT", + "Bacon with lettuce & tomato on whole wheat", false, 2.99); + addItem("Soup of the day", + "Soup of the day, with a side of potato salad", false, 3.29); + addItem("Hotdog", + "A hot dog, with saurkraut, relish, onions, topped with cheese", + false, 3.05); + addItem("Steamed Veggies and Brown Rice", + "Steamed vegetables over brown rice", true, 3.99); + addItem("Pasta", + "Spaghetti with Marinara Sauce, and a slice of sourdough bread", + true, 3.89); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + if (numberOfItems >= MAX_ITEMS) { + System.err.println("Sorry, menu is full! Can't add item to menu"); + } else { + menuItems[numberOfItems] = menuItem; + numberOfItems = numberOfItems + 1; + } + } + + public MenuItem[] getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return new DinerMenuIterator(menuItems); + //return new AlternatingDinerMenuIterator(menuItems); + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenuIterator.java new file mode 100755 index 0000000..a4e88b1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenuIterator.java @@ -0,0 +1,40 @@ +package headfirst.designpatterns.iterator.dinermergeri; + +import java.util.Iterator; + +public class DinerMenuIterator implements Iterator { + MenuItem[] list; + int position = 0; + + public DinerMenuIterator(MenuItem[] list) { + this.list = list; + } + + public MenuItem next() { + MenuItem menuItem = list[position]; + position = position + 1; + return menuItem; + } + + public boolean hasNext() { + if (position >= list.length || list[position] == null) { + return false; + } else { + return true; + } + } + + public void remove() { + if (position <= 0) { + throw new IllegalStateException + ("You can't remove an item until you've done at least one next()"); + } + if (list[position-1] != null) { + for (int i = position-1; i < (list.length-1); i++) { + list[i] = list[i+1]; + } + list[list.length-1] = null; + } + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Menu.java new file mode 100755 index 0000000..d1393e9 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Menu.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.iterator.dinermergeri; + +import java.util.Iterator; + +public interface Menu { + public Iterator createIterator(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuItem.java new file mode 100755 index 0000000..bb23e90 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuItem.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.iterator.dinermergeri; + +public class MenuItem { + String name; + String description; + boolean vegetarian; + double price; + + public MenuItem(String name, + String description, + boolean vegetarian, + double price) + { + this.name = name; + this.description = description; + this.vegetarian = vegetarian; + this.price = price; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public double getPrice() { + return price; + } + + public boolean isVegetarian() { + return vegetarian; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuTestDrive.java new file mode 100755 index 0000000..8dbe7bb --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuTestDrive.java @@ -0,0 +1,30 @@ +package headfirst.designpatterns.iterator.dinermergeri; + +public class MenuTestDrive { + public static void main(String args[]) { + PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); + DinerMenu dinerMenu = new DinerMenu(); + Waitress waitress = new Waitress(pancakeHouseMenu, dinerMenu); + //waitress.printMenu(); + // -- added 12/30/2016 + waitress.printMenu(1); + // --- + //waitress.printVegetarianMenu(); + + System.out.println("\nCustomer asks, is the Hotdog vegetarian?"); + System.out.print("Waitress says: "); + if (waitress.isItemVegetarian("Hotdog")) { + System.out.println("Yes"); + } else { + System.out.println("No"); + } + System.out.println("\nCustomer asks, are the Waffles vegetarian?"); + System.out.print("Waitress says: "); + if (waitress.isItemVegetarian("Waffles")) { + System.out.println("Yes"); + } else { + System.out.println("No"); + } + + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/PancakeHouseMenu.java new file mode 100755 index 0000000..544cbb7 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/PancakeHouseMenu.java @@ -0,0 +1,49 @@ +package headfirst.designpatterns.iterator.dinermergeri; + +import java.util.ArrayList; +import java.util.Iterator; + +public class PancakeHouseMenu implements Menu { + ArrayList menuItems; + + public PancakeHouseMenu() { + menuItems = new ArrayList(); + + addItem("K&B's Pancake Breakfast", + "Pancakes with scrambled eggs, and toast", + true, + 2.99); + + addItem("Regular Pancake Breakfast", + "Pancakes with fried eggs, sausage", + false, + 2.99); + + addItem("Blueberry Pancakes", + "Pancakes made with fresh blueberries, and blueberry syrup", + true, + 3.49); + + addItem("Waffles", + "Waffles, with your choice of blueberries or strawberries", + true, + 3.59); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + menuItems.add(menuItem); + } + + public ArrayList getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return menuItems.iterator(); + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Waitress.java new file mode 100755 index 0000000..a645239 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Waitress.java @@ -0,0 +1,97 @@ +package headfirst.designpatterns.iterator.dinermergeri; + +import java.util.Iterator; +import java.util.ArrayList; + +public class Waitress { + Menu pancakeHouseMenu; + Menu dinerMenu; + + public Waitress(Menu pancakeHouseMenu, Menu dinerMenu) { + this.pancakeHouseMenu = pancakeHouseMenu; + this.dinerMenu = dinerMenu; + } + + // --- added 12/30/2016 - not in original code + public void printMenu(int withNewConstructs) { + ArrayList breakfastItems = ((PancakeHouseMenu) pancakeHouseMenu).getMenuItems(); + //pMenu.forEach(m -> printMenuItem(m)); + for (MenuItem m : breakfastItems) { + printMenuItem(m); + } + + MenuItem[] lunchItems = ((DinerMenu) dinerMenu).getMenuItems(); + for (MenuItem m : lunchItems) { + printMenuItem(m); + } + } + + public void printMenuItem(MenuItem menuItem) { + System.out.print(menuItem.getName() + ", "); + System.out.print(menuItem.getPrice() + " -- "); + System.out.println(menuItem.getDescription()); + } + // --- + + public void printMenu() { + Iterator pancakeIterator = pancakeHouseMenu.createIterator(); + Iterator dinerIterator = dinerMenu.createIterator(); + + System.out.println("MENU\n----\nBREAKFAST"); + printMenu(pancakeIterator); + System.out.println("\nLUNCH"); + printMenu(dinerIterator); + } + + private void printMenu(Iterator iterator) { + while (iterator.hasNext()) { + MenuItem menuItem = iterator.next(); + System.out.print(menuItem.getName() + ", "); + System.out.print(menuItem.getPrice() + " -- "); + System.out.println(menuItem.getDescription()); + } + } + + public void printVegetarianMenu() { + System.out.println("\nVEGETARIAN MENU\n----\nBREAKFAST"); + printVegetarianMenu(pancakeHouseMenu.createIterator()); + System.out.println("\nLUNCH"); + printVegetarianMenu(dinerMenu.createIterator()); + } + + public boolean isItemVegetarian(String name) { + Iterator pancakeIterator = pancakeHouseMenu.createIterator(); + if (isVegetarian(name, pancakeIterator)) { + return true; + } + Iterator dinerIterator = dinerMenu.createIterator(); + if (isVegetarian(name, dinerIterator)) { + return true; + } + return false; + } + + + private void printVegetarianMenu(Iterator iterator) { + while (iterator.hasNext()) { + MenuItem menuItem = iterator.next(); + if (menuItem.isVegetarian()) { + System.out.print(menuItem.getName()); + System.out.println("\t\t" + menuItem.getPrice()); + System.out.println("\t" + menuItem.getDescription()); + } + } + } + + private boolean isVegetarian(String name, Iterator iterator) { + while (iterator.hasNext()) { + MenuItem menuItem = iterator.next(); + if (menuItem.getName().equals(name)) { + if (menuItem.isVegetarian()) { + return true; + } + } + } + return false; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenu.java new file mode 100755 index 0000000..59a15a1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenu.java @@ -0,0 +1,51 @@ +package headfirst.designpatterns.iterator.implicit; + +import java.util.Iterator; + +public class DinerMenu implements Menu { + static final int MAX_ITEMS = 6; + int numberOfItems = 0; + MenuItem[] menuItems; + + public DinerMenu() { + menuItems = new MenuItem[MAX_ITEMS]; + + addItem("Vegetarian BLT", + "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); + addItem("BLT", + "Bacon with lettuce & tomato on whole wheat", false, 2.99); + addItem("Soup of the day", + "Soup of the day, with a side of potato salad", false, 3.29); + addItem("Hotdog", + "A hot dog, with saurkraut, relish, onions, topped with cheese", + false, 3.05); + addItem("Steamed Veggies and Brown Rice", + "Steamed vegetables over brown rice", true, 3.99); + addItem("Pasta", + "Spaghetti with Marinara Sauce, and a slice of sourdough bread", + true, 3.89); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + if (numberOfItems >= MAX_ITEMS) { + System.err.println("Sorry, menu is full! Can't add item to menu"); + } else { + menuItems[numberOfItems] = menuItem; + numberOfItems = numberOfItems + 1; + } + } + + public MenuItem[] getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return new DinerMenuIterator(menuItems); + //return new AlternatingDinerMenuIterator(menuItems); + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenuIterator.java new file mode 100755 index 0000000..062c0a8 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenuIterator.java @@ -0,0 +1,40 @@ +package headfirst.designpatterns.iterator.implicit; + +import java.util.Iterator; + +public class DinerMenuIterator implements Iterator { + MenuItem[] list; + int position = 0; + + public DinerMenuIterator(MenuItem[] list) { + this.list = list; + } + + public MenuItem next() { + MenuItem menuItem = list[position]; + position = position + 1; + return menuItem; + } + + public boolean hasNext() { + if (position >= list.length || list[position] == null) { + return false; + } else { + return true; + } + } + + public void remove() { + if (position <= 0) { + throw new IllegalStateException + ("You can't remove an item until you've done at least one next()"); + } + if (list[position-1] != null) { + for (int i = position-1; i < (list.length-1); i++) { + list[i] = list[i+1]; + } + list[list.length-1] = null; + } + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Menu.java new file mode 100755 index 0000000..1973085 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Menu.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.iterator.implicit; + +import java.util.Iterator; + +public interface Menu { + public Iterator createIterator(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuItem.java new file mode 100755 index 0000000..9898f38 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuItem.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.iterator.implicit; + +public class MenuItem { + String name; + String description; + boolean vegetarian; + double price; + + public MenuItem(String name, + String description, + boolean vegetarian, + double price) + { + this.name = name; + this.description = description; + this.vegetarian = vegetarian; + this.price = price; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public double getPrice() { + return price; + } + + public boolean isVegetarian() { + return vegetarian; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuTestDrive.java new file mode 100755 index 0000000..4d6841d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuTestDrive.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.iterator.implicit; + +public class MenuTestDrive { + public static void main(String args[]) { + PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); + DinerMenu dinerMenu = new DinerMenu(); + Waitress waitress = new Waitress(pancakeHouseMenu, dinerMenu); + // Use implicit iteration + waitress.printMenu(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/PancakeHouseMenu.java new file mode 100755 index 0000000..86e2ae7 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/PancakeHouseMenu.java @@ -0,0 +1,49 @@ +package headfirst.designpatterns.iterator.implicit; + +import java.util.ArrayList; +import java.util.Iterator; + +public class PancakeHouseMenu implements Menu { + ArrayList menuItems; + + public PancakeHouseMenu() { + menuItems = new ArrayList(); + + addItem("K&B's Pancake Breakfast", + "Pancakes with scrambled eggs, and toast", + true, + 2.99); + + addItem("Regular Pancake Breakfast", + "Pancakes with fried eggs, sausage", + false, + 2.99); + + addItem("Blueberry Pancakes", + "Pancakes made with fresh blueberries, and blueberry syrup", + true, + 3.49); + + addItem("Waffles", + "Waffles, with your choice of blueberries or strawberries", + true, + 3.59); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + menuItems.add(menuItem); + } + + public ArrayList getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return menuItems.iterator(); + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Waitress.java new file mode 100755 index 0000000..7af1779 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Waitress.java @@ -0,0 +1,34 @@ +package headfirst.designpatterns.iterator.implicit; + +import java.util.Iterator; +import java.util.ArrayList; +import java.util.List; + +public class Waitress { + Menu pancakeHouseMenu; + Menu dinerMenu; + + public Waitress(Menu pancakeHouseMenu, Menu dinerMenu) { + this.pancakeHouseMenu = pancakeHouseMenu; + this.dinerMenu = dinerMenu; + } + + // implicit iteration + public void printMenu() { + List breakfastItems = ((PancakeHouseMenu) pancakeHouseMenu).getMenuItems(); + for (MenuItem m : breakfastItems) { + printMenuItem(m); + } + + MenuItem[] lunchItems = ((DinerMenu) dinerMenu).getMenuItems(); + for (MenuItem m : lunchItems) { + printMenuItem(m); + } + } + + public void printMenuItem(MenuItem menuItem) { + System.out.print(menuItem.getName() + ", "); + System.out.print(menuItem.getPrice() + " -- "); + System.out.println(menuItem.getDescription()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenu.java new file mode 100755 index 0000000..42e7d60 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenu.java @@ -0,0 +1,51 @@ +package headfirst.designpatterns.iterator.transition; + +import java.util.Iterator; + +public class DinerMenu implements Menu { + static final int MAX_ITEMS = 6; + int numberOfItems = 0; + MenuItem[] menuItems; + + public DinerMenu() { + menuItems = new MenuItem[MAX_ITEMS]; + + addItem("Vegetarian BLT", + "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); + addItem("BLT", + "Bacon with lettuce & tomato on whole wheat", false, 2.99); + addItem("Soup of the day", + "Soup of the day, with a side of potato salad", false, 3.29); + addItem("Hotdog", + "A hot dog, with sauerkraut, relish, onions, topped with cheese", + false, 3.05); + addItem("Steamed Veggies and Brown Rice", + "Steamed vegetables over brown rice", true, 3.99); + addItem("Pasta", + "Spaghetti with Marinara Sauce, and a slice of sourdough bread", + true, 3.89); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + if (numberOfItems >= MAX_ITEMS) { + System.err.println("Sorry, menu is full! Can't add item to menu"); + } else { + menuItems[numberOfItems] = menuItem; + numberOfItems = numberOfItems + 1; + } + } + + public MenuItem[] getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return new DinerMenuIterator(menuItems); + //return new AlternatingDinerMenuIterator(menuItems); + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenuIterator.java new file mode 100755 index 0000000..009e5e6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenuIterator.java @@ -0,0 +1,40 @@ +package headfirst.designpatterns.iterator.transition; + +import java.util.Iterator; + +public class DinerMenuIterator implements Iterator { + MenuItem[] list; + int position = 0; + + public DinerMenuIterator(MenuItem[] list) { + this.list = list; + } + + public MenuItem next() { + MenuItem menuItem = list[position]; + position = position + 1; + return menuItem; + } + + public boolean hasNext() { + if (position >= list.length || list[position] == null) { + return false; + } else { + return true; + } + } + + public void remove() { + if (position <= 0) { + throw new IllegalStateException + ("You can't remove an item until you've done at least one next()"); + } + if (list[position-1] != null) { + for (int i = position-1; i < (list.length-1); i++) { + list[i] = list[i+1]; + } + list[list.length-1] = null; + } + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Menu.java new file mode 100755 index 0000000..7b8af28 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Menu.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.iterator.transition; + +import java.util.Iterator; + +public interface Menu { + public Iterator createIterator(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuItem.java new file mode 100755 index 0000000..cf38d31 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuItem.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.iterator.transition; + +public class MenuItem { + String name; + String description; + boolean vegetarian; + double price; + + public MenuItem(String name, + String description, + boolean vegetarian, + double price) + { + this.name = name; + this.description = description; + this.vegetarian = vegetarian; + this.price = price; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public double getPrice() { + return price; + } + + public boolean isVegetarian() { + return vegetarian; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuTestDrive.java new file mode 100755 index 0000000..678536e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuTestDrive.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.iterator.transition; +import java.util.ArrayList; + +public class MenuTestDrive { + public static void main(String args[]) { + PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); + DinerMenu dinerMenu = new DinerMenu(); + ArrayList menus = new ArrayList(); + menus.add(pancakeHouseMenu); + menus.add(dinerMenu); + Waitress waitress = new Waitress(menus); + waitress.printMenu(); + + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/PancakeHouseMenu.java new file mode 100755 index 0000000..bddb9d3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/PancakeHouseMenu.java @@ -0,0 +1,49 @@ +package headfirst.designpatterns.iterator.transition; + +import java.util.ArrayList; +import java.util.Iterator; + +public class PancakeHouseMenu implements Menu { + ArrayList menuItems; + + public PancakeHouseMenu() { + menuItems = new ArrayList(); + + addItem("K&B's Pancake Breakfast", + "Pancakes with scrambled eggs and toast", + true, + 2.99); + + addItem("Regular Pancake Breakfast", + "Pancakes with fried eggs, sausage", + false, + 2.99); + + addItem("Blueberry Pancakes", + "Pancakes made with fresh blueberries and blueberry syrup", + true, + 3.49); + + addItem("Waffles", + "Waffles with your choice of blueberries or strawberries", + true, + 3.59); + } + + public void addItem(String name, String description, + boolean vegetarian, double price) + { + MenuItem menuItem = new MenuItem(name, description, vegetarian, price); + menuItems.add(menuItem); + } + + public ArrayList getMenuItems() { + return menuItems; + } + + public Iterator createIterator() { + return menuItems.iterator(); + } + + // other menu methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Waitress.java new file mode 100755 index 0000000..2d35dde --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Waitress.java @@ -0,0 +1,29 @@ +package headfirst.designpatterns.iterator.transition; +import java.util.*; + + +public class Waitress { + ArrayList menus; + + + public Waitress(ArrayList menus) { + this.menus = menus; + } + + public void printMenu() { + Iterator menuIterator = menus.iterator(); + while(menuIterator.hasNext()) { + Menu menu = (Menu)menuIterator.next(); + printMenu(menu.createIterator()); + } + } + + void printMenu(Iterator iterator) { + while (iterator.hasNext()) { + MenuItem menuItem = (MenuItem)iterator.next(); + System.out.print(menuItem.getName() + ", "); + System.out.print(menuItem.getPrice() + " -- "); + System.out.println(menuItem.getDescription()); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EI.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EI.java new file mode 100755 index 0000000..8e02835 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EI.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.iterenum; + +import java.util.*; + +public class EI { + public static void main (String args[]) { + Vector v = new Vector(Arrays.asList(args)); + + System.out.println("Using enumeration with Vector"); + Enumeration enumeration = v.elements(); + while (enumeration.hasMoreElements()) { + System.out.println(enumeration.nextElement()); + } + + System.out.println("Using iterator with Vector"); + Iterator iterator = v.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + + System.out.println("Using for/in with array of Strings"); + for (String color : args) { + System.out.println(color); + } + + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIterator.java new file mode 100755 index 0000000..c4721cc --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIterator.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.iterenum; + +import java.util.*; + +public class EnumerationIterator implements Iterator { + Enumeration enumeration; + + public EnumerationIterator(Enumeration enumeration) { + this.enumeration = enumeration; + } + + public boolean hasNext() { + return enumeration.hasMoreElements(); + } + + public Object next() { + return enumeration.nextElement(); + } + + public void remove() { + throw new UnsupportedOperationException(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIteratorTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIteratorTestDrive.java new file mode 100755 index 0000000..10e572f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIteratorTestDrive.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.iterenum; + +import java.util.*; + +public class EnumerationIteratorTestDrive { + public static void main (String args[]) { + Vector v = new Vector(Arrays.asList(args)); + Iterator iterator = new EnumerationIterator(v.elements()); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumeration.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumeration.java new file mode 100755 index 0000000..49ea038 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumeration.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.iterenum; + +import java.util.*; + +public class IteratorEnumeration implements Enumeration { + Iterator iterator; + + public IteratorEnumeration(Iterator iterator) { + this.iterator = iterator; + } + + public boolean hasMoreElements() { + return iterator.hasNext(); + } + + public Object nextElement() { + return iterator.next(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumerationTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumerationTestDrive.java new file mode 100755 index 0000000..74a3538 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumerationTestDrive.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.iterenum; + +import java.util.*; + +public class IteratorEnumerationTestDrive { + public static void main (String args[]) { + ArrayList l = new ArrayList(Arrays.asList(args)); + Enumeration enumeration = new IteratorEnumeration(l.iterator()); + while (enumeration.hasMoreElements()) { + System.out.println(enumeration.nextElement()); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Example.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Example.java new file mode 100755 index 0000000..deda165 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Example.java @@ -0,0 +1,14 @@ +package headfirst.designpatterns.observer.simple; + +public class Example { + + public static void main(String[] args) { + SimpleSubject simpleSubject = new SimpleSubject(); + + SimpleObserver simpleObserver = new SimpleObserver(simpleSubject); + + simpleSubject.setValue(80); + + simpleSubject.removeObserver(simpleObserver); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Observer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Observer.java new file mode 100755 index 0000000..8e88a86 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Observer.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.observer.simple; + +public interface Observer { + public void update(int value); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleObserver.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleObserver.java new file mode 100755 index 0000000..90c7055 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleObserver.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.observer.simple; + +public class SimpleObserver implements Observer { + private int value; + private Subject simpleSubject; + + public SimpleObserver(Subject simpleSubject) { + this.simpleSubject = simpleSubject; + simpleSubject.registerObserver(this); + } + + public void update(int value) { + this.value = value; + display(); + } + + public void display() { + System.out.println("Value: " + value); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleSubject.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleSubject.java new file mode 100644 index 0000000..ef55b27 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleSubject.java @@ -0,0 +1,31 @@ +package headfirst.designpatterns.observer.simple; + +import java.util.*; + +public class SimpleSubject implements Subject { + private List observers; + private int value = 0; + + public SimpleSubject() { + observers = new ArrayList(); + } + + public void registerObserver(Observer o) { + observers.add(o); + } + + public void removeObserver(Observer o) { + observers.remove(o); + } + + public void notifyObservers() { + for (Observer observer : observers) { + observer.update(value); + } + } + + public void setValue(int value) { + this.value = value; + notifyObservers(); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Subject.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Subject.java new file mode 100755 index 0000000..ac33a79 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Subject.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.observer.simple; + +public interface Subject { + public void registerObserver(Observer o); + public void removeObserver(Observer o); + public void notifyObservers(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/Example.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/Example.java new file mode 100755 index 0000000..c94dd5e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/Example.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.observer.simpleobservable; + +public class Example { + + public static void main(String[] args) { + SimpleSubject simpleSubject = new SimpleSubject(); + + SimpleObserver simpleObserver = new SimpleObserver(simpleSubject); + + simpleSubject.setValue(80); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleObserver.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleObserver.java new file mode 100755 index 0000000..97da993 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleObserver.java @@ -0,0 +1,30 @@ +package headfirst.designpatterns.observer.simpleobservable; + +import java.util.Observable; +import java.util.Observer; + +public class SimpleObserver implements Observer { + private int value; + private Observable observable; + + public SimpleObserver(Observable observable) { + this.observable = observable; + observable.addObserver((Observer) this); + } + + public void display() { + System.out.println("Value: " + value); + } + + @Override + public void update(Observable o, Object arg) { + System.out.println(arg); + this.value = (int) arg; + display(); + if (o instanceof SimpleSubject) { + SimpleSubject simpleSubject = (SimpleSubject)o; + this.value = simpleSubject.getValue(); + display(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleSubject.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleSubject.java new file mode 100644 index 0000000..7462c2d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleSubject.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.observer.simpleobservable; + +import java.util.Observable; + +public class SimpleSubject extends Observable { + private int value = 0; + + public SimpleSubject() { } + + public void setValue(int value) { + this.value = value; + setChanged(); + notifyObservers(value); + } + + public int getValue() { + return this.value; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/swing/SwingObserverExample.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/swing/SwingObserverExample.java new file mode 100755 index 0000000..930bdf1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/swing/SwingObserverExample.java @@ -0,0 +1,55 @@ +package headfirst.designpatterns.observer.swing; + +import java.awt.*; +import javax.swing.*; + +public class SwingObserverExample { + JFrame frame; + + public static void main(String[] args) { + SwingObserverExample example = new SwingObserverExample(); + example.go(); + } + + public void go() { + frame = new JFrame(); + + JButton button = new JButton("Should I do it?"); + + // Without lambdas + //button.addActionListener(new AngelListener()); + //button.addActionListener(new DevilListener()); + + // With lambdas + button.addActionListener(event -> + System.out.println("Don't do it, you might regret it!") + ); + button.addActionListener(event -> + System.out.println("Come on, do it!") + ); + frame.getContentPane().add(BorderLayout.CENTER, button); + + // Set frame properties + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.getContentPane().add(BorderLayout.CENTER, button); + frame.setSize(300,300); + frame.setVisible(true); + } + + /* + * Remove these two inner classes to use lambda expressions instead. + * + class AngelListener implements ActionListener { + public void actionPerformed(ActionEvent event) { + System.out.println("Don't do it, you might regret it!"); + } + } + + class DevilListener implements ActionListener { + public void actionPerformed(ActionEvent event) { + System.out.println("Come on, do it!"); + } + } + */ + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/CurrentConditionsDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/CurrentConditionsDisplay.java new file mode 100755 index 0000000..3ca8c23 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/CurrentConditionsDisplay.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.observer.weather; + +public class CurrentConditionsDisplay implements Observer, DisplayElement { + private float temperature; + private float humidity; + private WeatherData weatherData; + + public CurrentConditionsDisplay(WeatherData weatherData) { + this.weatherData = weatherData; + weatherData.registerObserver(this); + } + + public void update(float temperature, float humidity, float pressure) { + this.temperature = temperature; + this.humidity = humidity; + display(); + } + + public void display() { + System.out.println("Current conditions: " + temperature + + "F degrees and " + humidity + "% humidity"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/DisplayElement.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/DisplayElement.java new file mode 100755 index 0000000..dd62b65 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/DisplayElement.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.observer.weather; + +public interface DisplayElement { + public void display(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/ForecastDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/ForecastDisplay.java new file mode 100755 index 0000000..3523692 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/ForecastDisplay.java @@ -0,0 +1,30 @@ +package headfirst.designpatterns.observer.weather; + +public class ForecastDisplay implements Observer, DisplayElement { + private float currentPressure = 29.92f; + private float lastPressure; + private WeatherData weatherData; + + public ForecastDisplay(WeatherData weatherData) { + this.weatherData = weatherData; + weatherData.registerObserver(this); + } + + public void update(float temp, float humidity, float pressure) { + lastPressure = currentPressure; + currentPressure = pressure; + + display(); + } + + public void display() { + System.out.print("Forecast: "); + if (currentPressure > lastPressure) { + System.out.println("Improving weather on the way!"); + } else if (currentPressure == lastPressure) { + System.out.println("More of the same"); + } else if (currentPressure < lastPressure) { + System.out.println("Watch out for cooler, rainy weather"); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/HeatIndexDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/HeatIndexDisplay.java new file mode 100755 index 0000000..ac98db3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/HeatIndexDisplay.java @@ -0,0 +1,32 @@ +package headfirst.designpatterns.observer.weather; + +public class HeatIndexDisplay implements Observer, DisplayElement { + float heatIndex = 0.0f; + private WeatherData weatherData; + + public HeatIndexDisplay(WeatherData weatherData) { + this.weatherData = weatherData; + weatherData.registerObserver(this); + } + + public void update(float t, float rh, float pressure) { + heatIndex = computeHeatIndex(t, rh); + display(); + } + + private float computeHeatIndex(float t, float rh) { + float index = (float)((16.923 + (0.185212 * t) + (5.37941 * rh) - (0.100254 * t * rh) + + (0.00941695 * (t * t)) + (0.00728898 * (rh * rh)) + + (0.000345372 * (t * t * rh)) - (0.000814971 * (t * rh * rh)) + + (0.0000102102 * (t * t * rh * rh)) - (0.000038646 * (t * t * t)) + (0.0000291583 * + (rh * rh * rh)) + (0.00000142721 * (t * t * t * rh)) + + (0.000000197483 * (t * rh * rh * rh)) - (0.0000000218429 * (t * t * t * rh * rh)) + + 0.000000000843296 * (t * t * rh * rh * rh)) - + (0.0000000000481975 * (t * t * t * rh * rh * rh))); + return index; + } + + public void display() { + System.out.println("Heat index is " + heatIndex); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Observer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Observer.java new file mode 100755 index 0000000..e9a67e3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Observer.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.observer.weather; + +public interface Observer { + public void update(float temp, float humidity, float pressure); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/StatisticsDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/StatisticsDisplay.java new file mode 100755 index 0000000..96f2d76 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/StatisticsDisplay.java @@ -0,0 +1,34 @@ +package headfirst.designpatterns.observer.weather; + +public class StatisticsDisplay implements Observer, DisplayElement { + private float maxTemp = 0.0f; + private float minTemp = 200; + private float tempSum= 0.0f; + private int numReadings; + private WeatherData weatherData; + + public StatisticsDisplay(WeatherData weatherData) { + this.weatherData = weatherData; + weatherData.registerObserver(this); + } + + public void update(float temp, float humidity, float pressure) { + tempSum += temp; + numReadings++; + + if (temp > maxTemp) { + maxTemp = temp; + } + + if (temp < minTemp) { + minTemp = temp; + } + + display(); + } + + public void display() { + System.out.println("Avg/Max/Min temperature = " + (tempSum / numReadings) + + "/" + maxTemp + "/" + minTemp); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Subject.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Subject.java new file mode 100755 index 0000000..ab06ddd --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Subject.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.observer.weather; + +public interface Subject { + public void registerObserver(Observer o); + public void removeObserver(Observer o); + public void notifyObservers(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherData.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherData.java new file mode 100755 index 0000000..f291846 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherData.java @@ -0,0 +1,52 @@ +package headfirst.designpatterns.observer.weather; + +import java.util.*; + +public class WeatherData implements Subject { + private List observers; + private float temperature; + private float humidity; + private float pressure; + + public WeatherData() { + observers = new ArrayList(); + } + + public void registerObserver(Observer o) { + observers.add(o); + } + + public void removeObserver(Observer o) { + observers.remove(o); + } + + public void notifyObservers() { + for (Observer observer : observers) { + observer.update(temperature, humidity, pressure); + } + } + + public void measurementsChanged() { + notifyObservers(); + } + + public void setMeasurements(float temperature, float humidity, float pressure) { + this.temperature = temperature; + this.humidity = humidity; + this.pressure = pressure; + measurementsChanged(); + } + + public float getTemperature() { + return temperature; + } + + public float getHumidity() { + return humidity; + } + + public float getPressure() { + return pressure; + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStation.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStation.java new file mode 100755 index 0000000..d53f0a6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStation.java @@ -0,0 +1,20 @@ +package headfirst.designpatterns.observer.weather; + +public class WeatherStation { + + public static void main(String[] args) { + WeatherData weatherData = new WeatherData(); + + CurrentConditionsDisplay currentDisplay = + new CurrentConditionsDisplay(weatherData); + StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData); + ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData); + + weatherData.setMeasurements(80, 65, 30.4f); + weatherData.setMeasurements(82, 70, 29.2f); + weatherData.setMeasurements(78, 90, 29.2f); + + weatherData.removeObserver(forecastDisplay); + weatherData.setMeasurements(62, 90, 28.1f); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStationHeatIndex.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStationHeatIndex.java new file mode 100755 index 0000000..eb84f3a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStationHeatIndex.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.observer.weather; + +public class WeatherStationHeatIndex { + + public static void main(String[] args) { + WeatherData weatherData = new WeatherData(); + CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(weatherData); + StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData); + ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData); + HeatIndexDisplay heatIndexDisplay = new HeatIndexDisplay(weatherData); + + weatherData.setMeasurements(80, 65, 30.4f); + weatherData.setMeasurements(82, 70, 29.2f); + weatherData.setMeasurements(78, 90, 29.2f); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/CurrentConditionsDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/CurrentConditionsDisplay.java new file mode 100755 index 0000000..d08c57c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/CurrentConditionsDisplay.java @@ -0,0 +1,29 @@ +package headfirst.designpatterns.observer.weatherobservable; + +import java.util.Observable; +import java.util.Observer; + +public class CurrentConditionsDisplay implements Observer, DisplayElement { + Observable observable; + private float temperature; + private float humidity; + + public CurrentConditionsDisplay(Observable observable) { + this.observable = observable; + observable.addObserver(this); + } + + public void update(Observable obs, Object arg) { + if (obs instanceof WeatherData) { + WeatherData weatherData = (WeatherData)obs; + this.temperature = weatherData.getTemperature(); + this.humidity = weatherData.getHumidity(); + display(); + } + } + + public void display() { + System.out.println("Current conditions: " + temperature + + "F degrees and " + humidity + "% humidity"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/DisplayElement.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/DisplayElement.java new file mode 100755 index 0000000..dc5d083 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/DisplayElement.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.observer.weatherobservable; + +public interface DisplayElement { + public void display(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/ForecastDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/ForecastDisplay.java new file mode 100755 index 0000000..6eb1f4b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/ForecastDisplay.java @@ -0,0 +1,33 @@ +package headfirst.designpatterns.observer.weatherobservable; + +import java.util.Observable; +import java.util.Observer; + +public class ForecastDisplay implements Observer, DisplayElement { + private float currentPressure = 29.92f; + private float lastPressure; + + public ForecastDisplay(Observable observable) { + observable.addObserver(this); + } + + public void update(Observable observable, Object arg) { + if (observable instanceof WeatherData) { + WeatherData weatherData = (WeatherData)observable; + lastPressure = currentPressure; + currentPressure = weatherData.getPressure(); + display(); + } + } + + public void display() { + System.out.print("Forecast: "); + if (currentPressure > lastPressure) { + System.out.println("Improving weather on the way!"); + } else if (currentPressure == lastPressure) { + System.out.println("More of the same"); + } else if (currentPressure < lastPressure) { + System.out.println("Watch out for cooler, rainy weather"); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/HeatIndexDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/HeatIndexDisplay.java new file mode 100755 index 0000000..2e43d1d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/HeatIndexDisplay.java @@ -0,0 +1,42 @@ +package headfirst.designpatterns.observer.weatherobservable; + +import java.util.Observable; +import java.util.Observer; + +public class HeatIndexDisplay implements Observer, DisplayElement { + float heatIndex = 0.0f; + + public HeatIndexDisplay(Observable observable) { + observable.addObserver(this); + } + + public void update(Observable observable, Object arg) { + if (observable instanceof WeatherData) { + WeatherData weatherData = (WeatherData)observable; + float t = weatherData.getTemperature(); + float rh = weatherData.getHumidity(); + heatIndex = (float) + ( + (16.923 + (0.185212 * t)) + + (5.37941 * rh) - + (0.100254 * t * rh) + + (0.00941695 * (t * t)) + + (0.00728898 * (rh * rh)) + + (0.000345372 * (t * t * rh)) - + (0.000814971 * (t * rh * rh)) + + (0.0000102102 * (t * t * rh * rh)) - + (0.000038646 * (t * t * t)) + + (0.0000291583 * (rh * rh * rh)) + + (0.00000142721 * (t * t * t * rh)) + + (0.000000197483 * (t * rh * rh * rh)) - + (0.0000000218429 * (t * t * t * rh * rh)) + + (0.000000000843296 * (t * t * rh * rh * rh)) - + (0.0000000000481975 * (t * t * t * rh * rh * rh))); + display(); + } + } + + public void display() { + System.out.println("Heat index is " + heatIndex); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/StatisticsDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/StatisticsDisplay.java new file mode 100755 index 0000000..216fc6c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/StatisticsDisplay.java @@ -0,0 +1,39 @@ +package headfirst.designpatterns.observer.weatherobservable; + +import java.util.Observable; +import java.util.Observer; + +public class StatisticsDisplay implements Observer, DisplayElement { + private float maxTemp = 0.0f; + private float minTemp = 200; + private float tempSum= 0.0f; + private int numReadings; + + public StatisticsDisplay(Observable observable) { + observable.addObserver(this); + } + + public void update(Observable observable, Object arg) { + if (observable instanceof WeatherData) { + WeatherData weatherData = (WeatherData)observable; + float temp = weatherData.getTemperature(); + tempSum += temp; + numReadings++; + + if (temp > maxTemp) { + maxTemp = temp; + } + + if (temp < minTemp) { + minTemp = temp; + } + + display(); + } + } + + public void display() { + System.out.println("Avg/Max/Min temperature = " + (tempSum / numReadings) + + "/" + maxTemp + "/" + minTemp); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherData.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherData.java new file mode 100755 index 0000000..569a50e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherData.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.observer.weatherobservable; + +import java.util.Observable; + +public class WeatherData extends Observable { + private float temperature; + private float humidity; + private float pressure; + + public WeatherData() { } + + public void measurementsChanged() { + setChanged(); + notifyObservers(); + } + + public void setMeasurements(float temperature, float humidity, float pressure) { + this.temperature = temperature; + this.humidity = humidity; + this.pressure = pressure; + measurementsChanged(); + } + + public float getTemperature() { + return temperature; + } + + public float getHumidity() { + return humidity; + } + + public float getPressure() { + return pressure; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStation.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStation.java new file mode 100755 index 0000000..ad82428 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStation.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.observer.weatherobservable; + +import java.util.Observable; + +public class WeatherStation { + + public static void main(String[] args) { + WeatherData weatherData = new WeatherData(); + + CurrentConditionsDisplay currentConditions = new CurrentConditionsDisplay(weatherData); + StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData); + ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData); + + weatherData.setMeasurements(80, 65, 30.4f); + weatherData.setMeasurements(82, 70, 29.2f); + weatherData.setMeasurements(78, 90, 29.2f); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStationHeatIndex.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStationHeatIndex.java new file mode 100755 index 0000000..9262264 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStationHeatIndex.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.observer.weatherobservable; + +public class WeatherStationHeatIndex { + + public static void main(String[] args) { + WeatherData weatherData = new WeatherData(); + CurrentConditionsDisplay currentConditions = new CurrentConditionsDisplay(weatherData); + StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData); + ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData); + HeatIndexDisplay heatIndexDisplay = new HeatIndexDisplay(weatherData); + + weatherData.setMeasurements(80, 65, 30.4f); + weatherData.setMeasurements(82, 70, 29.2f); + weatherData.setMeasurements(78, 90, 29.2f); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Client.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Client.java new file mode 100644 index 0000000..6fbf316 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Client.java @@ -0,0 +1,25 @@ +package headfirst.designpatterns.prototype; + +public class Client { + public static void main(String[] args) { + Prototype p1 = new ConcretePrototype1(); + Prototype p2 = new ConcretePrototype2(); + + // ... later ... + operation(p1); + operation(p2); + } + + public static Prototype operation(Prototype p) { + // This code doesn't know or care what the concrete type of p is + Prototype pCopy = null; + try { + pCopy = p.copy(); + // do something useful with pCopy + System.out.println("Operating with pCopy!"); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + return pCopy; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Dragon.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Dragon.java new file mode 100644 index 0000000..94ace77 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Dragon.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.prototype; + +public class Dragon extends Monster { + public Dragon(String name, boolean hasWings) { + super(name); + this.hasWings = hasWings; + this.canBreatheFire = true; + } + // Each concrete monster could determine how best to clone itself + public Monster copy() throws CloneNotSupportedException { + return (Monster)this.clone(); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Drakon.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Drakon.java new file mode 100644 index 0000000..de18482 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Drakon.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.prototype; + +public class Drakon extends Monster { + public Drakon(String name, int numHeads, boolean canBreatheFire) { + super(name); + this.numHeads = numHeads; + this.canBreatheFire = canBreatheFire; + } + public void spitPoison() { + System.out.println(this.name + " spits poison"); + } + // Each concrete monster could determine how best to clone itself + public Monster copy() throws CloneNotSupportedException { + return (Monster)this.clone(); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Monster.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Monster.java new file mode 100644 index 0000000..000d7c4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Monster.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.prototype; + +public abstract class Monster implements Cloneable { + boolean eatsChildren = true; + boolean hasWings = false; + int numHeads = 1; + boolean canBreatheFire = false; + String name; + public Monster(String name) { + this.name = name; + } + public void spitPoison() { } // default is do nothing + public void setName(String name) { + this.name = name; + } + + public abstract Monster copy() throws CloneNotSupportedException; + + public String toString() { + StringBuffer s = new StringBuffer("I'm a monster named " + this.name + " with " + this.numHeads + " head(s). "); + if (this.canBreatheFire) { s.append("I can breathe fire. "); } + if (this.eatsChildren) { s.append("I eat children. "); } + if (this.hasWings) { s.append("I have wings. "); } + return s.toString(); + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/monsters.html b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/monsters.html new file mode 100644 index 0000000..d44506f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/monsters.html @@ -0,0 +1,50 @@ + + + +Monsters + + + + + + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachine.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachine.java new file mode 100755 index 0000000..2392271 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachine.java @@ -0,0 +1,108 @@ +package headfirst.designpatterns.proxy.gumball; + +import java.rmi.*; +import java.rmi.server.*; + +public class GumballMachine + extends UnicastRemoteObject implements GumballMachineRemote +{ + private static final long serialVersionUID = 2L; + State soldOutState; + State noQuarterState; + State hasQuarterState; + State soldState; + State winnerState; + + State state = soldOutState; + int count = 0; + String location; + + public GumballMachine(String location, int numberGumballs) throws RemoteException { + soldOutState = new SoldOutState(this); + noQuarterState = new NoQuarterState(this); + hasQuarterState = new HasQuarterState(this); + soldState = new SoldState(this); + winnerState = new WinnerState(this); + + this.count = numberGumballs; + if (numberGumballs > 0) { + state = noQuarterState; + } + this.location = location; + } + + + public void insertQuarter() { + state.insertQuarter(); + } + + public void ejectQuarter() { + state.ejectQuarter(); + } + + public void turnCrank() { + state.turnCrank(); + state.dispense(); + } + + void setState(State state) { + this.state = state; + } + + void releaseBall() { + System.out.println("A gumball comes rolling out the slot..."); + if (count != 0) { + count = count - 1; + } + } + + public void refill(int count) { + this.count = count; + state = noQuarterState; + } + + public int getCount() { + return count; + } + + public State getState() { + return state; + } + + public String getLocation() { + return location; + } + + public State getSoldOutState() { + return soldOutState; + } + + public State getNoQuarterState() { + return noQuarterState; + } + + public State getHasQuarterState() { + return hasQuarterState; + } + + public State getSoldState() { + return soldState; + } + + public State getWinnerState() { + return winnerState; + } + + public String toString() { + StringBuffer result = new StringBuffer(); + result.append("\nMighty Gumball, Inc."); + result.append("\nJava-enabled Standing Gumball Model #2014"); + result.append("\nInventory: " + count + " gumball"); + if (count != 1) { + result.append("s"); + } + result.append("\n"); + result.append("Machine is " + state + "\n"); + return result.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineRemote.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineRemote.java new file mode 100755 index 0000000..d88cb61 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineRemote.java @@ -0,0 +1,9 @@ +package headfirst.designpatterns.proxy.gumball; + +import java.rmi.*; + +public interface GumballMachineRemote extends Remote { + public int getCount() throws RemoteException; + public String getLocation() throws RemoteException; + public State getState() throws RemoteException; +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineTestDrive.java new file mode 100755 index 0000000..a4a8963 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineTestDrive.java @@ -0,0 +1,25 @@ +package headfirst.designpatterns.proxy.gumball; +import java.rmi.*; + +public class GumballMachineTestDrive { + + public static void main(String[] args) { + GumballMachineRemote gumballMachine = null; + int count; + + if (args.length < 2) { + System.out.println("GumballMachine "); + System.exit(1); + } + + try { + count = Integer.parseInt(args[1]); + + gumballMachine = + new GumballMachine(args[0], count); + Naming.rebind("//" + args[0] + "/gumballmachine", gumballMachine); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitor.java new file mode 100755 index 0000000..ecc39bf --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitor.java @@ -0,0 +1,21 @@ +package headfirst.designpatterns.proxy.gumball; + +import java.rmi.*; + +public class GumballMonitor { + GumballMachineRemote machine; + + public GumballMonitor(GumballMachineRemote machine) { + this.machine = machine; + } + + public void report() { + try { + System.out.println("Gumball Machine: " + machine.getLocation()); + System.out.println("Current inventory: " + machine.getCount() + " gumballs"); + System.out.println("Current state: " + machine.getState()); + } catch (RemoteException e) { + e.printStackTrace(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitorTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitorTestDrive.java new file mode 100755 index 0000000..2bd6293 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitorTestDrive.java @@ -0,0 +1,36 @@ +package headfirst.designpatterns.proxy.gumball; + +import java.rmi.*; + +public class GumballMonitorTestDrive { + + public static void main(String[] args) { + String[] location = {"rmi://santafe.mightygumball.com/gumballmachine", + "rmi://boulder.mightygumball.com/gumballmachine", + "rmi://austin.mightygumball.com/gumballmachine"}; + + if (args.length >= 0) + { + location = new String[1]; + location[0] = "rmi://" + args[0] + "/gumballmachine"; + } + + GumballMonitor[] monitor = new GumballMonitor[location.length]; + + + for (int i=0;i < location.length; i++) { + try { + GumballMachineRemote machine = + (GumballMachineRemote) Naming.lookup(location[i]); + monitor[i] = new GumballMonitor(machine); + System.out.println(monitor[i]); + } catch (Exception e) { + e.printStackTrace(); + } + } + + for (int i=0; i < monitor.length; i++) { + monitor[i].report(); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/HasQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/HasQuarterState.java new file mode 100755 index 0000000..da2f3ec --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/HasQuarterState.java @@ -0,0 +1,40 @@ +package headfirst.designpatterns.proxy.gumball; + +import java.util.Random; + +public class HasQuarterState implements State { + private static final long serialVersionUID = 2L; + Random randomWinner = new Random(System.currentTimeMillis()); + transient GumballMachine gumballMachine; + + public HasQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You can't insert another quarter"); + } + + public void ejectQuarter() { + System.out.println("Quarter returned"); + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } + + public void turnCrank() { + System.out.println("You turned..."); + int winner = randomWinner.nextInt(10); + if (winner == 0) { + gumballMachine.setState(gumballMachine.getWinnerState()); + } else { + gumballMachine.setState(gumballMachine.getSoldState()); + } + } + + public void dispense() { + System.out.println("No gumball dispensed"); + } + + public String toString() { + return "waiting for turn of crank"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/NoQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/NoQuarterState.java new file mode 100755 index 0000000..8a7b86b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/NoQuarterState.java @@ -0,0 +1,31 @@ +package headfirst.designpatterns.proxy.gumball; + +public class NoQuarterState implements State { + private static final long serialVersionUID = 2L; + transient GumballMachine gumballMachine; + + public NoQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You inserted a quarter"); + gumballMachine.setState(gumballMachine.getHasQuarterState()); + } + + public void ejectQuarter() { + System.out.println("You haven't inserted a quarter"); + } + + public void turnCrank() { + System.out.println("You turned, but there's no quarter"); + } + + public void dispense() { + System.out.println("You need to pay first"); + } + + public String toString() { + return "waiting for quarter"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/README.md b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/README.md new file mode 100644 index 0000000..3441f20 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/README.md @@ -0,0 +1,16 @@ +# Gumball Machine with Proxy Pattern + +To get code running on localhost: + +1. Change directories to the same level with headfirst/ folder in bin/ + +2. Run rmiregistry in background: +rmiregistry & + +3. Run: +java headfirst/designpatterns/proxy/gumball/GumballMachineTestDrive localhost 300 + +4. In a different window, run: +java headfirst/designpatterns/proxy/gumball/GumballMonitorTestDrive localhost + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldOutState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldOutState.java new file mode 100755 index 0000000..09f7423 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldOutState.java @@ -0,0 +1,30 @@ +package headfirst.designpatterns.proxy.gumball; + +public class SoldOutState implements State { + private static final long serialVersionUID = 2L; + transient GumballMachine gumballMachine; + + public SoldOutState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You can't insert a quarter, the machine is sold out"); + } + + public void ejectQuarter() { + System.out.println("You can't eject, you haven't inserted a quarter yet"); + } + + public void turnCrank() { + System.out.println("You turned, but there are no gumballs"); + } + + public void dispense() { + System.out.println("No gumball dispensed"); + } + + public String toString() { + return "sold out"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldState.java new file mode 100755 index 0000000..5c235f1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldState.java @@ -0,0 +1,36 @@ +package headfirst.designpatterns.proxy.gumball; + +public class SoldState implements State { + private static final long serialVersionUID = 2L; + transient GumballMachine gumballMachine; + + public SoldState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("Please wait, we're already giving you a gumball"); + } + + public void ejectQuarter() { + System.out.println("Sorry, you already turned the crank"); + } + + public void turnCrank() { + System.out.println("Turning twice doesn't get you another gumball!"); + } + + public void dispense() { + gumballMachine.releaseBall(); + if (gumballMachine.getCount() > 0) { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } else { + System.out.println("Oops, out of gumballs!"); + gumballMachine.setState(gumballMachine.getSoldOutState()); + } + } + + public String toString() { + return "dispensing a gumball"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/State.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/State.java new file mode 100755 index 0000000..638e900 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/State.java @@ -0,0 +1,10 @@ +package headfirst.designpatterns.proxy.gumball; + +import java.io.*; + +public interface State extends Serializable { + public void insertQuarter(); + public void ejectQuarter(); + public void turnCrank(); + public void dispense(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/WinnerState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/WinnerState.java new file mode 100755 index 0000000..49c52c4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/WinnerState.java @@ -0,0 +1,42 @@ +package headfirst.designpatterns.proxy.gumball; + +public class WinnerState implements State { + private static final long serialVersionUID = 2L; + transient GumballMachine gumballMachine; + + public WinnerState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("Please wait, we're already giving you a Gumball"); + } + + public void ejectQuarter() { + System.out.println("Please wait, we're already giving you a Gumball"); + } + + public void turnCrank() { + System.out.println("Turning again doesn't get you another gumball!"); + } + + public void dispense() { + System.out.println("YOU'RE A WINNER! You get two gumballs for your quarter"); + gumballMachine.releaseBall(); + if (gumballMachine.getCount() == 0) { + gumballMachine.setState(gumballMachine.getSoldOutState()); + } else { + gumballMachine.releaseBall(); + if (gumballMachine.getCount() > 0) { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } else { + System.out.println("Oops, out of gumballs!"); + gumballMachine.setState(gumballMachine.getSoldOutState()); + } + } + } + + public String toString() { + return "despensing two gumballs for your quarter, because YOU'RE A WINNER!"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachine.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachine.java new file mode 100755 index 0000000..b8ee840 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachine.java @@ -0,0 +1,101 @@ +package headfirst.designpatterns.proxy.gumballmonitor; + +public class GumballMachine { + State soldOutState; + State noQuarterState; + State hasQuarterState; + State soldState; + State winnerState; + + State state = soldOutState; + int count = 0; + String location; + + public GumballMachine(String location, int count) { + soldOutState = new SoldOutState(this); + noQuarterState = new NoQuarterState(this); + hasQuarterState = new HasQuarterState(this); + soldState = new SoldState(this); + winnerState = new WinnerState(this); + + this.count = count; + if (count > 0) { + state = noQuarterState; + } + this.location = location; + } + + public void insertQuarter() { + state.insertQuarter(); + } + + public void ejectQuarter() { + state.ejectQuarter(); + } + + public void turnCrank() { + state.turnCrank(); + state.dispense(); + } + + void setState(State state) { + this.state = state; + } + + void releaseBall() { + System.out.println("A gumball comes rolling out the slot..."); + if (count != 0) { + count = count - 1; + } + } + + public int getCount() { + return count; + } + + public void refill(int count) { + this.count = count; + state = noQuarterState; + } + + public State getState() { + return state; + } + + public String getLocation() { + return location; + } + + public State getSoldOutState() { + return soldOutState; + } + + public State getNoQuarterState() { + return noQuarterState; + } + + public State getHasQuarterState() { + return hasQuarterState; + } + + public State getSoldState() { + return soldState; + } + + public State getWinnerState() { + return winnerState; + } + + public String toString() { + StringBuffer result = new StringBuffer(); + result.append("\nMighty Gumball, Inc."); + result.append("\nJava-enabled Standing Gumball Model #2004"); + result.append("\nInventory: " + count + " gumball"); + if (count != 1) { + result.append("s"); + } + result.append("\n"); + result.append("Machine is " + state + "\n"); + return result.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachineTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachineTestDrive.java new file mode 100755 index 0000000..70eba44 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachineTestDrive.java @@ -0,0 +1,63 @@ +package headfirst.designpatterns.proxy.gumballmonitor; + +public class GumballMachineTestDrive { + + public static void main(String[] args) { + int count = 0; + + if (args.length < 2) { + System.out.println("GumballMachine "); + System.exit(1); + } + + try { + count = Integer.parseInt(args[1]); + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + GumballMachine gumballMachine = new GumballMachine(args[0], count); + + GumballMonitor monitor = new GumballMonitor(gumballMachine); + + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + monitor.report(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMonitor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMonitor.java new file mode 100755 index 0000000..6a8619c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMonitor.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.proxy.gumballmonitor; + +public class GumballMonitor { + GumballMachine machine; + + public GumballMonitor(GumballMachine machine) { + this.machine = machine; + } + + public void report() { + System.out.println("Gumball Machine: " + machine.getLocation()); + System.out.println("Current inventory: " + machine.getCount() + " gumballs"); + System.out.println("Current state: " + machine.getState()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/HasQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/HasQuarterState.java new file mode 100755 index 0000000..65af16e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/HasQuarterState.java @@ -0,0 +1,41 @@ +package headfirst.designpatterns.proxy.gumballmonitor; + + +import java.util.Random; + +public class HasQuarterState implements State { + private static final long serialVersionUID = 2L; + Random randomWinner = new Random(System.currentTimeMillis()); + GumballMachine gumballMachine; + + public HasQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You can't insert another quarter"); + } + + public void ejectQuarter() { + System.out.println("Quarter returned"); + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } + + public void turnCrank() { + System.out.println("You turned..."); + int winner = randomWinner.nextInt(10); + if (winner == 0) { + gumballMachine.setState(gumballMachine.getWinnerState()); + } else { + gumballMachine.setState(gumballMachine.getSoldState()); + } + } + + public void dispense() { + System.out.println("No gumball dispensed"); + } + + public String toString() { + return "waiting for turn of crank"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/NoQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/NoQuarterState.java new file mode 100755 index 0000000..4578fee --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/NoQuarterState.java @@ -0,0 +1,31 @@ +package headfirst.designpatterns.proxy.gumballmonitor; + +public class NoQuarterState implements State { + private static final long serialVersionUID = 2L; + GumballMachine gumballMachine; + + public NoQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You inserted a quarter"); + gumballMachine.setState(gumballMachine.getHasQuarterState()); + } + + public void ejectQuarter() { + System.out.println("You haven't inserted a quarter"); + } + + public void turnCrank() { + System.out.println("You turned, but there's no quarter"); + } + + public void dispense() { + System.out.println("You need to pay first"); + } + + public String toString() { + return "waiting for quarter"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldOutState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldOutState.java new file mode 100755 index 0000000..9e2f8c4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldOutState.java @@ -0,0 +1,30 @@ +package headfirst.designpatterns.proxy.gumballmonitor; + +public class SoldOutState implements State { + private static final long serialVersionUID = 2L; + GumballMachine gumballMachine; + + public SoldOutState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You can't insert a quarter, the machine is sold out"); + } + + public void ejectQuarter() { + System.out.println("You can't eject, you haven't inserted a quarter yet"); + } + + public void turnCrank() { + System.out.println("You turned, but there are no gumballs"); + } + + public void dispense() { + System.out.println("No gumball dispensed"); + } + + public String toString() { + return "sold out"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldState.java new file mode 100755 index 0000000..fd64b9b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldState.java @@ -0,0 +1,40 @@ +package headfirst.designpatterns.proxy.gumballmonitor; + +public class SoldState implements State { + private static final long serialVersionUID = 2L; + GumballMachine gumballMachine; + + public SoldState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("Please wait, we're already giving you a gumball"); + } + + public void ejectQuarter() { + System.out.println("Sorry, you already turned the crank"); + } + + public void turnCrank() { + System.out.println("Turning twice doesn't get you another gumball!"); + } + + public void dispense() { + gumballMachine.releaseBall(); + try { + if (gumballMachine.getCount() > 0) { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } else { + System.out.println("Oops, out of gumballs!"); + gumballMachine.setState(gumballMachine.getSoldOutState()); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public String toString() { + return "dispensing a gumball"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/State.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/State.java new file mode 100755 index 0000000..6a4a927 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/State.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.proxy.gumballmonitor; + +import java.io.*; + +public interface State extends Serializable { + + public void insertQuarter(); + public void ejectQuarter(); + public void turnCrank(); + public void dispense(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/WinnerState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/WinnerState.java new file mode 100755 index 0000000..ac26172 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/WinnerState.java @@ -0,0 +1,46 @@ +package headfirst.designpatterns.proxy.gumballmonitor; + +public class WinnerState implements State { + private static final long serialVersionUID = 2L; + GumballMachine gumballMachine; + + public WinnerState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("Please wait, we're already giving you a Gumball"); + } + + public void ejectQuarter() { + System.out.println("Please wait, we're already giving you a Gumball"); + } + + public void turnCrank() { + System.out.println("Turning again doesn't get you another gumball!"); + } + + public void dispense() { + System.out.println("YOU'RE A WINNER! You get two gumballs for your quarter"); + try { + gumballMachine.releaseBall(); + if (gumballMachine.getCount() == 0) { + gumballMachine.setState(gumballMachine.getSoldOutState()); + } else { + gumballMachine.releaseBall(); + if (gumballMachine.getCount() > 0) { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } else { + System.out.println("Oops, out of gumballs!"); + gumballMachine.setState(gumballMachine.getSoldOutState()); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public String toString() { + return "despensing two gumballs for your quarter, because YOU'RE A WINNER!"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/MatchMakingTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/MatchMakingTestDrive.java new file mode 100755 index 0000000..5e8f46d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/MatchMakingTestDrive.java @@ -0,0 +1,76 @@ +package headfirst.designpatterns.proxy.javaproxy; + +import java.lang.reflect.*; +import java.util.*; + +public class MatchMakingTestDrive { + HashMap datingDB = new HashMap(); + + public static void main(String[] args) { + MatchMakingTestDrive test = new MatchMakingTestDrive(); + test.drive(); + } + + public MatchMakingTestDrive() { + initializeDatabase(); + } + + public void drive() { + Person joe = getPersonFromDatabase("Joe Javabean"); + Person ownerProxy = getOwnerProxy(joe); + System.out.println("Name is " + ownerProxy.getName()); + ownerProxy.setInterests("bowling, Go"); + System.out.println("Interests set from owner proxy"); + try { + ownerProxy.setGeekRating(10); + } catch (Exception e) { + System.out.println("Can't set rating from owner proxy"); + } + System.out.println("Rating is " + ownerProxy.getGeekRating()); + + Person nonOwnerProxy = getNonOwnerProxy(joe); + System.out.println("Name is " + nonOwnerProxy.getName()); + try { + nonOwnerProxy.setInterests("bowling, Go"); + } catch (Exception e) { + System.out.println("Can't set interests from non owner proxy"); + } + nonOwnerProxy.setGeekRating(3); + System.out.println("Rating set from non owner proxy"); + System.out.println("Rating is " + nonOwnerProxy.getGeekRating()); + } + + Person getOwnerProxy(Person person) { + + return (Person) Proxy.newProxyInstance( + person.getClass().getClassLoader(), + person.getClass().getInterfaces(), + new OwnerInvocationHandler(person)); + } + + Person getNonOwnerProxy(Person person) { + + return (Person) Proxy.newProxyInstance( + person.getClass().getClassLoader(), + person.getClass().getInterfaces(), + new NonOwnerInvocationHandler(person)); + } + + Person getPersonFromDatabase(String name) { + return (Person)datingDB.get(name); + } + + void initializeDatabase() { + Person joe = new PersonImpl(); + joe.setName("Joe Javabean"); + joe.setInterests("cars, computers, music"); + joe.setGeekRating(7); + datingDB.put(joe.getName(), joe); + + Person kelly = new PersonImpl(); + kelly.setName("Kelly Klosure"); + kelly.setInterests("ebay, movies, music"); + kelly.setGeekRating(6); + datingDB.put(kelly.getName(), kelly); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/NonOwnerInvocationHandler.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/NonOwnerInvocationHandler.java new file mode 100755 index 0000000..4b10150 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/NonOwnerInvocationHandler.java @@ -0,0 +1,28 @@ +package headfirst.designpatterns.proxy.javaproxy; + +import java.lang.reflect.*; + +public class NonOwnerInvocationHandler implements InvocationHandler { + Person person; + + public NonOwnerInvocationHandler(Person person) { + this.person = person; + } + + public Object invoke(Object proxy, Method method, Object[] args) + throws IllegalAccessException { + + try { + if (method.getName().startsWith("get")) { + return method.invoke(person, args); + } else if (method.getName().equals("setGeekRating")) { + return method.invoke(person, args); + } else if (method.getName().startsWith("set")) { + throw new IllegalAccessException(); + } + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/OwnerInvocationHandler.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/OwnerInvocationHandler.java new file mode 100755 index 0000000..ced2307 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/OwnerInvocationHandler.java @@ -0,0 +1,28 @@ +package headfirst.designpatterns.proxy.javaproxy; + +import java.lang.reflect.*; + +public class OwnerInvocationHandler implements InvocationHandler { + Person person; + + public OwnerInvocationHandler(Person person) { + this.person = person; + } + + public Object invoke(Object proxy, Method method, Object[] args) + throws IllegalAccessException { + + try { + if (method.getName().startsWith("get")) { + return method.invoke(person, args); + } else if (method.getName().equals("setGeekRating")) { + throw new IllegalAccessException(); + } else if (method.getName().startsWith("set")) { + return method.invoke(person, args); + } + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/Person.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/Person.java new file mode 100755 index 0000000..7de0a07 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/Person.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.proxy.javaproxy; + +public interface Person { + + String getName(); + String getGender(); + String getInterests(); + int getGeekRating(); + + void setName(String name); + void setGender(String gender); + void setInterests(String interests); + void setGeekRating(int rating); + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/PersonImpl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/PersonImpl.java new file mode 100755 index 0000000..e8a13ed --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/PersonImpl.java @@ -0,0 +1,45 @@ +package headfirst.designpatterns.proxy.javaproxy; + +public class PersonImpl implements Person { + String name; + String gender; + String interests; + int rating; + int ratingCount = 0; + + public String getName() { + return name; + } + + public String getGender() { + return gender; + } + + public String getInterests() { + return interests; + } + + public int getGeekRating() { + if (ratingCount == 0) return 0; + return (rating/ratingCount); + } + + + public void setName(String name) { + this.name = name; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public void setInterests(String interests) { + this.interests = interests; + } + + public void setGeekRating(int rating) { + this.rating += rating; + ratingCount++; + } + +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageComponent.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageComponent.java new file mode 100755 index 0000000..f1b4209 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageComponent.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.proxy.virtualproxy; + +import java.awt.*; +import javax.swing.*; + +class ImageComponent extends JComponent { + private static final long serialVersionUID = 1L; + private Icon icon; + + public ImageComponent(Icon icon) { + this.icon = icon; + } + + public void setIcon(Icon icon) { + this.icon = icon; + } + + public void paintComponent(Graphics g) { + super.paintComponent(g); + int w = icon.getIconWidth(); + int h = icon.getIconHeight(); + int x = (800 - w)/2; + int y = (600 - h)/2; + icon.paintIcon(this, g, x, y); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxy.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxy.java new file mode 100755 index 0000000..41fb03d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxy.java @@ -0,0 +1,67 @@ +package headfirst.designpatterns.proxy.virtualproxy; + +import java.net.*; +import java.awt.*; +import javax.swing.*; + +class ImageProxy implements Icon { + volatile ImageIcon imageIcon; + final URL imageURL; + Thread retrievalThread; + boolean retrieving = false; + + public ImageProxy(URL url) { imageURL = url; } + + public int getIconWidth() { + if (imageIcon != null) { + return imageIcon.getIconWidth(); + } else { + return 800; + } + } + + public int getIconHeight() { + if (imageIcon != null) { + return imageIcon.getIconHeight(); + } else { + return 600; + } + } + + synchronized void setImageIcon(ImageIcon imageIcon) { + this.imageIcon = imageIcon; + } + + public void paintIcon(final Component c, Graphics g, int x, int y) { + if (imageIcon != null) { + imageIcon.paintIcon(c, g, x, y); + } else { + g.drawString("Loading album cover, please wait...", x+300, y+190); + if (!retrieving) { + retrieving = true; + + retrievalThread = new Thread(new Runnable() { + public void run() { + try { + setImageIcon(new ImageIcon(imageURL, "Album Cover")); + c.repaint(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + retrievalThread = new Thread(() -> { + try { + setImageIcon(new ImageIcon(imageURL, "Album Cover")); + c.repaint(); + } catch (Exception e) { + e.printStackTrace(); + } + }); + retrievalThread.start(); + + } + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxyTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxyTestDrive.java new file mode 100755 index 0000000..81bb68a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxyTestDrive.java @@ -0,0 +1,61 @@ +package headfirst.designpatterns.proxy.virtualproxy; + +import java.net.*; +import javax.swing.*; +import java.util.*; + +public class ImageProxyTestDrive { + ImageComponent imageComponent; + JFrame frame = new JFrame("Album Cover Viewer"); + JMenuBar menuBar; + JMenu menu; + Hashtable albums = new Hashtable(); + + public static void main (String[] args) throws Exception { + ImageProxyTestDrive testDrive = new ImageProxyTestDrive(); + } + + public ImageProxyTestDrive() throws Exception { + albums.put("Buddha Bar","http://images.amazon.com/images/P/B00009XBYK.01.LZZZZZZZ.jpg"); + albums.put("Ima","http://images.amazon.com/images/P/B000005IRM.01.LZZZZZZZ.jpg"); + albums.put("Karma","http://images.amazon.com/images/P/B000005DCB.01.LZZZZZZZ.gif"); + albums.put("MCMXC a.D.","http://images.amazon.com/images/P/B000002URV.01.LZZZZZZZ.jpg"); + albums.put("Northern Exposure","http://images.amazon.com/images/P/B000003SFN.01.LZZZZZZZ.jpg"); + albums.put("Selected Ambient Works, Vol. 2","http://images.amazon.com/images/P/B000002MNZ.01.LZZZZZZZ.jpg"); + + URL initialURL = new URL((String)albums.get("Selected Ambient Works, Vol. 2")); + menuBar = new JMenuBar(); + menu = new JMenu("Favorite Albums"); + menuBar.add(menu); + frame.setJMenuBar(menuBar); + + for (Enumeration e = albums.keys(); e.hasMoreElements();) { + String name = (String)e.nextElement(); + JMenuItem menuItem = new JMenuItem(name); + menu.add(menuItem); + menuItem.addActionListener(event -> { + imageComponent.setIcon(new ImageProxy(getAlbumUrl(event.getActionCommand()))); + frame.repaint(); + }); + } + + // set up frame and menus + + Icon icon = new ImageProxy(initialURL); + imageComponent = new ImageComponent(icon); + frame.getContentPane().add(imageComponent); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setSize(800,600); + frame.setVisible(true); + + } + + URL getAlbumUrl(String name) { + try { + return new URL((String)albums.get(name)); + } catch (MalformedURLException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateBoiler.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateBoiler.java new file mode 100755 index 0000000..c68e65b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateBoiler.java @@ -0,0 +1,51 @@ +package headfirst.designpatterns.singleton.chocolate; + +public class ChocolateBoiler { + private boolean empty; + private boolean boiled; + private static ChocolateBoiler uniqueInstance; + + private ChocolateBoiler() { + empty = true; + boiled = false; + } + + public static ChocolateBoiler getInstance() { + if (uniqueInstance == null) { + System.out.println("Creating unique instance of Chocolate Boiler"); + uniqueInstance = new ChocolateBoiler(); + } + System.out.println("Returning instance of Chocolate Boiler"); + return uniqueInstance; + } + + public void fill() { + if (isEmpty()) { + empty = false; + boiled = false; + // fill the boiler with a milk/chocolate mixture + } + } + + public void drain() { + if (!isEmpty() && isBoiled()) { + // drain the boiled milk and chocolate + empty = true; + } + } + + public void boil() { + if (!isEmpty() && !isBoiled()) { + // bring the contents to a boil + boiled = true; + } + } + + public boolean isEmpty() { + return empty; + } + + public boolean isBoiled() { + return boiled; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateController.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateController.java new file mode 100755 index 0000000..c5830b8 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateController.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.singleton.chocolate; + +public class ChocolateController { + public static void main(String args[]) { + ChocolateBoiler boiler = ChocolateBoiler.getInstance(); + boiler.fill(); + boiler.boil(); + boiler.drain(); + + // will return the existing instance + ChocolateBoiler boiler2 = ChocolateBoiler.getInstance(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/Singleton.java new file mode 100755 index 0000000..075e8c8 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/Singleton.java @@ -0,0 +1,21 @@ +package headfirst.designpatterns.singleton.classic; + +// NOTE: This is not thread safe! + +public class Singleton { + private static Singleton uniqueInstance; + + private Singleton() {} + + public static Singleton getInstance() { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + return uniqueInstance; + } + + // other useful methods here + public String getDescription() { + return "I'm a classic Singleton!"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/SingletonClient.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/SingletonClient.java new file mode 100755 index 0000000..b88c188 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/SingletonClient.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.singleton.classic; + +public class SingletonClient { + public static void main(String[] args) { + Singleton singleton = Singleton.getInstance(); + System.out.println(singleton.getDescription()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/Singleton.java new file mode 100755 index 0000000..0c42339 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/Singleton.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.singleton.dcl; + +// +// Danger! This implementation of Singleton not +// guaranteed to work prior to Java 5 +// + +public class Singleton { + private volatile static Singleton uniqueInstance; + + private Singleton() {} + + public static Singleton getInstance() { + if (uniqueInstance == null) { + synchronized (Singleton.class) { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + } + } + return uniqueInstance; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/SingletonClient.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/SingletonClient.java new file mode 100755 index 0000000..99e3c89 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/SingletonClient.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.singleton.dcl; + +public class SingletonClient { + public static void main(String[] args) { + Singleton singleton = Singleton.getInstance(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/Singleton.java new file mode 100755 index 0000000..c416fd3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/Singleton.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.singleton.enumS; + +public enum Singleton { + UNIQUE_INSTANCE; + + // other useful fields here + + // other useful methods here + public String getDescription() { + return "I'm a thread safe Singleton!"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/SingletonClient.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/SingletonClient.java new file mode 100755 index 0000000..ba364fc --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/SingletonClient.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.singleton.enumS; + +public class SingletonClient { + public static void main(String[] args) { + Singleton singleton = Singleton.UNIQUE_INSTANCE; + System.out.println(singleton.getDescription()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/Singleton.java new file mode 100755 index 0000000..6b721ff --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/Singleton.java @@ -0,0 +1,16 @@ +package headfirst.designpatterns.singleton.stat; + +public class Singleton { + private static Singleton uniqueInstance = new Singleton(); + + private Singleton() {} + + public static Singleton getInstance() { + return uniqueInstance; + } + + // other useful methods here + public String getDescription() { + return "I'm a statically initialized Singleton!"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/SingletonClient.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/SingletonClient.java new file mode 100755 index 0000000..caa1249 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/SingletonClient.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.singleton.stat; + +public class SingletonClient { + public static void main(String[] args) { + Singleton singleton = Singleton.getInstance(); + System.out.println(singleton.getDescription()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/CoolerSingleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/CoolerSingleton.java new file mode 100755 index 0000000..0716bfe --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/CoolerSingleton.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.singleton.subclass; + +public class CoolerSingleton extends Singleton { + // useful instance variables here + protected static Singleton uniqueInstance; + + private CoolerSingleton() { + super(); + } + + // useful methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/HotterSingleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/HotterSingleton.java new file mode 100755 index 0000000..c2144be --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/HotterSingleton.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.singleton.subclass; + +public class HotterSingleton extends Singleton { + // useful instance variables here + + private HotterSingleton() { + super(); + } + + // useful methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/Singleton.java new file mode 100755 index 0000000..0feca08 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/Singleton.java @@ -0,0 +1,18 @@ +package headfirst.designpatterns.singleton.subclass; + +public class Singleton { + protected static Singleton uniqueInstance; + + // other useful instance variables here + + protected Singleton() {} + + public static synchronized Singleton getInstance() { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + return uniqueInstance; + } + + // other useful methods here +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/SingletonTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/SingletonTestDrive.java new file mode 100755 index 0000000..ce9683c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/SingletonTestDrive.java @@ -0,0 +1,10 @@ +package headfirst.designpatterns.singleton.subclass; + +public class SingletonTestDrive { + public static void main(String[] args) { + Singleton foo = CoolerSingleton.getInstance(); + Singleton bar = HotterSingleton.getInstance(); + System.out.println(foo); + System.out.println(bar); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/Singleton.java new file mode 100755 index 0000000..2ac413c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/Singleton.java @@ -0,0 +1,21 @@ +package headfirst.designpatterns.singleton.threadsafe; + +public class Singleton { + private static Singleton uniqueInstance; + + // other useful instance variables here + + private Singleton() {} + + public static synchronized Singleton getInstance() { + if (uniqueInstance == null) { + uniqueInstance = new Singleton(); + } + return uniqueInstance; + } + + // other useful methods here + public String getDescription() { + return "I'm a thread safe Singleton!"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/SingletonClient.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/SingletonClient.java new file mode 100755 index 0000000..8dc84b3 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/SingletonClient.java @@ -0,0 +1,8 @@ +package headfirst.designpatterns.singleton.threadsafe; + +public class SingletonClient { + public static void main(String[] args) { + Singleton singleton = Singleton.getInstance(); + System.out.println(singleton.getDescription()); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachine.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachine.java new file mode 100755 index 0000000..4312eaf --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachine.java @@ -0,0 +1,107 @@ +package headfirst.designpatterns.state.gumball; + +public class GumballMachine { + + final static int SOLD_OUT = 0; + final static int NO_QUARTER = 1; + final static int HAS_QUARTER = 2; + final static int SOLD = 3; + + int state = SOLD_OUT; + int count = 0; + + public GumballMachine(int count) { + this.count = count; + if (count > 0) { + state = NO_QUARTER; + } + } + + public void insertQuarter() { + if (state == HAS_QUARTER) { + System.out.println("You can't insert another quarter"); + } else if (state == NO_QUARTER) { + state = HAS_QUARTER; + System.out.println("You inserted a quarter"); + } else if (state == SOLD_OUT) { + System.out.println("You can't insert a quarter, the machine is sold out"); + } else if (state == SOLD) { + System.out.println("Please wait, we're already giving you a gumball"); + } + } + + public void ejectQuarter() { + if (state == HAS_QUARTER) { + System.out.println("Quarter returned"); + state = NO_QUARTER; + } else if (state == NO_QUARTER) { + System.out.println("You haven't inserted a quarter"); + } else if (state == SOLD) { + System.out.println("Sorry, you already turned the crank"); + } else if (state == SOLD_OUT) { + System.out.println("You can't eject, you haven't inserted a quarter yet"); + } + } + + public void turnCrank() { + if (state == SOLD) { + System.out.println("Turning twice doesn't get you another gumball!"); + } else if (state == NO_QUARTER) { + System.out.println("You turned but there's no quarter"); + } else if (state == SOLD_OUT) { + System.out.println("You turned, but there are no gumballs"); + } else if (state == HAS_QUARTER) { + System.out.println("You turned..."); + state = SOLD; + dispense(); + } + } + + private void dispense() { + if (state == SOLD) { + System.out.println("A gumball comes rolling out the slot"); + count = count - 1; + if (count == 0) { + System.out.println("Oops, out of gumballs!"); + state = SOLD_OUT; + } else { + state = NO_QUARTER; + } + } else if (state == NO_QUARTER) { + System.out.println("You need to pay first"); + } else if (state == SOLD_OUT) { + System.out.println("No gumball dispensed"); + } else if (state == HAS_QUARTER) { + System.out.println("No gumball dispensed"); + } + } + + public void refill(int numGumBalls) { + this.count = numGumBalls; + state = NO_QUARTER; + } + + public String toString() { + StringBuffer result = new StringBuffer(); + result.append("\nMighty Gumball, Inc."); + result.append("\nJava-enabled Standing Gumball Model #2004\n"); + result.append("Inventory: " + count + " gumball"); + if (count != 1) { + result.append("s"); + } + result.append("\nMachine is "); + if (state == SOLD_OUT) { + result.append("sold out"); + } else if (state == NO_QUARTER) { + result.append("waiting for quarter"); + } else if (state == HAS_QUARTER) { + result.append("waiting for turn of crank"); + } else if (state == SOLD) { + result.append("delivering a gumball"); + } + result.append("\n"); + return result.toString(); + } +} + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachineTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachineTestDrive.java new file mode 100755 index 0000000..6f3d2db --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachineTestDrive.java @@ -0,0 +1,39 @@ +package headfirst.designpatterns.state.gumball; + +public class GumballMachineTestDrive { + + public static void main(String[] args) { + GumballMachine gumballMachine = new GumballMachine(5); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.ejectQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.ejectQuarter(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachine.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachine.java new file mode 100755 index 0000000..9650c29 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachine.java @@ -0,0 +1,92 @@ +package headfirst.designpatterns.state.gumballstate; + +public class GumballMachine { + + State soldOutState; + State noQuarterState; + State hasQuarterState; + State soldState; + + State state; + int count = 0; + + public GumballMachine(int numberGumballs) { + soldOutState = new SoldOutState(this); + noQuarterState = new NoQuarterState(this); + hasQuarterState = new HasQuarterState(this); + soldState = new SoldState(this); + + this.count = numberGumballs; + if (numberGumballs > 0) { + state = noQuarterState; + } else { + state = soldOutState; + } + } + + public void insertQuarter() { + state.insertQuarter(); + } + + public void ejectQuarter() { + state.ejectQuarter(); + } + + public void turnCrank() { + state.turnCrank(); + state.dispense(); + } + + void releaseBall() { + System.out.println("A gumball comes rolling out the slot..."); + if (count > 0) { + count = count - 1; + } + } + + int getCount() { + return count; + } + + void refill(int count) { + this.count += count; + System.out.println("The gumball machine was just refilled; its new count is: " + this.count); + state.refill(); + } + + void setState(State state) { + this.state = state; + } + public State getState() { + return state; + } + + public State getSoldOutState() { + return soldOutState; + } + + public State getNoQuarterState() { + return noQuarterState; + } + + public State getHasQuarterState() { + return hasQuarterState; + } + + public State getSoldState() { + return soldState; + } + + public String toString() { + StringBuffer result = new StringBuffer(); + result.append("\nMighty Gumball, Inc."); + result.append("\nJava-enabled Standing Gumball Model #2004"); + result.append("\nInventory: " + count + " gumball"); + if (count != 1) { + result.append("s"); + } + result.append("\n"); + result.append("Machine is " + state + "\n"); + return result.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachineTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachineTestDrive.java new file mode 100755 index 0000000..5ced78b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachineTestDrive.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.state.gumballstate; + +public class GumballMachineTestDrive { + + public static void main(String[] args) { + GumballMachine gumballMachine = new GumballMachine(2); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + gumballMachine.refill(5); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/HasQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/HasQuarterState.java new file mode 100755 index 0000000..6e9fb11 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/HasQuarterState.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.state.gumballstate; + +//import java.util.Random; + +public class HasQuarterState implements State { + GumballMachine gumballMachine; + + public HasQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You can't insert another quarter"); + } + + public void ejectQuarter() { + System.out.println("Quarter returned"); + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } + + public void turnCrank() { + System.out.println("You turned..."); + gumballMachine.setState(gumballMachine.getSoldState()); + } + + public void dispense() { + System.out.println("No gumball dispensed"); + } + + public void refill() { } + + public String toString() { + return "waiting for turn of crank"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/NoQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/NoQuarterState.java new file mode 100755 index 0000000..d8c889b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/NoQuarterState.java @@ -0,0 +1,32 @@ +package headfirst.designpatterns.state.gumballstate; + +public class NoQuarterState implements State { + GumballMachine gumballMachine; + + public NoQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You inserted a quarter"); + gumballMachine.setState(gumballMachine.getHasQuarterState()); + } + + public void ejectQuarter() { + System.out.println("You haven't inserted a quarter"); + } + + public void turnCrank() { + System.out.println("You turned, but there's no quarter"); + } + + public void dispense() { + System.out.println("You need to pay first"); + } + + public void refill() { } + + public String toString() { + return "waiting for quarter"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldOutState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldOutState.java new file mode 100755 index 0000000..d3818f6 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldOutState.java @@ -0,0 +1,33 @@ +package headfirst.designpatterns.state.gumballstate; + +public class SoldOutState implements State { + GumballMachine gumballMachine; + + public SoldOutState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You can't insert a quarter, the machine is sold out"); + } + + public void ejectQuarter() { + System.out.println("You can't eject, you haven't inserted a quarter yet"); + } + + public void turnCrank() { + System.out.println("You turned, but there are no gumballs"); + } + + public void dispense() { + System.out.println("No gumball dispensed"); + } + + public void refill() { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } + + public String toString() { + return "sold out"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldState.java new file mode 100755 index 0000000..3b1499a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldState.java @@ -0,0 +1,40 @@ +package headfirst.designpatterns.state.gumballstate; + +public class SoldState implements State { + + GumballMachine gumballMachine; + + public SoldState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("Please wait, we're already giving you a gumball"); + } + + public void ejectQuarter() { + System.out.println("Sorry, you already turned the crank"); + } + + public void turnCrank() { + System.out.println("Turning twice doesn't get you another gumball!"); + } + + public void dispense() { + gumballMachine.releaseBall(); + if (gumballMachine.getCount() > 0) { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } else { + System.out.println("Oops, out of gumballs!"); + gumballMachine.setState(gumballMachine.getSoldOutState()); + } + } + + public void refill() { } + + public String toString() { + return "dispensing a gumball"; + } +} + + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/State.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/State.java new file mode 100755 index 0000000..58796df --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/State.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.state.gumballstate; + +public interface State { + + public void insertQuarter(); + public void ejectQuarter(); + public void turnCrank(); + public void dispense(); + + public void refill(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachine.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachine.java new file mode 100755 index 0000000..499027c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachine.java @@ -0,0 +1,97 @@ +package headfirst.designpatterns.state.gumballstatewinner; + +public class GumballMachine { + + State soldOutState; + State noQuarterState; + State hasQuarterState; + State soldState; + State winnerState; + + State state = soldOutState; + int count = 0; + + public GumballMachine(int numberGumballs) { + soldOutState = new SoldOutState(this); + noQuarterState = new NoQuarterState(this); + hasQuarterState = new HasQuarterState(this); + soldState = new SoldState(this); + winnerState = new WinnerState(this); + + this.count = numberGumballs; + if (numberGumballs > 0) { + state = noQuarterState; + } + } + + public void insertQuarter() { + state.insertQuarter(); + } + + public void ejectQuarter() { + state.ejectQuarter(); + } + + public void turnCrank() { + state.turnCrank(); + state.dispense(); + } + + void setState(State state) { + this.state = state; + } + + void releaseBall() { + System.out.println("A gumball comes rolling out the slot..."); + if (count > 0) { + count = count - 1; + } + } + + int getCount() { + return count; + } + + void refill(int count) { + this.count += count; + System.out.println("The gumball machine was just refilled; its new count is: " + this.count); + state.refill(); + } + + public State getState() { + return state; + } + + public State getSoldOutState() { + return soldOutState; + } + + public State getNoQuarterState() { + return noQuarterState; + } + + public State getHasQuarterState() { + return hasQuarterState; + } + + public State getSoldState() { + return soldState; + } + + public State getWinnerState() { + return winnerState; + } + + public String toString() { + StringBuffer result = new StringBuffer(); + result.append("\nMighty Gumball, Inc."); + result.append("\nJava-enabled Standing Gumball Model #2004"); + result.append("\nInventory: " + count + " gumball"); + if (count != 1) { + result.append("s"); + } + result.append("\n"); + result.append("Machine is " + state + "\n"); + return result.toString(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachineTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachineTestDrive.java new file mode 100755 index 0000000..6e43755 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachineTestDrive.java @@ -0,0 +1,46 @@ +package headfirst.designpatterns.state.gumballstatewinner; + +public class GumballMachineTestDrive { + + public static void main(String[] args) { + GumballMachine gumballMachine = + new GumballMachine(10); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + gumballMachine.insertQuarter(); + gumballMachine.turnCrank(); + + System.out.println(gumballMachine); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/HasQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/HasQuarterState.java new file mode 100755 index 0000000..efaabd4 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/HasQuarterState.java @@ -0,0 +1,41 @@ +package headfirst.designpatterns.state.gumballstatewinner; + +import java.util.Random; + +public class HasQuarterState implements State { + Random randomWinner = new Random(System.currentTimeMillis()); + GumballMachine gumballMachine; + + public HasQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You can't insert another quarter"); + } + + public void ejectQuarter() { + System.out.println("Quarter returned"); + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } + + public void turnCrank() { + System.out.println("You turned..."); + int winner = randomWinner.nextInt(10); + if ((winner == 0) && (gumballMachine.getCount() > 1)) { + gumballMachine.setState(gumballMachine.getWinnerState()); + } else { + gumballMachine.setState(gumballMachine.getSoldState()); + } + } + + public void dispense() { + System.out.println("No gumball dispensed"); + } + + public void refill() { } + + public String toString() { + return "waiting for turn of crank"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/NoQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/NoQuarterState.java new file mode 100755 index 0000000..448c4d0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/NoQuarterState.java @@ -0,0 +1,32 @@ +package headfirst.designpatterns.state.gumballstatewinner; + +public class NoQuarterState implements State { + GumballMachine gumballMachine; + + public NoQuarterState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You inserted a quarter"); + gumballMachine.setState(gumballMachine.getHasQuarterState()); + } + + public void ejectQuarter() { + System.out.println("You haven't inserted a quarter"); + } + + public void turnCrank() { + System.out.println("You turned, but there's no quarter"); + } + + public void dispense() { + System.out.println("You need to pay first"); + } + + public void refill() { } + + public String toString() { + return "waiting for quarter"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldOutState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldOutState.java new file mode 100755 index 0000000..9fdfd23 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldOutState.java @@ -0,0 +1,33 @@ +package headfirst.designpatterns.state.gumballstatewinner; + +public class SoldOutState implements State { + GumballMachine gumballMachine; + + public SoldOutState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("You can't insert a quarter, the machine is sold out"); + } + + public void ejectQuarter() { + System.out.println("You can't eject, you haven't inserted a quarter yet"); + } + + public void turnCrank() { + System.out.println("You turned, but there are no gumballs"); + } + + public void dispense() { + System.out.println("No gumball dispensed"); + } + + public void refill() { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } + + public String toString() { + return "sold out"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldState.java new file mode 100755 index 0000000..4d816b5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldState.java @@ -0,0 +1,37 @@ +package headfirst.designpatterns.state.gumballstatewinner; + +public class SoldState implements State { + GumballMachine gumballMachine; + + public SoldState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("Please wait, we're already giving you a gumball"); + } + + public void ejectQuarter() { + System.out.println("Sorry, you already turned the crank"); + } + + public void turnCrank() { + System.out.println("Turning twice doesn't get you another gumball!"); + } + + public void dispense() { + gumballMachine.releaseBall(); + if (gumballMachine.getCount() > 0) { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } else { + System.out.println("Oops, out of gumballs!"); + gumballMachine.setState(gumballMachine.getSoldOutState()); + } + } + + public void refill() { } + + public String toString() { + return "dispensing a gumball"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/State.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/State.java new file mode 100755 index 0000000..eaee8e5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/State.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.state.gumballstatewinner; + +public interface State { + + public void insertQuarter(); + public void ejectQuarter(); + public void turnCrank(); + public void dispense(); + + public void refill(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/WinnerState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/WinnerState.java new file mode 100755 index 0000000..1f84d09 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/WinnerState.java @@ -0,0 +1,43 @@ +package headfirst.designpatterns.state.gumballstatewinner; + +public class WinnerState implements State { + GumballMachine gumballMachine; + + public WinnerState(GumballMachine gumballMachine) { + this.gumballMachine = gumballMachine; + } + + public void insertQuarter() { + System.out.println("Please wait, we're already giving you a Gumball"); + } + + public void ejectQuarter() { + System.out.println("Please wait, we're already giving you a Gumball"); + } + + public void turnCrank() { + System.out.println("Turning again doesn't get you another gumball!"); + } + + public void dispense() { + gumballMachine.releaseBall(); + if (gumballMachine.getCount() == 0) { + gumballMachine.setState(gumballMachine.getSoldOutState()); + } else { + gumballMachine.releaseBall(); + System.out.println("YOU'RE A WINNER! You got two gumballs for your quarter"); + if (gumballMachine.getCount() > 0) { + gumballMachine.setState(gumballMachine.getNoQuarterState()); + } else { + System.out.println("Oops, out of gumballs!"); + gumballMachine.setState(gumballMachine.getSoldOutState()); + } + } + } + + public void refill() { } + + public String toString() { + return "despensing two gumballs for your quarter, because YOU'RE A WINNER!"; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/AnimalTest.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/AnimalTest.java new file mode 100644 index 0000000..b74481c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/AnimalTest.java @@ -0,0 +1,40 @@ +package headfirst.designpatterns.strategy; + +import java.util.ArrayList; + +public class AnimalTest { + + public static void main(String[] args) { + AnimalTest at = new AnimalTest(); + at.makeSomeAnimals(); + } + public void makeSomeAnimals() { + Animal dog = new Dog(); + Animal cat = new Cat(); + // treat dogs and cats as their supertype, Animal + ArrayList animals = new ArrayList(); + animals.add(dog); + animals.add(cat); + animals.forEach(Animal::makeSound); // can call makeSound on any Animal + } + + public abstract class Animal { + abstract void makeSound(); + } + public class Dog extends Animal { + void makeSound() { + bark(); + } + void bark() { + System.out.println("Woof"); + } + } + public class Cat extends Animal { + void makeSound() { + meow(); + } + void meow() { + System.out.println("Meow"); + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/DecoyDuck.java new file mode 100755 index 0000000..a02c64a --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/DecoyDuck.java @@ -0,0 +1,11 @@ +package headfirst.designpatterns.strategy; + +public class DecoyDuck extends Duck { + public DecoyDuck() { + setFlyBehavior(new FlyNoWay()); + setQuackBehavior(new MuteQuack()); + } + public void display() { + System.out.println("I'm a duck Decoy"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Duck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Duck.java new file mode 100755 index 0000000..8535201 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Duck.java @@ -0,0 +1,31 @@ +package headfirst.designpatterns.strategy; + +public abstract class Duck { + FlyBehavior flyBehavior; + QuackBehavior quackBehavior; + + public Duck() { + } + + public void setFlyBehavior(FlyBehavior fb) { + flyBehavior = fb; + } + + public void setQuackBehavior(QuackBehavior qb) { + quackBehavior = qb; + } + + abstract void display(); + + public void performFly() { + flyBehavior.fly(); + } + + public void performQuack() { + quackBehavior.quack(); + } + + public void swim() { + System.out.println("All ducks float, even decoys!"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FakeQuack.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FakeQuack.java new file mode 100755 index 0000000..13dd018 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FakeQuack.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy; + +public class FakeQuack implements QuackBehavior { + public void quack() { + System.out.println("Qwak"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyBehavior.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyBehavior.java new file mode 100755 index 0000000..c1c337b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyBehavior.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.strategy; + +public interface FlyBehavior { + public void fly(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyNoWay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyNoWay.java new file mode 100755 index 0000000..dd2bec0 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyNoWay.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy; + +public class FlyNoWay implements FlyBehavior { + public void fly() { + System.out.println("I can't fly"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyRocketPowered.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyRocketPowered.java new file mode 100755 index 0000000..40d862e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyRocketPowered.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy; + +public class FlyRocketPowered implements FlyBehavior { + public void fly() { + System.out.println("I'm flying with a rocket"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyWithWings.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyWithWings.java new file mode 100755 index 0000000..ddc1374 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyWithWings.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy; + +public class FlyWithWings implements FlyBehavior { + public void fly() { + System.out.println("I'm flying!!"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MallardDuck.java new file mode 100755 index 0000000..a58383c --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MallardDuck.java @@ -0,0 +1,15 @@ +package headfirst.designpatterns.strategy; + +public class MallardDuck extends Duck { + + public MallardDuck() { + + quackBehavior = new Quack(); + flyBehavior = new FlyWithWings(); + + } + + public void display() { + System.out.println("I'm a real Mallard duck"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator.java new file mode 100755 index 0000000..f13e8cc --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.strategy; + +public class MiniDuckSimulator { + + public static void main(String[] args) { + + MallardDuck mallard = new MallardDuck(); + FlyBehavior cantFly = () -> System.out.println("I can't fly"); + QuackBehavior squeak = () -> System.out.println("Squeak"); + RubberDuck rubberDuckie = new RubberDuck(cantFly, squeak); + DecoyDuck decoy = new DecoyDuck(); + + Duck model = new ModelDuck(); + + mallard.performQuack(); + rubberDuckie.performQuack(); + decoy.performQuack(); + + model.performFly(); + model.setFlyBehavior(new FlyRocketPowered()); + model.performFly(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator1.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator1.java new file mode 100755 index 0000000..4f8b0c1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator1.java @@ -0,0 +1,17 @@ +package headfirst.designpatterns.strategy; + +public class MiniDuckSimulator1 { + + public static void main(String[] args) { + + Duck mallard = new MallardDuck(); + mallard.performQuack(); + mallard.performFly(); + + Duck model = new ModelDuck(); + model.performFly(); + model.setFlyBehavior(new FlyRocketPowered()); + model.performFly(); + + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/ModelDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/ModelDuck.java new file mode 100755 index 0000000..f27c30e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/ModelDuck.java @@ -0,0 +1,12 @@ +package headfirst.designpatterns.strategy; + +public class ModelDuck extends Duck { + public ModelDuck() { + flyBehavior = new FlyNoWay(); + quackBehavior = new Quack(); + } + + public void display() { + System.out.println("I'm a model duck"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MuteQuack.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MuteQuack.java new file mode 100755 index 0000000..485e721 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MuteQuack.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy; + +public class MuteQuack implements QuackBehavior { + public void quack() { + System.out.println("<< Silence >>"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Quack.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Quack.java new file mode 100755 index 0000000..b96c3c1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Quack.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy; + +public class Quack implements QuackBehavior { + public void quack() { + System.out.println("Quack"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/QuackBehavior.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/QuackBehavior.java new file mode 100755 index 0000000..91ce5fa --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/QuackBehavior.java @@ -0,0 +1,5 @@ +package headfirst.designpatterns.strategy; + +public interface QuackBehavior { + public void quack(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RedHeadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RedHeadDuck.java new file mode 100755 index 0000000..ceb65da --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RedHeadDuck.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.strategy; + +public class RedHeadDuck extends Duck { + + public RedHeadDuck() { + flyBehavior = new FlyWithWings(); + quackBehavior = new Quack(); + } + + public void display() { + System.out.println("I'm a real Red Headed duck"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RubberDuck.java new file mode 100755 index 0000000..4c4df51 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RubberDuck.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.strategy; + +public class RubberDuck extends Duck { + + public RubberDuck() { + flyBehavior = new FlyNoWay(); + //quackBehavior = new Squeak(); + quackBehavior = () -> System.out.println("Squeak"); + } + + public RubberDuck(FlyBehavior flyBehavior, QuackBehavior quackBehavior) { + this.flyBehavior = flyBehavior; + this.quackBehavior = quackBehavior; + } + + public void display() { + System.out.println("I'm a rubber duckie"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Squeak.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Squeak.java new file mode 100755 index 0000000..8751abd --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Squeak.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy; + +public class Squeak implements QuackBehavior { + public void quack() { + System.out.println("Squeak"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/BasicCameraApp.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/BasicCameraApp.java new file mode 100755 index 0000000..260b086 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/BasicCameraApp.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy.challenge; + +public class BasicCameraApp extends PhoneCameraApp { + public void edit() { + System.out.println("Basic editing features"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/CameraPlusApp.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/CameraPlusApp.java new file mode 100755 index 0000000..998e2de --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/CameraPlusApp.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy.challenge; + +public class CameraPlusApp extends PhoneCameraApp { + public void edit() { + System.out.println("Extra snazzy photo editing features"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Email.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Email.java new file mode 100755 index 0000000..f0b88c1 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Email.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy.challenge; + +public class Email implements ShareStrategy { + public void share() { + System.out.println("I'm emailing the photo"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhoneCameraApp.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhoneCameraApp.java new file mode 100755 index 0000000..ef47d54 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhoneCameraApp.java @@ -0,0 +1,19 @@ +package headfirst.designpatterns.strategy.challenge; + +public abstract class PhoneCameraApp { + ShareStrategy shareStrategy; + + public void setShareStrategy(ShareStrategy shareStrategy) { + this.shareStrategy = shareStrategy; + } + public void share() { + shareStrategy.share(); + } + public void take() { + System.out.println("Taking the photo"); + } + public void save() { + System.out.println("Saving the photo"); + } + public abstract void edit(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhotoWithPhone.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhotoWithPhone.java new file mode 100755 index 0000000..8056cbc --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhotoWithPhone.java @@ -0,0 +1,29 @@ +package headfirst.designpatterns.strategy.challenge; + +import java.util.Scanner; + +public class PhotoWithPhone { + + public static void main(String[] args) { + + PhoneCameraApp cameraApp = new BasicCameraApp(); + String share = getSharing(); + switch (share) { + case("t"): cameraApp.setShareStrategy(new Txt()); break; + case("e"): cameraApp.setShareStrategy(new Email()); break; + case("s"): cameraApp.setShareStrategy(new Social()); break; + default: cameraApp.setShareStrategy(new Txt()); + } + cameraApp.take(); + cameraApp.edit(); + cameraApp.save(); + cameraApp.share(); + } + public static String getSharing() { + Scanner scanner = new Scanner(System.in); + System.out.println("Share with txt (t), email (e), or social media (s)?"); + String appName = scanner.next(); + scanner.close(); + return appName; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/ShareStrategy.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/ShareStrategy.java new file mode 100755 index 0000000..0b644e5 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/ShareStrategy.java @@ -0,0 +1,6 @@ +package headfirst.designpatterns.strategy.challenge; + +@FunctionalInterface +public interface ShareStrategy { + public void share(); +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Social.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Social.java new file mode 100755 index 0000000..9fd5375 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Social.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy.challenge; + +public class Social implements ShareStrategy { + public void share() { + System.out.println("I'm posting the photo on social media"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Txt.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Txt.java new file mode 100755 index 0000000..6ca108b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Txt.java @@ -0,0 +1,7 @@ +package headfirst.designpatterns.strategy.challenge; + +public class Txt implements ShareStrategy { + public void share() { + System.out.println("I'm txting the photo"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/AppletSource.txt b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/AppletSource.txt new file mode 100755 index 0000000..347e221 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/AppletSource.txt @@ -0,0 +1,102 @@ +package java.applet; + +import java.awt.*; +import java.awt.image.ColorModel; +import java.net.URL; +import java.net.MalformedURLException; +import java.util.Hashtable; +import java.util.Locale; + +public class Applet extends Panel { + transient private AppletStub stub; + public final void setStub(AppletStub stub) { + this.stub = (AppletStub)stub; + } + public boolean isActive() { + if (stub != null) { + return stub.isActive(); + } else { // If stub field not filled in, applet never active + return false; + } + } + public URL getDocumentBase() { + return stub.getDocumentBase(); + } + public URL getCodeBase() { + return stub.getCodeBase(); + } + public String getParameter(String name) { + return stub.getParameter(name); + } + public AppletContext getAppletContext() { + return stub.getAppletContext(); + } + public void resize(int width, int height) { + Dimension d = size(); + if ((d.width != width) || (d.height != height)) { + super.resize(width, height); + if (stub != null) { + stub.appletResize(width, height); + } + } + } + public void resize(Dimension d) { + resize(d.width, d.height); + } + public void showStatus(String msg) { + getAppletContext().showStatus(msg); + } + public Image getImage(URL url) { + return getAppletContext().getImage(url); + } + public Image getImage(URL url, String name) { + try { + return getImage(new URL(url, name)); + } catch (MalformedURLException e) { + return null; + } + } + public AudioClip getAudioClip(URL url) { + return getAppletContext().getAudioClip(url); + } + public AudioClip getAudioClip(URL url, String name) { + try { + return getAudioClip(new URL(url, name)); + } catch (MalformedURLException e) { + return null; + } + } + public String getAppletInfo() { + return null; + } + public Locale getLocale() { + Locale locale = super.getLocale(); + if (locale == null) { + return Locale.getDefault(); + } + return locale; + } + public String[][] getParameterInfo() { + return null; + public void play(URL url) { + AudioClip clip = getAudioClip(url); + if (clip != null) { + clip.play(); + } + } + public void play(URL url, String name) { + AudioClip clip = getAudioClip(url, name); + if (clip != null) { + clip.play(); + } + } + public void init() { + } + public void start() { + } + public void stop() { + } + public void destroy() { +} +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/MyApplet.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/MyApplet.java new file mode 100755 index 0000000..8f5c834 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/MyApplet.java @@ -0,0 +1,34 @@ +package headfirst.designpatterns.templatemethod.applet; + +import java.applet.Applet; +import java.awt.Graphics; + +public class MyApplet extends Applet { + private static final long serialVersionUID = 2L; + String message; + + public void init() { + message = "Hello World, I'm alive!"; + repaint(); + } + + public void start() { + message = "Now I'm starting up..."; + repaint(); + } + + public void stop() { + message = "Oh, now I'm being stopped..."; + repaint(); + } + + public void destroy() { + message = "Goodbye, cruel world"; + repaint(); + } + + public void paint(Graphics g) { + g.drawString(message, 5, 15); + } +} + diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/BeverageTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/BeverageTestDrive.java new file mode 100755 index 0000000..16edaa9 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/BeverageTestDrive.java @@ -0,0 +1,25 @@ +package headfirst.designpatterns.templatemethod.barista; + +public class BeverageTestDrive { + public static void main(String[] args) { + + Tea tea = new Tea(); + Coffee coffee = new Coffee(); + + System.out.println("\nMaking tea..."); + tea.prepareRecipe(); + + System.out.println("\nMaking coffee..."); + coffee.prepareRecipe(); + + + TeaWithHook teaHook = new TeaWithHook(); + CoffeeWithHook coffeeHook = new CoffeeWithHook(); + + System.out.println("\nMaking tea..."); + teaHook.prepareRecipe(); + + System.out.println("\nMaking coffee..."); + coffeeHook.prepareRecipe(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverage.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverage.java new file mode 100755 index 0000000..d0a978f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverage.java @@ -0,0 +1,23 @@ +package headfirst.designpatterns.templatemethod.barista; + +public abstract class CaffeineBeverage { + + final void prepareRecipe() { + boilWater(); + brew(); + pourInCup(); + addCondiments(); + } + + abstract void brew(); + + abstract void addCondiments(); + + void boilWater() { + System.out.println("Boiling water"); + } + + void pourInCup() { + System.out.println("Pouring into cup"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverageWithHook.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverageWithHook.java new file mode 100755 index 0000000..2199d78 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverageWithHook.java @@ -0,0 +1,29 @@ +package headfirst.designpatterns.templatemethod.barista; + +public abstract class CaffeineBeverageWithHook { + + final void prepareRecipe() { + boilWater(); + brew(); + pourInCup(); + if (customerWantsCondiments()) { + addCondiments(); + } + } + + abstract void brew(); + + abstract void addCondiments(); + + void boilWater() { + System.out.println("Boiling water"); + } + + void pourInCup() { + System.out.println("Pouring into cup"); + } + + boolean customerWantsCondiments() { + return true; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Coffee.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Coffee.java new file mode 100755 index 0000000..0f8058b --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Coffee.java @@ -0,0 +1,10 @@ +package headfirst.designpatterns.templatemethod.barista; + +public class Coffee extends CaffeineBeverage { + public void brew() { + System.out.println("Dripping Coffee through filter"); + } + public void addCondiments() { + System.out.println("Adding Sugar and Milk"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CoffeeWithHook.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CoffeeWithHook.java new file mode 100755 index 0000000..7a10e54 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CoffeeWithHook.java @@ -0,0 +1,42 @@ +package headfirst.designpatterns.templatemethod.barista; + +import java.io.*; + +public class CoffeeWithHook extends CaffeineBeverageWithHook { + + public void brew() { + System.out.println("Dripping Coffee through filter"); + } + + public void addCondiments() { + System.out.println("Adding Sugar and Milk"); + } + + public boolean customerWantsCondiments() { + + String answer = getUserInput(); + + if (answer.toLowerCase().startsWith("y")) { + return true; + } else { + return false; + } + } + + private String getUserInput() { + String answer = null; + + System.out.print("Would you like milk and sugar with your coffee (y/n)? "); + + BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); + try { + answer = in.readLine(); + } catch (IOException ioe) { + System.err.println("IO error trying to read your answer"); + } + if (answer == null) { + return "no"; + } + return answer; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Tea.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Tea.java new file mode 100755 index 0000000..b60d91f --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Tea.java @@ -0,0 +1,10 @@ +package headfirst.designpatterns.templatemethod.barista; + +public class Tea extends CaffeineBeverage { + public void brew() { + System.out.println("Steeping the tea"); + } + public void addCondiments() { + System.out.println("Adding Lemon"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/TeaWithHook.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/TeaWithHook.java new file mode 100755 index 0000000..c65cdff --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/TeaWithHook.java @@ -0,0 +1,43 @@ +package headfirst.designpatterns.templatemethod.barista; + +import java.io.*; + +public class TeaWithHook extends CaffeineBeverageWithHook { + + public void brew() { + System.out.println("Steeping the tea"); + } + + public void addCondiments() { + System.out.println("Adding Lemon"); + } + + public boolean customerWantsCondiments() { + + String answer = getUserInput(); + + if (answer.toLowerCase().startsWith("y")) { + return true; + } else { + return false; + } + } + + private String getUserInput() { + // get the user's response + String answer = null; + + System.out.print("Would you like lemon with your tea (y/n)? "); + + BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); + try { + answer = in.readLine(); + } catch (IOException ioe) { + System.err.println("IO error trying to read your answer"); + } + if (answer == null) { + return "no"; + } + return answer; + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/frame/MyFrame.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/frame/MyFrame.java new file mode 100755 index 0000000..13c440d --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/frame/MyFrame.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.templatemethod.frame; + +import java.awt.*; +import javax.swing.*; + +public class MyFrame extends JFrame { + private static final long serialVersionUID = 2L; + + public MyFrame(String title) { + super(title); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + this.setSize(300,300); + this.setVisible(true); + } + + public void paint(Graphics graphics) { + super.paint(graphics); + String msg = "I rule!!"; + graphics.drawString(msg, 100, 100); + } + + public static void main(String[] args) { + MyFrame myFrame = new MyFrame("Head First Design Patterns"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyListTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyListTestDrive.java new file mode 100644 index 0000000..4af8555 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyListTestDrive.java @@ -0,0 +1,26 @@ +package headfirst.designpatterns.templatemethod.list; + +import java.util.List; + +public class MyListTestDrive { + + public static void main(String[] args) { + String[] ducks = { "Mallard Duck", "Redhead Duck", "Rubber Duck", "Decoy Duck"}; + MyStringList ducksList = new MyStringList(ducks); + for (int i = 0; i < ducksList.size(); i++) { + System.out.println(ducksList.get(i)); + } + String oldDuck = ducksList.set(3, "Donald Duck"); + System.out.println("Replacing " + oldDuck); + System.out.println("New List:"); + for (int i = 0; i < ducksList.size(); i++) { + System.out.println(ducksList.get(i)); + } + // Now the real test... subList() + List ducksSubList = ducksList.subList(2, 3); + System.out.println("Created a sub list of ducks, with size: " + ducksSubList.size()); + for (int i = 0; i < ducksSubList.size(); i++) { + System.out.println(ducksSubList.get(i)); + } + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyStringList.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyStringList.java new file mode 100644 index 0000000..769ae24 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyStringList.java @@ -0,0 +1,35 @@ +package headfirst.designpatterns.templatemethod.list; + +import java.util.AbstractList; + +// AbstractList provides a skeletal implementation of the List interface +// to minimize the effort required to implement this interface backed by +// a "random access" data store (such as an array). + +// To implement an unmodifiable list, the programmer needs only to extend +// this class and provide implementations for the get(int) and size() methods. +// get(int index) is an abstract method in AbstractList +// size() is an abstract method in AbstractCollection +// subList(int fromIndex, int toIndex) returns a view of the portion of this list +// between the specified fromIndex, inclusive, and toIndex, exclusive. + +public class MyStringList extends AbstractList { + private String[] myList; + MyStringList(String[] strings) { + myList = strings; + } + @Override + public String get(int index) { + return myList[index]; + } + @Override + public String set(int index, String item) { + String oldString = myList[index]; + myList[index] = item; + return oldString; + } + @Override + public int size() { + return myList.length; + } +} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Barista.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Barista.java new file mode 100755 index 0000000..7e5655e --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Barista.java @@ -0,0 +1,13 @@ +package headfirst.designpatterns.templatemethod.simplebarista; + +public class Barista { + + public static void main(String[] args) { + Tea tea = new Tea(); + Coffee coffee = new Coffee(); + System.out.println("Making tea..."); + tea.prepareRecipe(); + System.out.println("Making coffee..."); + coffee.prepareRecipe(); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Coffee.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Coffee.java new file mode 100755 index 0000000..7ee8d65 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Coffee.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.templatemethod.simplebarista; + +public class Coffee { + + void prepareRecipe() { + boilWater(); + brewCoffeeGrinds(); + pourInCup(); + addSugarAndMilk(); + } + + public void boilWater() { + System.out.println("Boiling water"); + } + + public void brewCoffeeGrinds() { + System.out.println("Dripping Coffee through filter"); + } + + public void pourInCup() { + System.out.println("Pouring into cup"); + } + + public void addSugarAndMilk() { + System.out.println("Adding Sugar and Milk"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Tea.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Tea.java new file mode 100755 index 0000000..c0b8624 --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Tea.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.templatemethod.simplebarista; + +public class Tea { + + void prepareRecipe() { + boilWater(); + steepTeaBag(); + pourInCup(); + addLemon(); + } + + public void boilWater() { + System.out.println("Boiling water"); + } + + public void steepTeaBag() { + System.out.println("Steeping the tea"); + } + + public void addLemon() { + System.out.println("Adding Lemon"); + } + + public void pourInCup() { + System.out.println("Pouring into cup"); + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/Duck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/Duck.java new file mode 100755 index 0000000..227c7ac --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/Duck.java @@ -0,0 +1,27 @@ +package headfirst.designpatterns.templatemethod.sort; + +public class Duck implements Comparable { + String name; + int weight; + + public Duck(String name, int weight) { + this.name = name; + this.weight = weight; + } + + public String toString() { + return name + " weighs " + weight; + } + + public int compareTo(Duck otherDuck) { + + + if (this.weight < otherDuck.weight) { + return -1; + } else if (this.weight == otherDuck.weight) { + return 0; + } else { // this.weight > otherDuck.weight + return 1; + } + } +} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/DuckSortTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/DuckSortTestDrive.java new file mode 100755 index 0000000..2142eba --- /dev/null +++ b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/DuckSortTestDrive.java @@ -0,0 +1,31 @@ +package headfirst.designpatterns.templatemethod.sort; + +import java.util.Arrays; + +public class DuckSortTestDrive { + + public static void main(String[] args) { + Duck[] ducks = { + new Duck("Daffy", 8), + new Duck("Dewey", 2), + new Duck("Howard", 7), + new Duck("Louie", 2), + new Duck("Donald", 10), + new Duck("Huey", 2) + }; + + System.out.println("Before sorting:"); + display(ducks); + + Arrays.sort(ducks); + + System.out.println("\nAfter sorting:"); + display(ducks); + } + + public static void display(Duck[] ducks) { + for (Duck d : ducks) { + System.out.println(d); + } + } +} diff --git a/Head-First-Design-Patterns-master/test.txt b/Head-First-Design-Patterns-master/test.txt new file mode 100644 index 0000000..7563cb4 --- /dev/null +++ b/Head-First-Design-Patterns-master/test.txt @@ -0,0 +1 @@ +I know the Decorator Pattern and HOW it's used in the JAVA.IO package. \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/testOut.txt b/Head-First-Design-Patterns-master/testOut.txt new file mode 100644 index 0000000..7563cb4 --- /dev/null +++ b/Head-First-Design-Patterns-master/testOut.txt @@ -0,0 +1 @@ +I know the Decorator Pattern and HOW it's used in the JAVA.IO package. \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/zipInput.zip b/Head-First-Design-Patterns-master/zipInput.zip new file mode 100644 index 0000000000000000000000000000000000000000..9d6ec8aa237c58a0e42ae3d10c21b106277d936f GIT binary patch literal 632 zcmWIWW@Zs#-~hs-6?0t}kN_`(07FJeM!XMqRbPle4Z!?mDLKe|(W(gcgk))*)mnWGR?3VrmGU*aB)(aO zEOC%tEvvin=7zJ8A2ON_|E%I=;5hPo)(3IsTiciE+PXT{1v$JnU2T-O{D)Ci8KYED zOZb$jc5k@P_3YU6#doQR_}+yD+<#=}iY=bbQZKkzbBp%*ShgvlmyG6d->hHev$9Hk z)x!Si4`=+JF!zU;eSkMRNB8qqCT2zkhBPJyh5&eIZYkh#MhZ+|_zEzTq!yRJ0#fvJ zew>OQXAmeLKZl$+cUnJOCs033 zL)XtY@WdHr?XN{V#aBLm3D@xOIp^o&f0Y?%H9N<|pV!n~fwsB Date: Fri, 27 Oct 2023 21:25:50 +0900 Subject: [PATCH 32/37] apply composite pattern --- chapter09_iterator_composite/composite.py | 178 ++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 chapter09_iterator_composite/composite.py diff --git a/chapter09_iterator_composite/composite.py b/chapter09_iterator_composite/composite.py new file mode 100644 index 0000000..3d7e2e9 --- /dev/null +++ b/chapter09_iterator_composite/composite.py @@ -0,0 +1,178 @@ +# package headfirst.designpatterns.iterator.dinermergercafe +class MenuComponent: + def add(self, menu_component): + raise NotImplementedError + + def remove(self, menu_component): + raise NotImplementedError + + def get_child(self, i: int): + raise NotImplementedError + + def print(self): + raise NotImplementedError + + +class MenuItem(MenuComponent): + def __init__( + self, + name: str, + description: str, + vegetarian: bool, + price: float, + ): + self.name = name + self.description = description + self.vegetarian = vegetarian + self.price = price + + def print(self): + print(" " + self.name + "(v)" * self.vegetarian + ", " + str(self.price)) + print(" -- " + self.description) + + +class Menu(MenuComponent): + name: str + description: str + + def __init__(self, name: str, description: str): + self.menu_components: list[MenuComponent] = [] + self.name = name + self.description = description + + def add(self, menu_component: MenuComponent): + self.menu_components.append(menu_component) + + def remove(self, menu_component: MenuComponent): + self.menu_components.remove(menu_component) + + def get_child(self, i: int): + return self.menu_components[i] + + def print(self): + print('\n' + self.name + ", " + self.description) + print('--------------------') + + for menu_component in self.menu_components: + menu_component.print() + + def __iter__(self): + raise NotImplementedError + + +class CafeMenu(Menu): + def __iter__(self): + return iter(self.menu_items.values()) + + +class DinerMenu(Menu): + def __iter__(self): + return iter(self.menu_items) + + +class Waitress: + def __init__(self, all_menus: MenuComponent): + self.all_menus = all_menus + + def print_menu(self): + self.all_menus.print() + + +def menu_test_drive(): + cafe_menu = CafeMenu('Cafe Menu', 'For Dinner') + diner_menu = DinerMenu('Diner Menu', 'For Lunch') + all_menus: MenuComponent = Menu('all menus', 'all menus') + all_menus.add(cafe_menu) + all_menus.add(diner_menu) + cafe_menu.add( + MenuItem( + "Veggie Burger and Air Fries", + "Veggie burger on a whole wheat bun, lettuce, tomato, and fries", + True, + 3.99, + ) + ) + cafe_menu.add( + MenuItem( + "Soup of the day", + "A cup of the soup of the day, with a side salad", + False, + 3.69, + ) + ) + cafe_menu.add( + MenuItem( + "Burrito", + "A large burrito, with whole pinto beans, salsa, guacamole", + True, + 4.29, + ) + ) + diner_menu.add( + MenuItem( + "Vegetarian BLT", + "(Fakin') Bacon with lettuce & tomato on whole wheat", + True, + 2.99, + ) + ) + diner_menu.add( + MenuItem( + "BLT", + "Bacon with lettuce & tomato on whole wheat", + False, + 2.99, + ) + ) + diner_menu.add( + MenuItem( + "Soup of the day", + "Soup of the day, with a side of potato salad", + False, + 3.29, + ) + ) + diner_menu.add( + MenuItem( + "Hotdog", + "A hot dog, with sauerkraut, relish, onions, topped with cheese", + False, + 3.05, + ) + ) + diner_menu.add( + MenuItem( + "Steamed Veggies and Brown Rice", + "A medly of steamed vegetables over brown rice", + True, + 3.99, + ) + ) + diner_menu.add( + MenuItem( + "Pasta", + "Spaghetti with Marinara Sauce, and a slice of sourdough bread", + True, + 3.89, + ) + ) + cafe_menu.print() + waitress = Waitress(all_menus) + waitress.print_menu() + # print("\nCustomer asks, is the Hotdog vegetarian?") + # print("Waitress says: ", end="") + # if waitress.is_item_vegetarian("Hotdog"): + # print("Yes") + # else: + # print("No") + + +""" print("\nCustomer asks, are the Waffles vegetarian?") # Not implemented + print("Waitress says: ", end="") + if (waitress.is_item_vegetarian("Waffles")): + print("Yes") + else: + print("No")""" + +if __name__ == "__main__": + menu_test_drive() From d5fca736d8f8cc40f5d27e2f28ff84c77c408ba2 Mon Sep 17 00:00:00 2001 From: thebjko Date: Fri, 27 Oct 2023 21:28:46 +0900 Subject: [PATCH 33/37] Revert "add source code" This reverts commit 0f6df90af279d0c6d6ee51f8b6c3b9db3a8e8c56. --- Head-First-Design-Patterns-master/README.md | 8 - Head-First-Design-Patterns-master/clap.wav | Bin 37462 -> 0 bytes .../heatindex.txt | 11 -- .../designpatterns/adapter/ducks/Duck.java | 6 - .../adapter/ducks/DuckAdapter.java | 22 --- .../adapter/ducks/DuckTestDrive.java | 34 ---- .../adapter/ducks/MallardDuck.java | 11 -- .../designpatterns/adapter/ducks/Turkey.java | 6 - .../adapter/ducks/TurkeyAdapter.java | 19 -- .../adapter/ducks/TurkeyTestDrive.java | 14 -- .../adapter/ducks/WildTurkey.java | 11 -- .../adapter/ducks/challenge/Drone.java | 7 - .../adapter/ducks/challenge/DroneAdapter.java | 20 -- .../adapter/ducks/challenge/SuperDrone.java | 13 -- .../designpatterns/adapter/iterenum/EI.java | 17 -- .../adapter/iterenum/EnumerationIterator.java | 23 --- .../EnumerationIteratorTestDrive.java | 13 -- .../adapter/iterenum/IteratorEnumeration.java | 19 -- .../IteratorEnumerationTestDrive.java | 13 -- .../designpatterns/bridge/remote/Client.java | 22 --- .../bridge/remote/GenericRemote.java | 15 -- .../designpatterns/bridge/remote/LG.java | 18 -- .../bridge/remote/RemoteControl.java | 28 --- .../designpatterns/bridge/remote/Sony.java | 18 -- .../bridge/remote/SpecialRemote.java | 15 -- .../designpatterns/bridge/remote/TV.java | 8 - .../bridge/remote/TVFactory.java | 13 -- .../house/GingerbreadHouseBuilder.java | 36 ---- .../designpatterns/builder/house/House.java | 65 ------ .../builder/house/HouseBuilder.java | 31 --- .../builder/house/HouseDirector.java | 35 ---- .../builder/house/InteriorWall.java | 20 -- .../designpatterns/builder/house/Roof.java | 19 -- .../builder/house/StoneHouseBuilder.java | 37 ---- .../designpatterns/builder/house/Wall.java | 19 -- .../designpatterns/builder/house/Window.java | 19 -- .../builder/house/WoodHouseBuilder.java | 44 ----- .../builder/pizza/MeatPizzaBuilder.java | 40 ---- .../designpatterns/builder/pizza/Pizza.java | 50 ----- .../builder/pizza/PizzaBuilder.java | 24 --- .../builder/pizza/PizzaDirector.java | 56 ------ .../builder/pizza/VeggiePizzaBuilder.java | 41 ---- .../builder/vacation/Accommodation.java | 27 --- .../builder/vacation/CityVacationBuilder.java | 32 --- .../builder/vacation/Hotel.java | 21 -- .../vacation/OutdoorsVacationBuilder.java | 32 --- .../builder/vacation/Reservation.java | 21 -- .../designpatterns/builder/vacation/Tent.java | 21 -- .../builder/vacation/Vacation.java | 33 ---- .../builder/vacation/VacationBuilder.java | 24 --- .../builder/vacation/VacationDirector.java | 22 --- .../collections/Collections.java | 27 --- .../collections/iterator/Cafe.java | 44 ----- .../collections/iterator/DinerMenu.java | 41 ---- .../iterator/DinerMenuIterator.java | 24 --- .../collections/iterator/Iterator.java | 6 - .../collections/iterator/Menu.java | 5 - .../iterator/PancakeHouseMenu.java | 35 ---- .../iterator/PancakeHouseMenuIterator.java | 26 --- .../collections/iterator_builtin/Cafe.java | 28 --- .../iterator_builtin/DinerMenu.java | 43 ---- .../iterator_builtin/DinerMenuIterator.java | 39 ---- .../collections/iterator_builtin/Menu.java | 7 - .../iterator_builtin/PancakeHouseMenu.java | 36 ---- .../combined/djview/BPMObserver.java | 5 - .../combined/djview/BeatBar.java | 27 --- .../combined/djview/BeatController.java | 42 ---- .../combined/djview/BeatModel.java | 107 ---------- .../combined/djview/BeatModelInterface.java | 21 -- .../combined/djview/BeatObserver.java | 5 - .../combined/djview/ControllerInterface.java | 9 - .../combined/djview/DJTestDrive.java | 9 - .../combined/djview/DJView.java | 187 ------------------ .../combined/djview/DJViewHttpHandler.java | 101 ---------- .../combined/djview/DJViewHttpServer.java | 26 --- .../combined/djview/DJViewServlet.java | 77 -------- .../combined/djview/HeartAdapter.java | 37 ---- .../combined/djview/HeartController.java | 28 --- .../combined/djview/HeartModel.java | 79 -------- .../combined/djview/HeartModelInterface.java | 9 - .../combined/djview/HeartTestDrive.java | 9 - .../designpatterns/combined/djview/README.md | 66 ------- .../combined/djview/jsp/WEB-INF/web.xml | 40 ---- .../combined/djview/jsp/djview.jsp | 29 --- .../combined/djview/jsp/index.html | 10 - .../combining/adapter/DecoyDuck.java | 7 - .../combining/adapter/DuckCall.java | 7 - .../combining/adapter/DuckSimulator.java | 28 --- .../combining/adapter/Goose.java | 7 - .../combining/adapter/GooseAdapter.java | 17 -- .../combining/adapter/MallardDuck.java | 7 - .../combining/adapter/Quackable.java | 5 - .../combining/adapter/RedheadDuck.java | 7 - .../combining/adapter/RubberDuck.java | 7 - .../composite/AbstractDuckFactory.java | 9 - .../composite/CountingDuckFactory.java | 20 -- .../combining/composite/DecoyDuck.java | 12 -- .../combining/composite/DuckCall.java | 12 -- .../combining/composite/DuckFactory.java | 20 -- .../combining/composite/DuckSimulator.java | 55 ------ .../combining/composite/Flock.java | 24 --- .../combining/composite/Goose.java | 11 -- .../combining/composite/GooseAdapter.java | 17 -- .../combining/composite/MallardDuck.java | 12 -- .../combining/composite/QuackCounter.java | 23 --- .../combining/composite/Quackable.java | 5 - .../combining/composite/RedheadDuck.java | 11 -- .../combining/composite/RubberDuck.java | 12 -- .../combining/decorator/DecoyDuck.java | 12 -- .../combining/decorator/DuckCall.java | 12 -- .../combining/decorator/DuckSimulator.java | 31 --- .../combining/decorator/Goose.java | 11 -- .../combining/decorator/GooseAdapter.java | 17 -- .../combining/decorator/MallardDuck.java | 12 -- .../combining/decorator/QuackCounter.java | 22 --- .../combining/decorator/Quackable.java | 5 - .../combining/decorator/RedheadDuck.java | 7 - .../combining/decorator/RubberDuck.java | 12 -- .../combining/ducks/DecoyDuck.java | 7 - .../combining/ducks/DuckCall.java | 7 - .../combining/ducks/DuckSimulator.java | 26 --- .../combining/ducks/MallardDuck.java | 7 - .../combining/ducks/Quackable.java | 5 - .../combining/ducks/RedheadDuck.java | 7 - .../combining/ducks/RubberDuck.java | 7 - .../factory/AbstractDuckFactory.java | 9 - .../factory/CountingDuckFactory.java | 20 -- .../combining/factory/DecoyDuck.java | 12 -- .../combining/factory/DuckCall.java | 12 -- .../combining/factory/DuckFactory.java | 20 -- .../combining/factory/DuckSimulator.java | 34 ---- .../combining/factory/Goose.java | 11 -- .../combining/factory/GooseAdapter.java | 17 -- .../combining/factory/MallardDuck.java | 12 -- .../combining/factory/QuackCounter.java | 23 --- .../combining/factory/Quackable.java | 5 - .../combining/factory/RedheadDuck.java | 7 - .../combining/factory/RubberDuck.java | 12 -- .../observer/.QuackDecorator.java.swp | Bin 12288 -> 0 bytes .../observer/AbstractDuckFactory.java | 9 - .../observer/CountingDuckFactory.java | 20 -- .../combining/observer/DecoyDuck.java | 26 --- .../combining/observer/DuckCall.java | 26 --- .../combining/observer/DuckFactory.java | 20 -- .../combining/observer/DuckSimulator.java | 54 ----- .../combining/observer/Flock.java | 34 ---- .../combining/observer/Goose.java | 12 -- .../combining/observer/GooseAdapter.java | 28 --- .../combining/observer/MallardDuck.java | 26 --- .../combining/observer/Observable.java | 30 --- .../combining/observer/Observer.java | 5 - .../combining/observer/QuackCounter.java | 31 --- .../combining/observer/QuackObservable.java | 6 - .../combining/observer/Quackable.java | 5 - .../combining/observer/Quackologist.java | 12 -- .../combining/observer/RedheadDuck.java | 26 --- .../combining/observer/RubberDuck.java | 26 --- .../command/diner/BurgerAndFriesOrder.java | 12 -- .../designpatterns/command/diner/Cook.java | 14 -- .../command/diner/Customer.java | 15 -- .../designpatterns/command/diner/Diner.java | 11 -- .../designpatterns/command/diner/Order.java | 6 - .../command/diner/Waitress.java | 10 - .../command/dinerLambda/Cook.java | 14 -- .../command/dinerLambda/Customer.java | 17 -- .../command/dinerLambda/Diner.java | 11 -- .../command/dinerLambda/Order.java | 6 - .../command/dinerLambda/Waitress.java | 10 - .../command/party/CeilingFan.java | 42 ---- .../command/party/CeilingFanHighCommand.java | 22 --- .../party/CeilingFanMediumCommand.java | 22 --- .../command/party/CeilingFanOffCommand.java | 22 --- .../designpatterns/command/party/Command.java | 6 - .../designpatterns/command/party/Hottub.java | 45 ----- .../command/party/HottubOffCommand.java | 17 -- .../command/party/HottubOnCommand.java | 17 -- .../designpatterns/command/party/Light.java | 34 ---- .../command/party/LightOffCommand.java | 17 -- .../command/party/LightOnCommand.java | 17 -- .../party/LivingroomLightOffCommand.java | 15 -- .../party/LivingroomLightOnCommand.java | 15 -- .../command/party/MacroCommand.java | 26 --- .../command/party/NoCommand.java | 6 - .../command/party/RemoteControl.java | 52 ----- .../command/party/RemoteLoader.java | 37 ---- .../designpatterns/command/party/Stereo.java | 35 ---- .../command/party/StereoOffCommand.java | 17 -- .../command/party/StereoOnCommand.java | 17 -- .../command/party/StereoOnWithCDCommand.java | 19 -- .../designpatterns/command/party/TV.java | 23 --- .../command/party/TVOffCommand.java | 17 -- .../command/party/TVOnCommand.java | 18 -- .../command/remote/CeilingFan.java | 42 ---- .../command/remote/CeilingFanOffCommand.java | 12 -- .../command/remote/CeilingFanOnCommand.java | 12 -- .../command/remote/Command.java | 5 - .../command/remote/GarageDoor.java | 29 --- .../command/remote/GarageDoorDownCommand.java | 13 -- .../command/remote/GarageDoorUpCommand.java | 13 -- .../designpatterns/command/remote/Hottub.java | 56 ------ .../command/remote/HottubOffCommand.java | 14 -- .../command/remote/HottubOnCommand.java | 15 -- .../designpatterns/command/remote/Light.java | 17 -- .../command/remote/LightOffCommand.java | 13 -- .../command/remote/LightOnCommand.java | 13 -- .../remote/LivingroomLightOffCommand.java | 13 -- .../remote/LivingroomLightOnCommand.java | 13 -- .../command/remote/NoCommand.java | 5 - .../command/remote/RemoteControl.java | 43 ---- .../command/remote/RemoteLoader.java | 54 ----- .../designpatterns/command/remote/Stereo.java | 35 ---- .../command/remote/StereoOffCommand.java | 13 -- .../command/remote/StereoOnWithCDCommand.java | 15 -- .../designpatterns/command/remote/TV.java | 23 --- .../command/remoteWL/CeilingFan.java | 42 ---- .../command/remoteWL/Command.java | 6 - .../command/remoteWL/GarageDoor.java | 29 --- .../command/remoteWL/Hottub.java | 56 ------ .../command/remoteWL/Light.java | 17 -- .../command/remoteWL/RemoteControl.java | 43 ---- .../command/remoteWL/RemoteLoader.java | 38 ---- .../command/remoteWL/Stereo.java | 35 ---- .../designpatterns/command/remoteWL/TV.java | 23 --- .../command/simpleremote/Command.java | 5 - .../command/simpleremote/GarageDoor.java | 27 --- .../simpleremote/GarageDoorOpenCommand.java | 13 -- .../command/simpleremote/Light.java | 15 -- .../command/simpleremote/LightOffCommand.java | 13 -- .../command/simpleremote/LightOnCommand.java | 13 -- .../simpleremote/RemoteControlTest.java | 18 -- .../simpleremote/SimpleRemoteControl.java | 18 -- .../command/simpleremoteWL/Command.java | 6 - .../command/simpleremoteWL/GarageDoor.java | 27 --- .../command/simpleremoteWL/Light.java | 15 -- .../simpleremoteWL/RemoteControlTest.java | 18 -- .../simpleremoteWL/SimpleRemoteControl.java | 18 -- .../command/swing/SwingCommandExample.java | 71 ------- .../command/undo/CeilingFan.java | 39 ---- .../command/undo/CeilingFanHighCommand.java | 27 --- .../command/undo/CeilingFanLowCommand.java | 27 --- .../command/undo/CeilingFanMediumCommand.java | 27 --- .../command/undo/CeilingFanOffCommand.java | 27 --- .../designpatterns/command/undo/Command.java | 6 - .../command/undo/DimmerLightOffCommand.java | 20 -- .../command/undo/DimmerLightOnCommand.java | 19 -- .../designpatterns/command/undo/Light.java | 34 ---- .../command/undo/LightOffCommand.java | 18 -- .../command/undo/LightOnCommand.java | 18 -- .../command/undo/NoCommand.java | 6 - .../command/undo/RemoteControlWithUndo.java | 52 ----- .../command/undo/RemoteLoader.java | 47 ----- .../designpatterns/composite/menu/Menu.java | 48 ----- .../composite/menu/MenuComponent.java | 31 --- .../composite/menu/MenuItem.java | 44 ----- .../composite/menu/MenuTestDrive.java | 131 ------------ .../composite/menu/Waitress.java | 13 -- .../menuiterator/CompositeIterator.java | 49 ----- .../composite/menuiterator/Menu.java | 57 ------ .../composite/menuiterator/MenuComponent.java | 35 ---- .../composite/menuiterator/MenuItem.java | 53 ----- .../composite/menuiterator/MenuTestDrive.java | 114 ----------- .../composite/menuiterator/NullIterator.java | 25 --- .../composite/menuiterator/Waitress.java | 29 --- .../decorator/io/InputTest.java | 36 ---- .../decorator/io/LowerCaseInputStream.java | 23 --- .../decorator/pizza/Cheese.java | 17 -- .../decorator/pizza/Olives.java | 17 -- .../designpatterns/decorator/pizza/Pizza.java | 11 -- .../decorator/pizza/PizzaStore.java | 14 -- .../decorator/pizza/ThickcrustPizza.java | 13 -- .../decorator/pizza/ThincrustPizza.java | 13 -- .../decorator/pizza/ToppingDecorator.java | 6 - .../decorator/starbuzz/Beverage.java | 11 -- .../starbuzz/CondimentDecorator.java | 6 - .../decorator/starbuzz/DarkRoast.java | 12 -- .../decorator/starbuzz/Decaf.java | 12 -- .../decorator/starbuzz/Espresso.java | 13 -- .../decorator/starbuzz/HouseBlend.java | 12 -- .../decorator/starbuzz/Milk.java | 15 -- .../decorator/starbuzz/Mocha.java | 15 -- .../decorator/starbuzz/Soy.java | 15 -- .../decorator/starbuzz/StarbuzzCoffee.java | 24 --- .../decorator/starbuzz/Whip.java | 15 -- .../decorator/starbuzzWithSizes/Beverage.java | 21 -- .../starbuzzWithSizes/CondimentDecorator.java | 10 - .../starbuzzWithSizes/DarkRoast.java | 12 -- .../decorator/starbuzzWithSizes/Decaf.java | 12 -- .../decorator/starbuzzWithSizes/Espresso.java | 13 -- .../starbuzzWithSizes/HouseBlend.java | 12 -- .../decorator/starbuzzWithSizes/Milk.java | 15 -- .../decorator/starbuzzWithSizes/Mocha.java | 15 -- .../decorator/starbuzzWithSizes/Soy.java | 23 --- .../starbuzzWithSizes/StarbuzzCoffee.java | 27 --- .../decorator/starbuzzWithSizes/Whip.java | 15 -- .../headfirst/designpatterns/ducks/Duck.java | 6 - .../designpatterns/ducks/DuckAdapter.java | 22 --- .../designpatterns/ducks/DuckTestDrive.java | 25 --- .../designpatterns/ducks/MallardDuck.java | 11 -- .../designpatterns/ducks/Turkey.java | 6 - .../designpatterns/ducks/TurkeyAdapter.java | 19 -- .../designpatterns/ducks/TurkeyTestDrive.java | 14 -- .../designpatterns/ducks/WildTurkey.java | 11 -- .../facade/hometheater/Amplifier.java | 45 ----- .../facade/hometheater/CdPlayer.java | 55 ------ .../facade/hometheater/HomeTheaterFacade.java | 72 ------- .../hometheater/HomeTheaterTestDrive.java | 21 -- .../facade/hometheater/PopcornPopper.java | 26 --- .../facade/hometheater/Projector.java | 31 --- .../facade/hometheater/Screen.java | 22 --- .../facade/hometheater/StreamingPlayer.java | 57 ------ .../facade/hometheater/TheaterLights.java | 25 --- .../facade/hometheater/Tuner.java | 36 ---- .../factory/challenge/Calendar.java | 13 -- .../factory/challenge/CalendarTestDrive.java | 14 -- .../factory/challenge/PacificCalendar.java | 15 -- .../factory/challenge/Zone.java | 8 - .../factory/challenge/ZoneCentral.java | 8 - .../factory/challenge/ZoneEastern.java | 8 - .../factory/challenge/ZoneFactory.java | 20 -- .../factory/challenge/ZoneMountain.java | 8 - .../factory/challenge/ZonePacific.java | 8 - .../factory/pizzaaf/BlackOlives.java | 8 - .../factory/pizzaaf/Cheese.java | 5 - .../factory/pizzaaf/CheesePizza.java | 16 -- .../ChicagoPizzaIngredientFactory.java | 33 ---- .../factory/pizzaaf/ChicagoPizzaStore.java | 33 ---- .../factory/pizzaaf/ClamPizza.java | 17 -- .../designpatterns/factory/pizzaaf/Clams.java | 5 - .../designpatterns/factory/pizzaaf/Dough.java | 5 - .../factory/pizzaaf/Eggplant.java | 8 - .../factory/pizzaaf/FreshClams.java | 8 - .../factory/pizzaaf/FrozenClams.java | 8 - .../factory/pizzaaf/Garlic.java | 8 - .../factory/pizzaaf/MarinaraSauce.java | 7 - .../factory/pizzaaf/MozzarellaCheese.java | 8 - .../factory/pizzaaf/Mushroom.java | 8 - .../pizzaaf/NYPizzaIngredientFactory.java | 29 --- .../factory/pizzaaf/NYPizzaStore.java | 33 ---- .../designpatterns/factory/pizzaaf/Onion.java | 8 - .../factory/pizzaaf/ParmesanCheese.java | 8 - .../factory/pizzaaf/Pepperoni.java | 5 - .../factory/pizzaaf/PepperoniPizza.java | 18 -- .../designpatterns/factory/pizzaaf/Pizza.java | 69 ------- .../pizzaaf/PizzaIngredientFactory.java | 12 -- .../factory/pizzaaf/PizzaStore.java | 16 -- .../factory/pizzaaf/PizzaTestDrive.java | 33 ---- .../factory/pizzaaf/PlumTomatoSauce.java | 7 - .../factory/pizzaaf/RedPepper.java | 8 - .../factory/pizzaaf/ReggianoCheese.java | 8 - .../designpatterns/factory/pizzaaf/Sauce.java | 5 - .../factory/pizzaaf/SlicedPepperoni.java | 8 - .../factory/pizzaaf/Spinach.java | 8 - .../factory/pizzaaf/ThickCrustDough.java | 7 - .../factory/pizzaaf/ThinCrustDough.java | 7 - .../factory/pizzaaf/VeggiePizza.java | 17 -- .../factory/pizzaaf/Veggies.java | 5 - .../factory/pizzafm/ChicagoPizzaStore.java | 16 -- .../pizzafm/ChicagoStyleCheesePizza.java | 16 -- .../pizzafm/ChicagoStyleClamPizza.java | 16 -- .../pizzafm/ChicagoStylePepperoniPizza.java | 19 -- .../pizzafm/ChicagoStyleVeggiePizza.java | 18 -- .../factory/pizzafm/DependentPizzaStore.java | 37 ---- .../factory/pizzafm/NYPizzaStore.java | 16 -- .../factory/pizzafm/NYStyleCheesePizza.java | 12 -- .../factory/pizzafm/NYStyleClamPizza.java | 13 -- .../pizzafm/NYStylePepperoniPizza.java | 17 -- .../factory/pizzafm/NYStyleVeggiePizza.java | 16 -- .../designpatterns/factory/pizzafm/Pizza.java | 50 ----- .../factory/pizzafm/PizzaStore.java | 16 -- .../factory/pizzafm/PizzaTestDrive.java | 33 ---- .../factory/pizzas/CheesePizza.java | 11 -- .../factory/pizzas/ClamPizza.java | 11 -- .../factory/pizzas/PepperoniPizza.java | 12 -- .../designpatterns/factory/pizzas/Pizza.java | 43 ---- .../factory/pizzas/PizzaStore.java | 23 --- .../factory/pizzas/PizzaTestDrive.java | 17 -- .../factory/pizzas/SimplePizzaFactory.java | 19 -- .../factory/pizzas/VeggiePizza.java | 15 -- .../designpatterns/flyweight/Client.java | 22 --- .../designpatterns/flyweight/ConiferTree.java | 8 - .../flyweight/DeciduousTree.java | 13 -- .../designpatterns/flyweight/Tree.java | 11 -- .../designpatterns/flyweight/TreeFactory.java | 18 -- .../AlternatingDinerMenuIterator.java | 28 --- .../iterator/dinermerger/ArrayIterator.java | 24 --- .../dinermerger/ArrayListIterator.java | 26 --- .../iterator/dinermerger/DinerMenu.java | 51 ----- .../dinermerger/DinerMenuIterator.java | 34 ---- .../iterator/dinermerger/Iterator.java | 6 - .../iterator/dinermerger/Menu.java | 5 - .../iterator/dinermerger/MenuItem.java | 38 ---- .../iterator/dinermerger/MenuTestDrive.java | 75 ------- .../dinermerger/PancakeHouseMenu.java | 53 ----- .../dinermerger/PancakeHouseMenuIterator.java | 35 ---- .../iterator/dinermerger/Waitress.java | 72 ------- .../AlternatingDinerMenuIterator.java | 37 ---- .../iterator/dinermergercafe/CafeMenu.java | 34 ---- .../iterator/dinermergercafe/DinerMenu.java | 51 ----- .../dinermergercafe/DinerMenuIterator.java | 40 ---- .../iterator/dinermergercafe/Menu.java | 7 - .../iterator/dinermergercafe/MenuItem.java | 35 ---- .../dinermergercafe/MenuTestDrive.java | 29 --- .../dinermergercafe/PancakeHouseMenu.java | 49 ----- .../iterator/dinermergercafe/Waitress.java | 85 -------- .../AlternatingDinerMenuIterator.java | 30 --- .../iterator/dinermergeri/DinerMenu.java | 51 ----- .../dinermergeri/DinerMenuIterator.java | 40 ---- .../iterator/dinermergeri/Menu.java | 7 - .../iterator/dinermergeri/MenuItem.java | 35 ---- .../iterator/dinermergeri/MenuTestDrive.java | 30 --- .../dinermergeri/PancakeHouseMenu.java | 49 ----- .../iterator/dinermergeri/Waitress.java | 97 --------- .../iterator/implicit/DinerMenu.java | 51 ----- .../iterator/implicit/DinerMenuIterator.java | 40 ---- .../iterator/implicit/Menu.java | 7 - .../iterator/implicit/MenuItem.java | 35 ---- .../iterator/implicit/MenuTestDrive.java | 11 -- .../iterator/implicit/PancakeHouseMenu.java | 49 ----- .../iterator/implicit/Waitress.java | 34 ---- .../iterator/transition/DinerMenu.java | 51 ----- .../transition/DinerMenuIterator.java | 40 ---- .../iterator/transition/Menu.java | 7 - .../iterator/transition/MenuItem.java | 35 ---- .../iterator/transition/MenuTestDrive.java | 15 -- .../iterator/transition/PancakeHouseMenu.java | 49 ----- .../iterator/transition/Waitress.java | 29 --- .../headfirst/designpatterns/iterenum/EI.java | 27 --- .../iterenum/EnumerationIterator.java | 23 --- .../EnumerationIteratorTestDrive.java | 13 -- .../iterenum/IteratorEnumeration.java | 19 -- .../IteratorEnumerationTestDrive.java | 13 -- .../observer/simple/Example.java | 14 -- .../observer/simple/Observer.java | 5 - .../observer/simple/SimpleObserver.java | 20 -- .../observer/simple/SimpleSubject.java | 31 --- .../observer/simple/Subject.java | 7 - .../observer/simpleobservable/Example.java | 12 -- .../simpleobservable/SimpleObserver.java | 30 --- .../simpleobservable/SimpleSubject.java | 19 -- .../observer/swing/SwingObserverExample.java | 55 ------ .../weather/CurrentConditionsDisplay.java | 23 --- .../observer/weather/DisplayElement.java | 5 - .../observer/weather/ForecastDisplay.java | 30 --- .../observer/weather/HeatIndexDisplay.java | 32 --- .../observer/weather/Observer.java | 5 - .../observer/weather/StatisticsDisplay.java | 34 ---- .../observer/weather/Subject.java | 7 - .../observer/weather/WeatherData.java | 52 ----- .../observer/weather/WeatherStation.java | 20 -- .../weather/WeatherStationHeatIndex.java | 16 -- .../CurrentConditionsDisplay.java | 29 --- .../weatherobservable/DisplayElement.java | 5 - .../weatherobservable/ForecastDisplay.java | 33 ---- .../weatherobservable/HeatIndexDisplay.java | 42 ---- .../weatherobservable/StatisticsDisplay.java | 39 ---- .../weatherobservable/WeatherData.java | 35 ---- .../weatherobservable/WeatherStation.java | 18 -- .../WeatherStationHeatIndex.java | 16 -- .../designpatterns/prototype/Client.java | 25 --- .../designpatterns/prototype/Dragon.java | 13 -- .../designpatterns/prototype/Drakon.java | 16 -- .../designpatterns/prototype/Monster.java | 26 --- .../designpatterns/prototype/monsters.html | 50 ----- .../proxy/gumball/GumballMachine.java | 108 ---------- .../proxy/gumball/GumballMachineRemote.java | 9 - .../gumball/GumballMachineTestDrive.java | 25 --- .../proxy/gumball/GumballMonitor.java | 21 -- .../gumball/GumballMonitorTestDrive.java | 36 ---- .../proxy/gumball/HasQuarterState.java | 40 ---- .../proxy/gumball/NoQuarterState.java | 31 --- .../designpatterns/proxy/gumball/README.md | 16 -- .../proxy/gumball/SoldOutState.java | 30 --- .../proxy/gumball/SoldState.java | 36 ---- .../designpatterns/proxy/gumball/State.java | 10 - .../proxy/gumball/WinnerState.java | 42 ---- .../proxy/gumballmonitor/GumballMachine.java | 101 ---------- .../GumballMachineTestDrive.java | 63 ------ .../proxy/gumballmonitor/GumballMonitor.java | 15 -- .../proxy/gumballmonitor/HasQuarterState.java | 41 ---- .../proxy/gumballmonitor/NoQuarterState.java | 31 --- .../proxy/gumballmonitor/SoldOutState.java | 30 --- .../proxy/gumballmonitor/SoldState.java | 40 ---- .../proxy/gumballmonitor/State.java | 11 -- .../proxy/gumballmonitor/WinnerState.java | 46 ----- .../proxy/javaproxy/MatchMakingTestDrive.java | 76 ------- .../javaproxy/NonOwnerInvocationHandler.java | 28 --- .../javaproxy/OwnerInvocationHandler.java | 28 --- .../proxy/javaproxy/Person.java | 15 -- .../proxy/javaproxy/PersonImpl.java | 45 ----- .../proxy/virtualproxy/ImageComponent.java | 26 --- .../proxy/virtualproxy/ImageProxy.java | 67 ------- .../virtualproxy/ImageProxyTestDrive.java | 61 ------ .../singleton/chocolate/ChocolateBoiler.java | 51 ----- .../chocolate/ChocolateController.java | 13 -- .../singleton/classic/Singleton.java | 21 -- .../singleton/classic/SingletonClient.java | 8 - .../singleton/dcl/Singleton.java | 23 --- .../singleton/dcl/SingletonClient.java | 7 - .../singleton/enumS/Singleton.java | 12 -- .../singleton/enumS/SingletonClient.java | 8 - .../singleton/stat/Singleton.java | 16 -- .../singleton/stat/SingletonClient.java | 8 - .../singleton/subclass/CoolerSingleton.java | 12 -- .../singleton/subclass/HotterSingleton.java | 11 -- .../singleton/subclass/Singleton.java | 18 -- .../subclass/SingletonTestDrive.java | 10 - .../singleton/threadsafe/Singleton.java | 21 -- .../singleton/threadsafe/SingletonClient.java | 8 - .../state/gumball/GumballMachine.java | 107 ---------- .../gumball/GumballMachineTestDrive.java | 39 ---- .../state/gumballstate/GumballMachine.java | 92 --------- .../gumballstate/GumballMachineTestDrive.java | 26 --- .../state/gumballstate/HasQuarterState.java | 35 ---- .../state/gumballstate/NoQuarterState.java | 32 --- .../state/gumballstate/SoldOutState.java | 33 ---- .../state/gumballstate/SoldState.java | 40 ---- .../state/gumballstate/State.java | 11 -- .../gumballstatewinner/GumballMachine.java | 97 --------- .../GumballMachineTestDrive.java | 46 ----- .../gumballstatewinner/HasQuarterState.java | 41 ---- .../gumballstatewinner/NoQuarterState.java | 32 --- .../gumballstatewinner/SoldOutState.java | 33 ---- .../state/gumballstatewinner/SoldState.java | 37 ---- .../state/gumballstatewinner/State.java | 11 -- .../state/gumballstatewinner/WinnerState.java | 43 ---- .../designpatterns/strategy/AnimalTest.java | 40 ---- .../designpatterns/strategy/DecoyDuck.java | 11 -- .../designpatterns/strategy/Duck.java | 31 --- .../designpatterns/strategy/FakeQuack.java | 7 - .../designpatterns/strategy/FlyBehavior.java | 5 - .../designpatterns/strategy/FlyNoWay.java | 7 - .../strategy/FlyRocketPowered.java | 7 - .../designpatterns/strategy/FlyWithWings.java | 7 - .../designpatterns/strategy/MallardDuck.java | 15 -- .../strategy/MiniDuckSimulator.java | 23 --- .../strategy/MiniDuckSimulator1.java | 17 -- .../designpatterns/strategy/ModelDuck.java | 12 -- .../designpatterns/strategy/MuteQuack.java | 7 - .../designpatterns/strategy/Quack.java | 7 - .../strategy/QuackBehavior.java | 5 - .../designpatterns/strategy/RedHeadDuck.java | 13 -- .../designpatterns/strategy/RubberDuck.java | 19 -- .../designpatterns/strategy/Squeak.java | 7 - .../strategy/challenge/BasicCameraApp.java | 7 - .../strategy/challenge/CameraPlusApp.java | 7 - .../strategy/challenge/Email.java | 7 - .../strategy/challenge/PhoneCameraApp.java | 19 -- .../strategy/challenge/PhotoWithPhone.java | 29 --- .../strategy/challenge/ShareStrategy.java | 6 - .../strategy/challenge/Social.java | 7 - .../strategy/challenge/Txt.java | 7 - .../templatemethod/applet/AppletSource.txt | 102 ---------- .../templatemethod/applet/MyApplet.java | 34 ---- .../barista/BeverageTestDrive.java | 25 --- .../barista/CaffeineBeverage.java | 23 --- .../barista/CaffeineBeverageWithHook.java | 29 --- .../templatemethod/barista/Coffee.java | 10 - .../barista/CoffeeWithHook.java | 42 ---- .../templatemethod/barista/Tea.java | 10 - .../templatemethod/barista/TeaWithHook.java | 43 ---- .../templatemethod/frame/MyFrame.java | 26 --- .../templatemethod/list/MyListTestDrive.java | 26 --- .../templatemethod/list/MyStringList.java | 35 ---- .../templatemethod/simplebarista/Barista.java | 13 -- .../templatemethod/simplebarista/Coffee.java | 27 --- .../templatemethod/simplebarista/Tea.java | 27 --- .../templatemethod/sort/Duck.java | 27 --- .../sort/DuckSortTestDrive.java | 31 --- Head-First-Design-Patterns-master/test.txt | 1 - Head-First-Design-Patterns-master/testOut.txt | 1 - .../zipInput.zip | Bin 632 -> 0 bytes 571 files changed, 13846 deletions(-) delete mode 100644 Head-First-Design-Patterns-master/README.md delete mode 100644 Head-First-Design-Patterns-master/clap.wav delete mode 100644 Head-First-Design-Patterns-master/heatindex.txt delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Duck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/MallardDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Turkey.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/WildTurkey.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/Drone.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/DroneAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/SuperDrone.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EI.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIteratorTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumeration.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumerationTestDrive.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Client.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/GenericRemote.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/LG.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/RemoteControl.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Sony.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/SpecialRemote.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TV.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TVFactory.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/GingerbreadHouseBuilder.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/House.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseBuilder.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseDirector.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/InteriorWall.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Roof.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/StoneHouseBuilder.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Wall.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Window.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/WoodHouseBuilder.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/MeatPizzaBuilder.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/Pizza.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaBuilder.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaDirector.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/VeggiePizzaBuilder.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Accommodation.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/CityVacationBuilder.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Hotel.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/OutdoorsVacationBuilder.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Reservation.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Tent.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Vacation.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationBuilder.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationDirector.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/Collections.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Cafe.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Iterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Menu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Cafe.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Menu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/PancakeHouseMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BPMObserver.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatBar.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatController.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModel.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModelInterface.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatObserver.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/ControllerInterface.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJView.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpHandler.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpServer.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewServlet.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartController.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModel.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModelInterface.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartTestDrive.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/README.md delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/WEB-INF/web.xml delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/djview.jsp delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/index.html delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DecoyDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckCall.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckSimulator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Goose.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/GooseAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/MallardDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Quackable.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RedheadDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RubberDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/AbstractDuckFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/CountingDuckFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DecoyDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckCall.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckSimulator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Flock.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Goose.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/GooseAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/MallardDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/QuackCounter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Quackable.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RedheadDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RubberDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DecoyDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckCall.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckSimulator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Goose.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/GooseAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/MallardDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/QuackCounter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Quackable.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RedheadDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RubberDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DecoyDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckCall.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckSimulator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/MallardDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/Quackable.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RedheadDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RubberDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/AbstractDuckFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/CountingDuckFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DecoyDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckCall.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckSimulator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Goose.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/GooseAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/MallardDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/QuackCounter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Quackable.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RedheadDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RubberDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/.QuackDecorator.java.swp delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/AbstractDuckFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/CountingDuckFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DecoyDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckCall.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckSimulator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Flock.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Goose.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/GooseAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/MallardDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observable.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observer.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackCounter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackObservable.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackable.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackologist.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RedheadDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RubberDuck.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/BurgerAndFriesOrder.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Cook.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Customer.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Diner.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Order.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Waitress.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Cook.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Customer.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Diner.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Order.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Waitress.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFan.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanHighCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanMediumCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Command.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Hottub.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Light.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/MacroCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/NoCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteControl.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteLoader.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Stereo.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnWithCDCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TV.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFan.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Command.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoor.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorDownCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorUpCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Hottub.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Light.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/NoCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteControl.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteLoader.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Stereo.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOnWithCDCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/TV.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/CeilingFan.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Command.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/GarageDoor.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Hottub.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Light.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteControl.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteLoader.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Stereo.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/TV.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Command.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoor.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoorOpenCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Light.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/RemoteControlTest.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/SimpleRemoteControl.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Command.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/GarageDoor.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Light.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/RemoteControlTest.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/SimpleRemoteControl.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/swing/SwingCommandExample.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFan.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanHighCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanLowCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanMediumCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Command.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Light.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOffCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOnCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/NoCommand.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteControlWithUndo.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteLoader.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Menu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuComponent.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuItem.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Waitress.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/CompositeIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Menu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuComponent.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuItem.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/NullIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Waitress.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/InputTest.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/LowerCaseInputStream.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Cheese.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Olives.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Pizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/PizzaStore.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThickcrustPizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThincrustPizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ToppingDecorator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Beverage.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/CondimentDecorator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/DarkRoast.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Decaf.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Espresso.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/HouseBlend.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Milk.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Mocha.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Soy.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/StarbuzzCoffee.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Whip.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Beverage.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/CondimentDecorator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/DarkRoast.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Decaf.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Espresso.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/HouseBlend.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Milk.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Mocha.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Soy.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/StarbuzzCoffee.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Whip.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Duck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/MallardDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Turkey.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyAdapter.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/WildTurkey.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Amplifier.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/CdPlayer.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterFacade.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/PopcornPopper.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Projector.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Screen.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/StreamingPlayer.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/TheaterLights.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Tuner.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Calendar.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/CalendarTestDrive.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/PacificCalendar.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Zone.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneCentral.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneEastern.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneFactory.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneMountain.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZonePacific.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/BlackOlives.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Cheese.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/CheesePizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaIngredientFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaStore.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ClamPizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Clams.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Dough.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Eggplant.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FreshClams.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FrozenClams.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Garlic.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MarinaraSauce.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MozzarellaCheese.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Mushroom.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaIngredientFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaStore.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Onion.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ParmesanCheese.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pepperoni.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PepperoniPizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaIngredientFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaStore.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PlumTomatoSauce.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/RedPepper.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ReggianoCheese.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Sauce.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/SlicedPepperoni.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Spinach.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThickCrustDough.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThinCrustDough.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/VeggiePizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Veggies.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoPizzaStore.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleCheesePizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleClamPizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStylePepperoniPizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleVeggiePizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/DependentPizzaStore.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYPizzaStore.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleCheesePizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleClamPizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStylePepperoniPizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleVeggiePizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/Pizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaStore.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/CheesePizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/ClamPizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PepperoniPizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/Pizza.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaStore.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/SimplePizzaFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/VeggiePizza.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Client.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/ConiferTree.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/DeciduousTree.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Tree.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/TreeFactory.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/AlternatingDinerMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayListIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Iterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Menu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuItem.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Waitress.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/AlternatingDinerMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/CafeMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Menu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuItem.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/PancakeHouseMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Waitress.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/AlternatingDinerMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Menu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuItem.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/PancakeHouseMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Waitress.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Menu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuItem.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/PancakeHouseMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Waitress.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenuIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Menu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuItem.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/PancakeHouseMenu.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Waitress.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EI.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIterator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIteratorTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumeration.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumerationTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Example.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Observer.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleObserver.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleSubject.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Subject.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/Example.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleObserver.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleSubject.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/swing/SwingObserverExample.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/CurrentConditionsDisplay.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/DisplayElement.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/ForecastDisplay.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/HeatIndexDisplay.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Observer.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/StatisticsDisplay.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Subject.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherData.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStation.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStationHeatIndex.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/CurrentConditionsDisplay.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/DisplayElement.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/ForecastDisplay.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/HeatIndexDisplay.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/StatisticsDisplay.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherData.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStation.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStationHeatIndex.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Client.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Dragon.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Drakon.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Monster.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/monsters.html delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachine.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineRemote.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitor.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitorTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/HasQuarterState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/NoQuarterState.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/README.md delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldOutState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/State.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/WinnerState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachine.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachineTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMonitor.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/HasQuarterState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/NoQuarterState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldOutState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/State.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/WinnerState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/MatchMakingTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/NonOwnerInvocationHandler.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/OwnerInvocationHandler.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/Person.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/PersonImpl.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageComponent.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxy.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxyTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateBoiler.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateController.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/Singleton.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/SingletonClient.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/Singleton.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/SingletonClient.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/Singleton.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/SingletonClient.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/Singleton.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/SingletonClient.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/CoolerSingleton.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/HotterSingleton.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/Singleton.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/SingletonTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/Singleton.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/SingletonClient.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachine.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachineTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachine.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachineTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/HasQuarterState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/NoQuarterState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldOutState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/State.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachine.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachineTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/HasQuarterState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/NoQuarterState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldOutState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldState.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/State.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/WinnerState.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/AnimalTest.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/DecoyDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Duck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FakeQuack.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyBehavior.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyNoWay.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyRocketPowered.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyWithWings.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MallardDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator1.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/ModelDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MuteQuack.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Quack.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/QuackBehavior.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RedHeadDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RubberDuck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Squeak.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/BasicCameraApp.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/CameraPlusApp.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Email.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhoneCameraApp.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhotoWithPhone.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/ShareStrategy.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Social.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Txt.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/AppletSource.txt delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/MyApplet.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/BeverageTestDrive.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverage.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverageWithHook.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Coffee.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CoffeeWithHook.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Tea.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/TeaWithHook.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/frame/MyFrame.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyListTestDrive.java delete mode 100644 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyStringList.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Barista.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Coffee.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Tea.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/Duck.java delete mode 100755 Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/DuckSortTestDrive.java delete mode 100644 Head-First-Design-Patterns-master/test.txt delete mode 100644 Head-First-Design-Patterns-master/testOut.txt delete mode 100644 Head-First-Design-Patterns-master/zipInput.zip diff --git a/Head-First-Design-Patterns-master/README.md b/Head-First-Design-Patterns-master/README.md deleted file mode 100644 index 9705f12..0000000 --- a/Head-First-Design-Patterns-master/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Head First Design Patterns (2020 2nd Edition) - -I have recently updated all the code for Head First Design Patterns for the 2nd edition of the book, released in December, 2020. - -Download the code and compile and run from the command line, or load the code into project in Eclipse using Java 8 or higher. - -Other links for the book are available on the book page at wickedlysmart.com. - diff --git a/Head-First-Design-Patterns-master/clap.wav b/Head-First-Design-Patterns-master/clap.wav deleted file mode 100644 index 7789be5005fd4eac11c7a7985288320c18334c93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37462 zcmeFZcT^P1*EZTS(>>&zW(H6}Kolbq1SH2n(wMWyoO9M=BnQb!P*B8xqGCkMikKrh zL(WVlhapXO-;L+>zUTecx9+#@pLgBgJZo21S9Mo)*K}9!dTQ^Q%l7dJN=A@H?hCy) zY~MFd6G0FPLPfj^5k&J26+sbAWZmk0tKTGzrc;nrcjn*K%CXKhNf}Cc6HAS|5HUI8 zSlH^&&tX=f)JR#_l^FM^%)zUJbjb_}y>5QpksrN3yxujw3wo~cV*A6u;sdu27i}&$ zc3mxh^5yxt2QOG=JDuB_u_aSEwJjA*DoXN*e-U2><%UM@j!unqiFAyJ3tt|-GmIAg zBh)bbdg!I_;n0+bk}!T`U3fzD!pOwfsnM-xmd1WeG>QL}qMAgcGgDo&+%xjdM`f8` z>^lEC|G>rl*T!A;FKoKzRP?^k_5Q1(Wshp^$3MkNe!UEQHl^(9tAr0~Z}Bh3KOQf~ zzYg-EfBs!#P)TdNRvX@G*Q6r;$Uo5@BI)Y>(J^1f?kya?JJ3z2$W3W;5nF{*sDsLR zMH7uI)jsW$npgGxbnRIK2G@*F8xrH%$4oP`Gj*7-%-nL)ddtDd0aoXxsZJeheRKM0 z8;hAQ?T*>j%(`P=;aKKybM`%_l`bcpyIm)^u5-WZcF)7mL+H82bI2>!OX{8BUFLJj z=cw;IUzQ*0m*aQVkHXeq2eJ3CPqQDf^Vod$1vbu3VUMskvK!f!?7Qrre!JMa{0!Lr zzBl~V`%dxu>}?S z@)@BI1q>Swt{ie4*gv>RmNF38e_!^fue!gpSE+w;uUp@ao?m0( z=8Ea!!{P@bWAPTz2a&1hsHk2zLv%qX7Oodw7g`H<2q{8)VTAw_-W2cz@q!}3c0r7Q zBiJNx6!;4!2&@H$f^h;(fto-;fC%Vb@U;c~d}D!(KS@9pI0#e)L2%@H z!F0h%frlVRuw3v`a7fTBNEavw9|@)jYXnP#h%iEECA=?OAmj^A3k^kgg#jYIFj~YA zy%GhAhDG5b2k}eMVX<8FSnMDk79SG3N}h$xzqGQ=y=_AKnYIJ%wQXhXliKw=_}Koi!?;7Cb6dxf&SxFBI<-29&NZF$ zx{5n5cPVuZcP;M<>b~2R*G=n|buaB^_Y`*L^iX^HdKUC}^%nGG_2NApy&U)#@_WMmF@z>jN(2x%5lPsRFNtmBFmZ{r zA*;yEq&kvIx*@;FJ%|!=32{QW$PNUhoKDrxyghryD&~s=VdJFA9U!w&23suMX=vYjK zPR20I0n^32F;i?VHVs>W&BiujzSwSTK6VK9PGK9cXlxgj0DGy}aV#5)z;dt{>=KrQ zUBS|^0_-ey13QluV!7B&>>_px%Y$t`?B_#z9^~i2aTg#w4@YEUSy(2P1|=mzi7|js zEF3$Eoxt`%`P-n@wb*8CDYhEpV2j}@f-q;y2eZbUFiQvxu?d(4gfs|cC=C;%185B@ zM!%x9=yM2*(3fZ)dIwF0@HB*b&`@*@x)>25KRpg(uQe2 zp#@*jxX_-Zv~v(fLb#6>Mf(fF0NQGrJ%rmOA9O`=NY-%ud0@abKMK!0&DH>EEWtdV<;ZvSdzEcV)k145?E0mLzB+6FG zG0I}fCW;qjK4k{QoiYZV1yu@*GK45nL`XlvLt2nBq#SvGyhJV|MMyew0f|78kVD96 zWDBwvS%GXoLXahh7ZQj#AnwRi#11h-tPn%Q1kpj5hzfj*QF!ifl8OwFBV;$(Pqvd? zq?l|Y`J{+!fv}NmChH-rg|LRK1F0pee@hL-M^XD5b&yvNXaF<;ngK1pOW>0NfCwN4 zNC0hsc0ecD0n!Qec9A_0_CnZ8_WedbT#F1a@Lw1t2g#xT!Z7&{M&O!9A^$CM*!}~Y z{BIECzd`J5=+lMc6oMvKm+KCX8@3#@A9R(?m;KeZv+qbxM$fsf zhh6VF_#ItsdhKJSZ0Qnls5n9RM);9W6DYT`Tjw<=HRm?gHwx=#Hn`Nq)uq-5Yr3j} zs^?bTsl3NyRE*ILhrb>Cf`6fXKJz*Jqv0o`4+S6YzVm%Q z=dI|in=Xf5NzZ?D`NJhq{!pG_{*1i2mo{8X%DZ;q z%SCan#>Hv5b1&@9NzZ+DzA=Y>ep1fza|h2~&3=Cl&oVf-Bx`&2t+QoWDrXs4+cOWG z{hIMJb4JGW%+&O>40&2_`i8Vs>E)@<(_B+6(+X1(QpcqXrz9tDOi@neB_B`nN$yW9 zNjjKlnj}j&pSUYQBe6R^I^keEEkSKvTgJ)FF95|B}CyO(U+Z}f&wkOsx_F(LX zn4y@zVvff2MJvRFMMp=EiB^xk7j-UbVbr83S>)5mbCL5Ry&`)fdLxn}u1Cy@SQEhy zH;+gR7lnI;-wwyaj)cDq3l2XOHa|n`ZnxsXi?bZ(A==F(6q1}p>bgg zL!-ldL!-i6AZ{C)9%d7IJVC(-xgtYe(d+>ha%@rykiUmt6ja6ImLg8rGciI2`G zB`u9FPQv5YBwtL>PGKj$Na;)5nR+qFGR;4^Hcg(KmVPrOFypUOdZvEb`^=ANr_P3^ zdt|v}C}-mtU$aXxQ_meeyZHR{q#o=aMcgKfmtcgdCf^p&a!~?{kHh z&R=+yzvE)|WzW1rSH@gge0Ai~tZNPVh6S%K)30B=BEEk7YWa=z*IpIQFDSg}a{b&b zs~hpR4GT{fDcwALXYl6syPdbz+-tqP?tVkj$_G_*FIms-znb{G?Dgyy)ukaXyWeblg}y!TdhENz zQtS6cZvsEOFWdOBQmj8>Y@6~8k5G-TK}ewx}(je4VPMi z8o#!lXd33SlY}u()umMM;?4Nj9g49&+^4<98GM{>y$`75LmZ=@)Z z7|j|nK^IZnuw&F!^b52D3NO%f#YU`92~&8bJXWzr#ZjqKb+Ixcy;F?uhn@*udR{GFyS!|?%e*4Ijl92l z@AB65dEvdxN6{zOhvU=aljSqUx6Ws|uZeH6?;77XzUO_1ean5V{FMEc_<8t+`R($% z<#*AK>-W`f*stG@$u?x$v)$Pt?6vIeFp3U^QS@2%Gj<{S7yBt&!hX*t*_CW9|2np@ zzkof_U(B}l7qT5e-2GeFp8m}swQLW69&F#TXZaViXZT-bkM~buGyG4n75ulb`(b>} zXIryBvl;9MY`I?+yTETA$n&!MCl8MMK@XXmnMaP>H+N6BBkoey z@$QMPAKh$Rce#CY(Q(`5^2k-gWwGmZ=K&XQ=S-KT+4e3+Xa988oxQ{PrjwGhhttK` zTu0~GTOEHo;SQUf5*-ky@eUb|_hwCWbe;9s;k$j1!)p7+SyHFnfnlNgg5CuUkL zpQvY5Z<#)6k)`&epA(WNE|{P-@rOmcWuS$c+h}SsuGu7e>`D`ZvDM=e$1EJDI_B5dDC1ywyFQOO zZR9%!H+*Y+)X>d%koDAPAIsUOmwC@{AJfLLgK?L&oiU9iH7I0mFqp&?>K8CJ>02;_ zdie(H^(+j8y7~H>b;s-Tb@KH#>zL_@wJ+&z*0#{?(8|}@p=F`dsd+_vpQeSjOruci zfW{OpQvHr*n7W;&l6r|of||32zS=AGbE@9zW~yJ+Zm7&tvsS5AeWJWt)k|5V@>OY< z$`YkvhLgw-CDc38F~OB7)@i@y-zro;=bew;4&4R}4>;A07TWGG=(!$g3fpk@Z9Oht-D` z4&NOd9$GwjVTd;9JybX#8C*D!K1dmG94wTz3@no+4k*ZG4Ls~`m96bhlxg+PmX-F2 z`}g-{^jq|K_t*9g^d+|ki(Kpg!kAVM)mX=DEN;4#rrCTLbsk`K-geAEu=@lQ9d=hgc`C?1S2{BEwLR=}f6&H#1 z#Bt&t(FXBPk(>CQXpA^fG$`65;)xcB9*As386uYGfQS$-5;X`NMDK(~qCz1lOcgc@ z{}z@B*9r@Tb6{_l@UYNSxJIZhWDAD`)U(W9a zwDF~U3BMK4$Zz6T^BeeFkaCc3{CfTuNd3%j=6{0xkH5DMqe8o?964#5Y(F+q(WRv;B*2ynp_fvT_s?)<%A2C!+KLZM&*w8loE3bd86 zFi|*Fm@jk}mI&tyzX>-B1&}%@JR{T=T@jjzo(Nq;-=UQS!kr>q7%tKh<%%YYibWox zZ=%H_G5jMmag4}FoF{S=KNZat^F%wuU7|R#lK854g7}r#MO-glCLR$V6f-2rVjIaV z@jS_A@h*u-9510s3MD3zFTkHkBr7D!(!V8^(kzL$^nqlfv{Di-?UP)Q>Pp{9XG(?A z5UE1jUg^ZPWa*r?2huI@gvA5DcDqf#?OU5oTW{NIryc9q+&-xzwtY^=&GwxgXXLb&BF77nyI^OBpb+L18*W1p>E(yFL8eQdG)?I^LOS_D^k9E0q z=XI^?e$y4xE$zD9t=0Xj+pc@Kdr7x(&+%^0p8W2OJs-N`dpf)C_2~3e_Sp9f_pIz0 z*L%9hxA$t#w%#v2iM@S2#l4K)+TPi{NZ*=X^S;Pl|Gpc&JNth0CilsDANCpb)%Lme zq5T{BCiKVj1@_@cgV{7Q)EN^4`oKO zYMHwXmu-}dABd9q4BV7$8u%fL8|ahW8DI`@2b>0E1Ah%L2SW#(2d@mQ8T>R5KG-pE zc~Eok{ou^Ow!sC1YD0$yrwyGS@;JhFgZ`52GUohs{UQhdoD%hu4i%4u_8n4(E?BMqZCNj5Lod z9ihpOjF`yJj=0GmkF1hcj+~GWjGU7j$e+mVR*5=Mum09Yi{ ziHYPr!khd;tRlt4VG<>i$+6@O(t#`^=K`a%6_}R@QWJQ}3CJVT75PCfMkM4;ga%xb zAp%S#@(`JWd_~qGt;kVi2uVh?C?&GFPS;5Mr${?rc2N-CAQgQ`zGMYW`+0$X+!__D{;HNbW5qgGQR zsBP3NDnY$L)ucVAj-`F0PNy|c-Dy2k4vk7%L(`@0rkT-B(rjsoG%s2XZ2|2TZ9VN7 zZ9nZZEtFP8OQs2F7is;pA{q^SLDND%)5f4RG%Hj>n}rV0d{7LXhiaiK(Q)WzbTYah zorRu6z0o*e2s0q{61oMw38^LMDYO(lgML9X(F#ay0^YO@Qv1+XC<#2HB36NFVvQ&Z zlc1(pA8LgWs5Pd5IRY=~i7~J_*f?NMCjyUY4NRs3wh42`c4BPoAQpoC4ZLP3whEZf z4ZwkJ0|s?3u%d^7Aw2;+X*h7Eao8O!8GC?bU?tc&>^X3%uOa6h6=UklT*cV4YY!)&;peSToj#wPO940Fz-tYygfL z#3UeXAnn*N)`1QEmM&}r&KSbFK}NS-kpGYLLusSZ3&-`qIo%*#aDF?K(+1^9pj;7@ z&xd+ipuPsEw-)NJ0aRdB*e|%Q?+|{0JNO9UTL@pnoxQ-`V2|Nm9$-)5-X8&n`~Z04 zBJ47-$QQ6{z!~QOXPg6!a~8BtDlpIq*l8>l+A^v_Ek?89Nl8X8qtWPjc!pBZ186L|16b#E=wV>p zcLUqJ5%q&-$_1T|+M)iy$h)H^@VqgBg;qz+P!u&pN8kzVrqO|imeXo!J+vRdMZc%j z!}I);c9-^nc8&I&cAj>hmO?84MmmS~H!YR6hZarSNIOnj4l@B9+9sM0Z3WGVHkUS? z=1Vh&7!zXZGz%Jy#-a@ZU)@fn(VD1(R35b*-mxa?3o4g-pZbA%jryE=j(QLH>nqf7 zYBu!n99;Lq!S^XXL(tAtnu%nI=! z#)H_XaQ}z!V4wGY=lwaR0*)U=)qkNH${EEUc7BwbAH^Sjz7hERe{=M$a80A&14g-e zP#1sm_5bGVVVV-|XH@>-?%UzMMls6Ycm0;G-#k7{djfiXqxUzP|A*24H?RK>xBox+ z{Q>yS{DYx?as8v5{~x~p&vpb-{&4?)wtu+)e{cVL7T|xz{yih`@A&_Aa^PQy2ttzo zN0RtI2mGf6{?h{gpKXD0(9`RY`s6|UZ(K4mFtTxY|FC4Re{kKvfq~Zkq5ds>$NHo_ z^xoawvE6v5cGroHybiQ|N_)KYo|GwZms}TdMYDw)gzxzy{H3iatsTu1TB4iYG?_In zZ!D=t8bazW)pgW3*2Y!WRZp#otm0NosXWR1#k1m`;{N(M?boStNxA)xydQ(#)_%YH z)#Tf*FXAtbpC5mwe~SE6{bBjXTkmZ?guYXGzu|4?+u*X=GP^e)-%KohRcikF#cShN zuU?tGeEHJ+#itjR&#Rx$dM180_bKh!_9x??hClXva=B#7W8S0q67{2et7xET$L%FW-)=p*J@b~? z?aZ68w`ezIH}@2-yV-oBs&MWNPT{-j?{9cr_q*|=pzOLsf&2AG*WMPmUGps{z54x{ z=hem6zFuj$y6no%t1XvDuI#^j=8D2)%PZ&di!V>l558Omb4h<)3eE4&8=Ie;_w3Tl zyp@-D7m-VcFJ8=JUG&a-exd8)Ul-CZs$OutSez@quqHR-f?BTUg~vHPxtnwHav3?n zxn<|coc-tT6-pgpt zJeqMS(=%gJrbfoJ%&K%*Mo#*(jCJX!GNz<^WXRH#GG3;APY+K^O`n^#ES-^NoZgVy zl6EPzAZ>H%rnKp)lhgWB`cfaK+)F)?vNP2yWkxDJr6=Wm@~xDZvCUHr;~ z@Ob?Mc6@ofLVQg8t23^@=fd32+&M!zv+2x>IFmES<7(nu{XJi09UWb~nE-)P%tEV?J^OVsVC^r)>-%cCr# z#z%=F+ae1hOCq;NhDO>(hC~iVm`1*g=#Pkw_!zMuA}3;e#Qun`@VODs!mT2b!WAP{ zg|~*=gqMb^h3AEf!Xm<7g>4Bx7Zw!$ci61(m0_mgo?$BCk=g@oM zEulZcM?!nT^}}=`?7|!(=7z0~*ah=($zeqicf#r;cwvf>!(r1SO~Y44&J9n9JP`gW zGB#y)}}Iz7gpfBZ&-)F^hT^ zvpPyK_CnPB*oLUw*zwU#v74f&#uY{%jgv)xiSvjtKa&x2`b=j`^BLb*&-nbr&{8(xW6ImA zk6!O$KlQ$I`kep1?epRfxnER2hJ1bUk@juhr;=|IKkxot_u2AC@|U_FzF(8dDc?MQ zKKnNGbI13hUlu<$bDMvR;boTp;&FZ^R%rcVSHAs4sXD=ZS~Z)uzj}x_x#mHIux5AV z<=Sagf7P{Bjjg|4T~)unCZ)loHmI?#R<-F|-RGti^%2d64el)!4R}jt?Ka3E=!_SB(BZtYuavQ`R??C$TE0p`h8tQ&> z9L)x)q;(+)Xc2{tZKtC2iL|G5K5d6WE^4K?1Z!2)qn}m!Ne@zvSD>nRD?U^q6nCjU zR5DZBqx?(FLM2+gPGz=6s%o2tpV|dYTrEheSe>H1RpXAfk>+ZhZ<<=Vp<2&%?X@?< zjETPfS)JElSG&hxK-Y+IMX!`GUw;RaV!&kGF?h*Z#n@n|%v3hI&%9%_lC{*BZb%s4 zG(0zEv60(Y(nv7&l5yxbpE2W1Bx7EiB#vEgYBP>BtsHl5{2>#2GlproS+VJM^M&IT zE&9jjTAVSnnP6r9X~IYIHI{2FWR}Ag(G!y=jGZ*uvS`w4OINF<6Te$^PW)@~=}BFa z^{h@#xoV|6)nRh_)DM%#Pg^$S<}~pXyXgm}KATRN<}o8?+S?fh)8|-Uoc`H*(u|;) zcV_&UX>UE(=Bf2(8;_YGwr^*Cv-PqGuzPRw&d$%)&A!a`k-eAQ^jWX%uFP_=H+Cqo zPjRrGMR&YD>!72lgV-_KVTqHP<0q$6jJLb>c;H2fubvo+oJ-gMpcy_Rhg>#8Z zinEa`;e5h%ql>`xyNjQjookWXMOSrq)NQBxCbuu{U)?5n%ybX;NOf=Y=y9LrIoBh_ z^R|c7Q`ytQYn^AN*9*@MFMTg}@4a5B-k-eq-o`M~xZ6A2=cD&eA48w9zMFlv_&)Qw z=d0$6`!4lm`(5=-@ayyC`MLP9*b#m!*kAl|*t+Zn_HwqV|3&t4m^nS~Z{c6>zsa9D z=ej>*2twY55Fr&I zx*Tc9B+f{P69?l2aI`rqIpaAyI98ma9BWQ2XErC3++#RSK{2`DZlo$9i=ulu*P+;J`Ad|p=puvFgL7xK#11|=A z3)~x!ALt%%C{QOLIIwk&dEosyJprfYya@=LlM%q0vmv0}-#XxdKN@h#|LdGU|ExLs z{+s61vTf#EWmD#CXMgaY$xibh@mu9z>NmkZ+OLxx;#bVp_B+P@;p@Rp_Elgn^!?&z z08dZ3563UfN84|{57$@IC&Txf_hR38Z-y`1o9Cn8o$6ES#ql}rrQu`m^~t-#GsgRx zr;qn)PsE$)`Pl25$3Cw}k7-^m@C5g{U-B$)U+THSUDH$D{jJ9vx8oj1+-y9ix=G#Z zU31;zU4z|SU1{!}F2!yaT(-E)cNyb`y8Ljx>m2I3)_Inzs&lK$v)LIgTW5Q@=+EwS zE_KRt-su$N%yJr@UFLXo_AbYTvke`w+3y@~I_+^-ugWV47D|# zImz~e^$(k!*86N!taWYf%yhP42Nz5sklO9dBpR{0d z)x;jF0}~Uh^d?$cJ+S;aX`bcoN$nFfC!LvaYvSYy0TbU@h%MJyL|W1;%q?@wUrm^0 zzG}iRGs0rGS+<3mnZ3o0@xRRd$L}%co2r|iFuh@BXzFKHV$wW*p~;Ey-Q!r}#>)OzK?M?+BT-nkUr+9 z;YDM8LucbVtQw;r)2LUyAz&?Kgn|c!F)PKOm^s~G5%ZmX56r2@ zGBEuKjPrVL3>@@U8C2-X^!Mqe>TBrE)GyHauIH_@MNgous28ezMb|{zL-)B>z0Ojt z!#YEn`Z^h!ceQ6~25OgUNVRrr#A>N%OwuY;FV$qLuhtZ*ks1+d=QPHvIcU66tx#XB zx?i2Ds;hoM<-VGW%6zpt)w0DD1w zjIN_DK^3XPv;s;VEr{Yn>q8{eY~&2p4Vgx5CCe!> zQP=UF3tdxs=65x8D|97wKkM}BKF~SbWz|{O)!4D7>ud+JYhK6KPKAzBov+&+I*+us zb*#D-+Ht*2vtv!$$9AK((Dn+cV|%i+t1U=c(55C`(^e)iYC9$QC3Ta;OL6fW z=_4^FJt%%Du@fJY^otxM_e6c-y`l$VJJBw&OgKgSK-exiEW9Oh5pEX|0xQvTfmC=} zP$={fY!xaBCJMjvC4zMREx}U$9)StWNDEsB_%~Z0^Y^tL<2$u_@R3$!{>PTjt;sDZ zt;<@Lw3@e!0bYRLQrvvKCA4{8OGvYGi(xa`B5eBHe7`BZIkahYGpEU_c}$b6Nzz!_ z^sq6hDXeit)BMH>O%{!PjROrY8{ao1G-fs|Z`|B4snMxnxIw+)TSIGocEf}EO%37o zjtwj8)f=qq8|vxxck1ivPSroGn^zxOH?e+I-Ef^<-IqFzx{Gz9+5>ejYlG_2YA4j~ zs+HFU)|S_r*Iut3t~ps-S+lhEL5+27LXC3mmKuHyyXI-lgqpM(TFvg7hU%c2XVq3U zxz)6q6V*-CE302ryH;makEuRXO;#RlzJs;H7*nOga=@<8Q{$`zG~m3|PLQMt5IztXu9shm(LsZgu@ zRnc4VvZA`;T19C^a>ezE6BQ{HTPyyqSXi;4!nI;<#WV=VR#;W2SLjxZ@J4tNo|sp~ zr(&GYBY=gs2z@T_=_ysuTnV?B+srNGR&y_Me{hqy@3}GD7u?g_67FH{eeQ1VE$({m zRqjge1@1!bIc^a5JlBt#!FA^*a-FydTsx4N+(_KaB+)yqH(wHCy z5Z40+NS7N863^9vb9JC5U2Ynrr^7ab%Ybr?xcMLjaBdNI4EF)o46b1^_c_;^TgIKi z{RVYaLY?(oH!dHpp`9DdmBBTU+!b6!-de6cZyVQ$x0h?dJIb};g>&6_iQGV5CU+q( zhr5P%jk}ju%ss>_U+$+2m?jv3ow+yBo%6W>sCY~OzmuJbNR@m}1D%^M` z6~Vlj6@T$ODt7P|RvhPTtT@9vQjx<;thmj~t$5A5Tk(_kzM`4eP$A>>!oP!7vMLNJ z;lontUg24}xMFGLmWrK~$1B1rQ!275uT|Wud|vSp{_W;UQN>`Tyh5W&r*cx&aA7h zt3#_ER_9gytbShATU}M9RWn#Mxkjhjzh-LnmYO-$F*RGNFV}=tzlNu{rRI4xT3c6b zQae)ZS!-Ccy4JDgRPExL{M!9BrM2lb&9x;p)Vk^#v$~-guR2EU#yZE^n7XC4g>{E( zKhu3#M>LxYx*9A8)>i0D` z)n_)Wt}kggU0>gDxgKr&SZ~$XRX?wh(QvTQxgoo8HN4#s4Z_C42DPU02D_%=hE+{t z8zY*$8*ex5YUDPhH{wmt8pk&`H~N7o*1qPcP3M}IG?hWG(b0UPNxy~L>lOivpC<6(zYy%=w+YVi8Nh6M3w!x{geHP)VUVCqcvR3M zydp3al?&#JsKOJXsluD0Wx_g9lu%K8UuY|C7OoL%iW0>xqNn1mBB?k{q%V0R@{;t4 z_DjZ#^Cfe|<&tA!iu8tfy0lijLaHK(liEujOE*bGVDrLgdoP*O)-5^GW+J`XHdp$q z?UWR4za_P8Z<20o*KEsZcW!&rzN@Xf{d}8g$CtMG9YkA1$JF+cjy3J#j)Zo-&S&i& zo$c-WJB>T8bOv_tz!MMay4_*Z)zY!9OSdz%%e(V!*MZKVuB)9^-4&gyy6Ihs-F971 zyEk>UcV~4O^?dG{(=*cbcaK%~t)7+LEjyZ0*zQ&FJ&({m^#=CcbX;T7%WuU;V0m@%=7+&-(ZDb@k`>S;#8-7Rl)S5iWQzMSU zcSg1jH;v>DYsg^LYJcsbW3bCeLfaXKaD-57hz(0EvBKMOm|SQrLR+1MUPjAp+8o5L>DTw(6trS z6`T~E6jm#)QHWMNqi|R8i9(&CNI^wOL(x{rMRB>(CdJcA@rs2?#fn@dz9ONdp=6;v zONpbrR_U;EtWvJ>L#4OMjY?h0bY)$Y8OpO&mMU*h2~|F$a$C7r<)?C;%8)We)l|ho zb&g7q>MoT%s%KTss=ih!Rh6g+Rn=5g)ofK~sI5|6q!y|Ax7tnBOKLw=KdKF?cB>hy z>8Sgv*{E+-Tc94Vc1Zo6+IjUVwHNAgwPtlwb-ISX`Xr6*>OmUG>N_R@z)`wsybv zMr}Qv2<_=Q*R+Fl-f3^wY1NL_q3Y!6nCiUJanWheS)ntcb415LH%-S*_nuCW?suK_ zx*a+vbX9b7buDxs>3Zq@&|Rb3p?h3cRWCz#oZeksd%Z8Z3-m;~+w@SqP(5S496dX| z$9f#S?|M7*M0$~Wgx&=`UHzweGxWK7UiuQfCHhqTz52%bar(CU+4=$cMfz*>Kj^7KY5N_aQaMoan!A*mm1}_c540r~a z213{yFnDdC#NZi>We5!>Gvo%&3{A#7hACqMVUe=4)m-^Bc38S;?$tHZg_FcIE(cn2E5cEILaS zV8GI0nXn95Q&{6!)~rb^2iA0!C(D+_X3b`CSl+CqtN_+(kd3S$)>hVB)^659)*(na z$y(0}V{KqXvbM0|SUXtBtevb>kaX4_)_K-`)p21o(abREhqWUYmBR>1j7K^C)eq3&#!KPwHcDW2sH zbvi=bGg!x26Ip+=#zAc?s97JbMj6f|nM+xN%(<*Sraw!-^k7vp9avwP(^xN=rmSM7 z0qZtXgO$&uvoe??%s6H@^Ek7axs%Cdu4R5@&SO4fdNB*3t#g)=}4; zuOrr(r1M$_(>bTppnX8+k#?|7qPDrt2JInjPwk)DEbW`xQmt_9H(JZJ&uUH4-mXQ} zcGIfSGSa%G)vI|*t4wpgR)(gf)@DrtdVq3GEzNw*MveWN_cZ)8BQy*(7i+X>SZX}c z7*Ic>@m76>M!NcBjVbrto|o@cB2RW*C{18SJMx7sf?ZM92k^{RW-Zm7Dd z9Z^+OW2^F1^;EB^HmmGcy{qD)dRj#pdb~;%hDyGQSb3+)EoDcQnLX_ zw<>K=E>f~lKB`1f4p926WTcd?Bv4$VbW?Gv(qY8`MYiG_MLop?#d?LsiUkU0iU$;W z6g(B4D`+Z2C^XXNDcq(TD;%dw=z;WSbYprLU5at&kFas{NU&&|hdsl_gWZ=5U4*?w zEwNNo2KH8EU{#fds(`0&EzK6aMN>de(|ELbU;{V-Yy#!f`LuGX1?@6b4mM8Z;G=tu zI+=PL?3m_J>nT>$VhWv_OsS`Aqud9(q&Uh1%4Q0k!lpDMW|S8QiR2-*U|aMU?1{1v zALMVu0$B;RK`uxKX^Q+L6_5vDGjopoN`{hmz?w3HoKK!6UC3>uCAomqAzev?G$%U< zZL*G_l3$4qqJ(H5t`pygi^MY`l_(^_h#X=+kxXnMB8XMQ-^6@kJ28j&3#>So6SIj0 zgbnOXC0q$B!j3Q}W)S0uDTE>H=@OGcEC@Yf40xa$5?X}uZ_$AGsHhW0Afstx2z_EK z!6Hlv6T*zJgi329Zvj2V4aU)SGZmcLBx3BjOc!#(yN<6W@tX z#1B9nSf;iTjRc<%5U_**(Mfa@{lozH&W}LrprjJ1NNSNPqydCXn5Q=;4M|h5S2csy zoJ3lYGsx+rJ-~%@BHaKUq!-C1eL?)mAizRs{l$P4-?WjHRAB?UaGK$eJ-anSdqhG*L`3L`4D37i>GAg5A$x-_{YMz z*8No_f@(depXhbS;$8 zHBm-aMj5re9<{-40IC1|B_I8w*TI+l&-yAgzwNh2?YT$4`J?vT|JZ`_$X{Rq{u9EV zfO5bOz<0nmz*oQ*z-PcGz(>G)@&ow}!nY8XLHGv3Qow7#tKZtkOVC4Jkk24|3U~r2 zAs>TwQbHC3Mzxju5Z(ja`K`s=A#Ve2f@V_)xDK8|1%Rud?_7Z}AGDuK5MBg5=mH=I zG^6u?Y|xKJHKj~II_SWuWEyBtDWFFslL??todL}%4iE!~`mJe2g5DJl`d29EVW-Fw zfMbB80I(qe?QB#_+fVKV>;~)vYzJ%wYzAxutOKk8`~_GESPobMSOi!Amh&g5*+Bpu0F06Wr_oJm^$)-k7&Q^?7nZ%zcg(*pE& zGjcp>LXIQHfJSNrIw_N6fR3t1>Vk%^MQW1jq#CJ8Due#2K+;JJG+8Q1fme$lQW3vQgC3G<0&Km(u_PzB%tegeJ&z5qS~-T~eKUICs19urS~ zYuNXR2gDuFwr>%)i5sAKUn2@Y2fqTNi%T%BxIkosR-Q>@5ow^KC&PFn9`yBC2&0G? zA{5u=`?Ds>s8^$9$h&`b3?<6)6+lciLu7PkRgv($wuoy-rqhkXO zv5*KN=D}zo1V#-3gcrdk+zB5TM|cvBgd1TGF&l`@fY?-GCX6^{5EEeZVg@l2h>d|5 z3t|Q^I???-f?>djMUPM+vMSzoe0p&?-h~h0?f3vL z!TWF#-i^27op>|ehBx41ycQSY)sRvFzH+}HmEYtJxIL+skiW_cp;<~;KleA`~jYi-^DNDMR+dcoWpP6S&)-~U&Yh# z%XkW&hbKaAJf4HcLT)tVM&g-x7@m%w##8Z=cry6wCE`cnh$DC$eh`nr_v2CcUOWQd zjfdkq@lbp_ehS};pTIZ6ksHA}c|9Dt4nK^qfusMz58x~DefV;G555%6Sc30@^~ZML z3*fBz_%?hVz6IyNnIZTlJP6JX#5dppP=Y^{z{c0&eo%@Jz8ZW7{{mTsdqQcW;(@Qg z-JsM_amAP6F27|d?hLiehFY9J9DmDV+yVb@nFaCxDNA7g-?9|;m%=&A{!5laIV(U` zLYbqo3d;Wr>RAnSt^rvK^{k+LyP#pJ^DclvEiQm;r;`l9Ri^} zg7HIe&qv_i|Auxr0qt=Lt{@a@42PPcpoUl|`3$r`B9xi}C8j}3WkRcELks3WDHow- zFGC5}@MG|Qp2Tm%|8*Dsw}9-L8)--PGt z4&DM!h6s*sgQL6Q>5<{@@Dcnoju1a^jNswQL=CP%G~#*$A7>E~d>qk*TM+%Y6)}R( zAP{&j=~27FkO$ z$yUOYY$vS9e!>R2Dre}se4sB2CRxynj)$IgGK`q*pci(9-kA-(_FU-EmqTyA0loyg z;Cpcdz9wPt)rp5M)L9t2UV^XTE%?foz=*Syq$6KREu@MxL|VbOw3D<(Mo1TgjTH5h`0g2G6zXO79rW-XL=RciQEUCQDt#2h@ttSQ5YD@B14K+%O&^h_ul!H;Yo#hG%N;!jDSETWtTU$YyOy|BjK zDau<&`2{J>kkUmdp%9dJ6g4W3Vgz1n6RACvSyT$um#PUKZ)2$IVEw(l;G24yItNyE zTM8@iZKmD^zqserNa`1A2DKJ^=A_hz)DdbKRhjmS%A&PWC(?SU4&Zgirs>cY!&-5h zXftVtXrAD=H;6kcLKDz(^a9!fYuxpLhbo5sLiJ%CKTB)?b-q9Fuxj3MEEv2b{{rvPJ=k3=3@Zf>N-lO4JTyzdpYs!@Os~U?=$+UUIzo4&>(DuL zbNX7k9eqEYO^>86qi52$)34J{(x1|k>Hk-IXC2w%9yUO zt_&-zD|czijA>U|d4;7bGt=hlzy5yD_B`+PUf1*2yWH22 zWJ#8tW5GG+{@nNX0kwk?sFPGCb&HbHuc=@NjXrt zNI6cqK{;P}K)FtNLAh7?PaGu6;$mo?XCJ+HA>Y_ zHA6L8wM;czwMDf`bwssYby@Yh>Z$6c%8oJ7Y*nI)QWvR$)oOKlwMpGTU0vN)-BjI6 z-B~?cJxD!OJyyL~9i!f$UZdWx-l;yXKBc~=zNLPneyMh=UFu?WA^b*4jZqV>sj8`> zX{>3a>7Z$^=?fdB`B5`XGefgj^Rp&avr)50b3k)ib6#^>b6@jZ^HyWmxHUPNVvSU* z)atci+EUtz+UnZ++D6(o+78+t+CJJL+Tq#>+R55^uvOaC+AZ2`+9TS-+6%CI+B@1e z+80`v)}hVQX2A>P)9Q5^T`8SGS6x?L_m!@$uAQ#AuBWb(Zm_P8Zk%qIZZ@V%F^$D^ zmu|i8m~MyelJ1D^zV5v4rS6u_p^MXH=-%r*x+I+vUaDZ$rz^#(*s5$W+kh>_w#3pm z?3ZjGwi!E^ZO@KjyR*~T{_Ice2zDhqp8buT!R}%gvPbdi9Q!MKjor>ZWDl^f*b}Uk z{eyM0H`pAk@v<*j1t+i^=VHUS40yl_*eV>s)!`Vf5yx^Zxe%^BXW_bWUvS@XmAS## z62(PuiQR4 zP0anJ7MAOll;@Z~Kv>o4VGZ(1efbY77Q|VW7jD9I6*DvGM)M$z&+sFpq`qdzUp%qxSHHat`cgaG`EKf z=eBYj7t1M8dnC7n%V+0u>FhMl$&TmVv!l4@>>%zw+nc+}cIM8ok=$XnDYuiY$8BJ% zax2*~+^WT@_K>b4yII$aU8$?X#^}nk6LewhP@M|C5--m3bX`N8sH>!V zigW)4u7OiJuXc|vO&hCwuU)Krpq-|>r2SEMNZVJpQQKa(RQr`~hPJY9l-8i@qgBCs zTZF4FNn1|)S{tOjt(9p{Ycn-FwSs1~_JL-u_MB#ncAsW|cAci9HbxVnjn-7u_S1xD z+u_Qsr%Bh8*1Xf`GQkBoc#R*cmut?$gSSItrHQjJnCSM^X&Q8iHyQdLlQQ0dk6R34RCm7tQV z9;(umXH+khTU8g8i&VRnV^zzQeN>Z_EmZxLl~rw&0jlcCB4vourt~Q8!l!dwc~23m zJg%6d{8cebIY-e+IaEM+01k%ZL9`%rZLmj6t zQfujL)Kq#t)t4SdHKE&6W$Ee^L$g#el`X$dJ(nMbZ)g>@K|X<+A@4!;mp7oA$_-Q* zxd$=*@p7l^iu|^0hkUQ>C;1ZDQ28iXq`V`tHPn!4$4EMnoh3EM8i762ODN=b zwfn9RSAAQEZN3@AEMH%uuP=g#@P!lM{xN*-Q{M~kaoc}^g6$g1LDp6KG1o({#O zJr#>39=iBlv8@O>=#bfXGf0u?MIDQK7F8~;Tf`J|MUJAh!plYX3pW+*E1X)ips;(< z4~2D$nicAitI1thSa7TGMZwO(69qAas|yAcMi+cl*uEg7uwp@W0aft0z?y%s;9~y5 zf(`kD3nt|^FX*0cDyW@bkgv;smha9xntwZQS^n<4k@@rT+T;(&E0fs&goVy-Qh&b^px%h{NFDQ9Z##+>fCQ*&zN_Q=uX z*2ziA3Cy{flb*dj=Wh0_oPF7Sau#OS&l#K@l+!#rBioYwAiFqgU-p} znWM*LS+c*)D$1&n^*l?H^?O!Q=BljQnbF8D-63m1W~Hn_i2ZDqY0tD|Ue5GnY|MO} zF(va%Mz_oj8FexzXXrD#XQU&`&HaqPjC~oI=?gQSqz}nBlHMX?d3vdgAJZin?bF|- zS4lsYu1b$Z#+*s%x6`_%?@gX?s#D zq%BTm(nh2vq(-J*Ppz1`E0sz8Dbch#XYSQ+{`Uk+Kf?#wWW)cTe|KcSH9Mx5+)u@B)v)+o^&>;L(-jZHcLg3lbkEj!Hb1_-*2v#CphM9+vnW2FO|@+Fj)m@4A@8qpnof zTGtcTbmXi0-WBU=>zd`NilqQoq^rnT-DPzKy6!j&okyJSook&}oim+#k@tL=v%PaX za-a8hh9M^t;jG|HPS81@CFCKm(|hErx|XmgVPC?Sgq6qvH5K`w1}0QVXq6D0P#qc2 z!x9oP7#HVoIxZrw)Go(q#|p<*$27+x#}LO@M`uSLM}(u5ql}}vL+1#0cDIWw0(rVkG-3{mA#q0w!MnoVh^#a?WDcfmTF6~y|KNp-Lze| z9fNIwEw`<-O|#9m4YNhry4eQUTG%?+YTD}CEVfEEjV;_(WL4M_twq+CR=4%0^{w@! z^}cnR^}Kb3b-#6v^*8HS>oV*2*4ft1SZZed!CJ%G)yi92SvhNcD`~B2%@ld7UDR8j ziBjtgu|PZ{ricf`cj9L8vA9aSAG@pnNf?h&NoCZS09MaU5r2`R!{ z!6D2L-U<_hXTnI~p)gRmEA$es3!R0FLObEK&_XyWG!hO7Ukba08p1ZAg0N92EyM~& zVT}+hEE8DaXF-W0QNjX&6y^!V@w0`T_-R5KiaUO?kQ6^waK(=i>?lI~XyGl&OO)sF zQ79vYNAbgjdze3rA0a%z@}2l$prVHhH}TqEZeZK>_#cI9*#CNbG|G6C3D`Cf`%Olf zi4ucj%oiS`JcwU_vINV^ar|F|*YUCV%uT}k_^pB%ze{k&@5gsKDx}7r7P8|n2)XfB zg@X87f;ax5AQN5+D#0oQ2u>kHaN~c>6TUzK&&sH?>ZrTgLV);{U=mvkUx@96s^Yh( z9V+|FZ8fc}ZB4D+ZJn({ zZ3C=RY|+-mwmH@fww2aHwjI_hwlmgewp&)0?X|VYmTFbmy;hT5XRB#1Wov1#4Z^*R zE!y7CHrGDJw#FV~+hbpAyI|jEdu;#1mSBHs^VnUs07tQ{l7qE3b(FJrcQm$-a&)oJ zbquqwcg(OKaICOjb?mgib)2(jJD%B92`Tn62~tPH1f%2Igj$Y~;89}|`Z+cvOmrMi zSmwB!u-jozxa=UDufeBgIchmo2_3tgd+SSy#)YaR$*EP|3&9%xIkBoUmu3OH~M7y(2qR-hm(cl`LSl_iM zvAb(W;&|63WZa8S-0vciZo5h)CAu0V$rJk~l}?`S^7>TO-qbR`ZX~dY7YA3 z7vNfR62D2-Cyh?7k+dZFo1_EDW0D>wuS`l!K9;0)KTN9TPD%R4txJw}*GOLO?wowY z9hLmpy&^dS`P}p=&%nB7CHGF@+*4EPxMNegyU*fI{x)Sj60w|hmrad#w*m7yJe5yb zoZ2d7f9l|r`>6|3vQqb_grwb1iAc*x`93W)b$(g{@UOj6Z=}sgO-kF6%BEjUt()#l z?Uk-do1R`HZF72$w5#be(wxZWrp~yLRx2YptyhLFeO5-D^j#S}(;s9^OV7yInjV;W zGrd7(O8R%1ff;i%8)WRs?3?i*GbST9b6rqDQtQ|j$SpirU@3Z5&=CXkQ;I4SZY%0ic&}(yVQ$ghLcaKEVPvtl za9nW(X}}g?%9dVmQRXXV30q`ThSBi z?drMao$E>Q9`XeFUU-`M2yc|Hl6SqYtM|HZjyJ=1$Qw?)@HQhz-*B+BzYslqmx#H( zB;pWQ+PA*O5}Ft$sZOkt^d&Axej;3wLqst7mS|2gl96OB$r`es05+Hpi zX(DCFVQ7i2mJT2yyfi@WkbWiC$cD)4 z%a+T3ke!wlFm}o^mCRXt?a~)i5rs5rA zP^uKomGu-um3xth z16KqL3p^RHFz{8tp1{I@TY-kaTZ4OqTnwHP zA_lJsk%Sx$DIIb*q(z83WMGIUbaqIE&}|{DLa&7k1{Jv=lnC7xY6?9S8WH+3w0CHJ z=oGN7>qD!A{T><#%5p?lYUod4+OREQ)xfewhQ);q4NDDM5T*^^9#%g5d|0FK=b${Z z!zP7u;j6)~?g(!aeja4%oA9aOnP5?shNI!-4UfW`8(iUi3=+e5gW0gy(9p2O(A99p zFv{@Q5MxL*{AQ3CPZ~mv4-M6gE<>b|Fb*(=87CNP85bJc88;gT8qXLf8E+ex8{Zjs z8}p49j5^a(V;NJTv5rY%YGVpBeP^m+nq+EjT4?HNT5F0j9Wu=|T`{dTJu&StIZWqG z`B+k$ou+VefvJ*NWo~5V&F#&#%zex)%p=WR%rnhH&8y7Q&D+f@%*V`|&6mvw%?~k+ zH$O3_nQdmDIm@iENG+k3082$nS<9D}I+o^^W|l}x2TM0gU&{zflx31-s%5U_C(9Dc z8rXKr7Ryn~e#>RcNy{C}70VOLU5j9evm{&IT5>Ed3(03&w7ky}%9DI4p5iO=YQ82P z$Vc#IzBON&@66ZYd-C=8etaW-FyD$F&9~zx^X>Vm*fJMee&)a9SMlHTYx!aPdX!E4 zkNggP62G6H!XL+;r}=UG8Ga)F2i|dwpTS?}XYn`rnfxuhzQa#PnZ@76`~kK-!TLCU z8kQ&X_i>Dem_OntU>?Qa2aQv(M5FBR!f06Hn<90!5kI!hspTM_0%s1ip@^$g~ zmHCZ)d3>jG{0cstU(9Ry7+#J~$+wK*Q!GRH1j~1Pyrl>K!qSPqV`Wt@&`GzgV=Z3k)6NVp*zZqH^rx+?2yBZY6>IRoVZ@6v93*TpW z8otPID13-v5w3s{;TA*Na8GzyTpdLCsqi;pE5m;e8xg)TtWEf+u(IJz!ivKTVXwmS zLQjU>3|$hoJ#SEA-be z*0@x^k?XD>%$fDoxdg6|J%X{iDcoYVCHD=h<3iau)~Z|29@GtB$Lp%F4G^&)1AF{X zJ4^Sgwl&7bbhBwjXk?nhnp`@V0tQ+ zGe$*EMr2AcM;JFffjLRnW2VCc(UQJJYv`r)Q>qvJ8&#SfK{=_q)KR$Xr&BlNEvZ#< z4K)CnDyt#aWT9-N9Aq&VV~KpA>@l*1?vxcv#~`CR zTF-oVxaZ^bJd~J{ZR@b_diY&qv1Jq9u?2qCt?-=ggzbe_eII=2N8mj@m_5!uiAHVPS;8_O2 z&-w#+mtmMk`9}E0f`b_g9%cgAn91C4`Qj)Y%4JXB+sP9iVyqM9)F6JxAfQJq8NsIEtTNz5qJt0zA9tOUR*1B`lGj zExHTV=mDk=a6Wz@m*c=K`HP=jeg)R)4aleWCH#{J9?H)~eW0d3=|UxyP*#5KDg*r0 z=bBJ{mdj6gec-)5XhD4-mp{nueg3@q@0O9O26HtE0Pum5KT`vZsVXRtqT*#3;x zA2@73h5d=c{={PYIqXj?wm+iEU*3OYvEQP#;xC_A?AIl27(a{s0_Jbi_;YdpJ&*ke z?VyLCvHh)~`)C#2D~ap6{kKf^HMFCyg2=w&yYxSD*{9JC^Rw9}&?56kmHic)eGp`} zpUvKfcATHj-VHK)7ut1xKHDFu_FwtzSWw#Q(IQ-j=^C^Ne}Sz+`*0=9&uA|zVYHWm z(Dt_^7a=NcAzGC`f$*D$h{m~SWzH#SZ~i-{JsIuMiHNEjkGAPpP=V2Ct44tv9EBF^ z2((@Otyh0L*3W7W0;%nf%KN}-_ePAKKUS}MNz`6fw15AK*KUJ$aw}hpkHmIkME-ps zwi}=={UwO)I{$^)_P4jo{~NV!L7&M_Z6hSPq;>v*+t!11)S=C;LA;?7afctsZ7Evw z62xqxX%BMyU+i}FM|L|EZU1CgA}pb#KVbKYu=lVx|Hf~}f!={?+jkKIdE0v( zJ&G&nTU_*BLLcJ-B0)cAxR0X;as&+bK@gq$&?DImf_o==C)+@9ZwAl#8+t6ig5X{U zg8N?__aYFVKY`|+i|K4{40<`Uy;Dp2I#Us?ISDNH`2S$Jhl4B~0)BK5DAR$Uxch

_pEH&^pMxorq%<=?Pt1ce8zNF z0KfVLNbb^LSuG&BP3WzKgX9hY;~EH(oBPOhtG$vxxo$bQZql0zW;Wa70YzJgK3_ii zrMV!vv(O7n2g#lKA8fY+B)1hLw*Vsdo#&zF4SJ6+(SLl7eqvmCwI zrJ#ZRocF@N;k>6~uc_E;GWME?{_=S2ITn59X!Mc)n)ROck@cQj!g}`y9sV8Y@IHU? z-lPA5_a0Hgdw2Sb_x>73`4{s&@Nb##W*?dFruc+U+_#_kZUln*Ke_LQpK;%Q2K>M0 zzWogN-?87H_-{Y^{fYnfv)_Nke-8tn?q|S9f&m}pX#;Be0|P$B^EK+l&wzLQi~;`^ z40u;?^W8yl_XKg@8}-~5_1zD3Kj0$=J{aQ>L;r#UABW#_B7WN`_>HII_nwKfVh%

)oVQ-oDnMdJ$g^`!{&4hiEAUuIa zA$n*6o?x>OeY6lG2P+ZLv;j}top@p&E@8wA@jR3f_kB9zg)fW{ePsx@uNsl-t4~OX z7ErJ505y)D(6Sx`P3tHqc1(fB^*o||2`3&)d{68oek6`!?Rl)dNvt5Af*y|tJ)T4y z$EeyL1Sz>gXrWOQj!6D;&?)k>;_$J73=aSqZjlU2(mT^ z@n%pk>O`(4zazJiBgrGsZ}&6f_b?v#n%qIU$YW$4d6|?$*Cjw~&8L*J-~Y$8=k zJ3_goFESR4l-9$DVk@Y;bS>e=cSG^zq;w8Q@fFfI=@zLC8s(YLg&}1RpdRy1%F9xu zH83*SM5dN?f~HJAD9uF4B1+itrBI^TC>sgQnyJvQSqwd+4Nywo4=tl}vSKL0tL1NG zM!8#773w#QM^CF zt(1|@rmE61x-lI@ccRPF1L*p6G#v?!yf^6ak@R+YI{iDnjJ{59p`X)7X(xS!&Zpx* z3EJs!CYP?vFiZp!%5-2VG5wjZn9)po<{fjUge6}Io_ro_=4WOEvxFJWEG{X-m_^J`W+5|#`H30K%x8XJ<}u%cP#?(5Wd<;_@rizJeFiA@ z=}d2CD$|RZ!t`J!G2NI6Ojl+c^DQ%$`3B#jBR;J?KBXOw-j*50w8qg|GJ}}rI8sv_ zr4f!0fg?1)yX)cIb@0xbcxQF|Usdp~icA}(JkyFPi+7Y_nlNVkrv~gDioJuFT8tih z>aeF8dos)yjGQUWkc@@#(gvo84q@`>Kqi}JnRHsiq|gc`k(M(KTEd95hkj2N(68wn z)NTg-gifI!(1~F69rO)aq%VWrzd*mF&!EOn&=2V&^j-P@w(P;LupL`AV@oW4pEdMh zdL_M|{u$i=0(vVQL;pt4q}S0?@EeZDX!~e-Aw2?X2V?C3tnEXOqr1~lbZ2@v{WU#^ zZjJbXW^^w)g6@Jif{t`eL=se{o73g!Ml?@+0_l88OJ{-x zO`%BINflEfl}o*$(y3=S#~xC4>NfSBxI!$fFsQ)@@ zKeYmp4U2JR&cmx2)Jkd+UPV(e)Cjy9L`|gnQlqKv)Nra3^*!Pu`cTbrjz=IjNgb*+ zRSj_y<*5b~Pt~HrsLGU{Dod%5vqVM(Qy#gN%9YcIuOKKFG_*wMWxYlQlc&(dx>usv z^$b_k1NkXvU>%13)gGu`ZH3}hEOf6{L+xq_mgZq;29_pZDGCZ#L$TB!*Je*Bhkb)9 zGZH#i%@O6%P~KKvTiz6LAN8SURa0(+##InBt~7`Sq2zjKlc^9NB9*7filAqe4LvJ2 z^sMagX}p!)hQ`$u+!xLwi^?(FBlgQqLfz^R?i0J9X|)N;XzOJ25Op#`wg9?lvk-?e zSvEu#jl0Y+S$Ek0+;Mu!+CV+6i7XOXSenUd$QsBh$ZA6AsuGm0N<(WcT&9%iWhADB z&}7S!7De~Y86zMGK7{t|#kVZodZkV)>bRgnudP&_vVjt8gF2T-7&Pt9WQ_VriA<1soR@esE8rX8!B3KM;25b^+ zER^_0!G^#F!1_RWs~fBntR1W+tcj#CG`Jc-jjImgr>a4btD>YV%px&Ek1GtyT!GN! z(n*vsIgCID2}$ONJUnMJ5to%hxS`SI1kY^66Zkz8yIw)7D-Nn%j}XCi7s_2XiEG3a z;v$~P=ZG`JDdGfi4A1UEi0ax01+QJi4rJNc0=2>4kYi^(u@+HZtMEi$Ml2;36N`ui z#C$}E%^_w%*=ss6m6!~5uL;CBVhjuSrt|Zz=cIg_9mysP?cZ%%N Xx~m4ut=scm#!vWR_-MXnErR$zF<~bT diff --git a/Head-First-Design-Patterns-master/heatindex.txt b/Head-First-Design-Patterns-master/heatindex.txt deleted file mode 100644 index 232c7b0..0000000 --- a/Head-First-Design-Patterns-master/heatindex.txt +++ /dev/null @@ -1,11 +0,0 @@ -private float computeHeatIndex(float t, float rh) { - float index = (float)((16.923 + (0.185212 * t) + (5.37941 * rh) - (0.100254 * t * rh) + - (0.00941695 * (t * t)) + (0.00728898 * (rh * rh)) + - (0.000345372 * (t * t * rh)) - (0.000814971 * (t * rh * rh)) + - (0.0000102102 * (t * t * rh * rh)) - (0.000038646 * (t * t * t)) + (0.0000291583 * - (rh * rh * rh)) + (0.00000142721 * (t * t * t * rh)) + - (0.000000197483 * (t * rh * rh * rh)) - (0.0000000218429 * (t * t * t * rh * rh)) + - 0.000000000843296 * (t * t * rh * rh * rh)) - - (0.0000000000481975 * (t * t * t * rh * rh * rh))); - return index; -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Duck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Duck.java deleted file mode 100755 index 2f947a3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Duck.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.adapter.ducks; - -public interface Duck { - public void quack(); - public void fly(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckAdapter.java deleted file mode 100755 index bf193a9..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckAdapter.java +++ /dev/null @@ -1,22 +0,0 @@ -package headfirst.designpatterns.adapter.ducks; -import java.util.Random; - -public class DuckAdapter implements Turkey { - Duck duck; - Random rand; - - public DuckAdapter(Duck duck) { - this.duck = duck; - rand = new Random(); - } - - public void gobble() { - duck.quack(); - } - - public void fly() { - if (rand.nextInt(5) == 0) { - duck.fly(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckTestDrive.java deleted file mode 100755 index 4b3790f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/DuckTestDrive.java +++ /dev/null @@ -1,34 +0,0 @@ -package headfirst.designpatterns.adapter.ducks; - -import headfirst.designpatterns.adapter.ducks.challenge.Drone; -import headfirst.designpatterns.adapter.ducks.challenge.DroneAdapter; -import headfirst.designpatterns.adapter.ducks.challenge.SuperDrone; - -public class DuckTestDrive { - public static void main(String[] args) { - Duck duck = new MallardDuck(); - - Turkey turkey = new WildTurkey(); - Duck turkeyAdapter = new TurkeyAdapter(turkey); - - System.out.println("The Turkey says..."); - turkey.gobble(); - turkey.fly(); - - System.out.println("\nThe Duck says..."); - testDuck(duck); - - System.out.println("\nThe TurkeyAdapter says..."); - testDuck(turkeyAdapter); - - // Challenge - Drone drone = new SuperDrone(); - Duck droneAdapter = new DroneAdapter(drone); - testDuck(droneAdapter); - } - - static void testDuck(Duck duck) { - duck.quack(); - duck.fly(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/MallardDuck.java deleted file mode 100755 index 846f20f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/MallardDuck.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.adapter.ducks; - -public class MallardDuck implements Duck { - public void quack() { - System.out.println("Quack"); - } - - public void fly() { - System.out.println("I'm flying"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Turkey.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Turkey.java deleted file mode 100755 index d35e3d5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/Turkey.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.adapter.ducks; - -public interface Turkey { - public void gobble(); - public void fly(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyAdapter.java deleted file mode 100755 index 600cf13..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyAdapter.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.adapter.ducks; - -public class TurkeyAdapter implements Duck { - Turkey turkey; - - public TurkeyAdapter(Turkey turkey) { - this.turkey = turkey; - } - - public void quack() { - turkey.gobble(); - } - - public void fly() { - for(int i=0; i < 5; i++) { - turkey.fly(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyTestDrive.java deleted file mode 100755 index 667b17c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/TurkeyTestDrive.java +++ /dev/null @@ -1,14 +0,0 @@ -package headfirst.designpatterns.adapter.ducks; - -public class TurkeyTestDrive { - public static void main(String[] args) { - MallardDuck duck = new MallardDuck(); - Turkey duckAdapter = new DuckAdapter(duck); - - for(int i=0;i<10;i++) { - System.out.println("The DuckAdapter says..."); - duckAdapter.gobble(); - duckAdapter.fly(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/WildTurkey.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/WildTurkey.java deleted file mode 100755 index 04a62c7..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/WildTurkey.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.adapter.ducks; - -public class WildTurkey implements Turkey { - public void gobble() { - System.out.println("Gobble gobble"); - } - - public void fly() { - System.out.println("I'm flying a short distance"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/Drone.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/Drone.java deleted file mode 100755 index c2cc1a3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/Drone.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.adapter.ducks.challenge; - -public interface Drone { - public void beep(); - public void spin_rotors(); - public void take_off(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/DroneAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/DroneAdapter.java deleted file mode 100755 index f503d74..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/DroneAdapter.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.adapter.ducks.challenge; - -import headfirst.designpatterns.adapter.ducks.Duck; - -public class DroneAdapter implements Duck { - Drone drone; - - public DroneAdapter(Drone drone) { - this.drone = drone; - } - - public void quack() { - drone.beep(); - } - - public void fly() { - drone.spin_rotors(); - drone.take_off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/SuperDrone.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/SuperDrone.java deleted file mode 100755 index bd36eec..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/ducks/challenge/SuperDrone.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.adapter.ducks.challenge; - -public class SuperDrone implements Drone { - public void beep() { - System.out.println("Beep beep beep"); - } - public void spin_rotors() { - System.out.println("Rotors are spinning"); - } - public void take_off() { - System.out.println("Taking off"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EI.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EI.java deleted file mode 100755 index 5ea91ab..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EI.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.adapter.iterenum; - -import java.util.*; - -public class EI { - public static void main (String args[]) { - Vector v = new Vector(Arrays.asList(args)); - Enumeration enumeration = v.elements(); - while (enumeration.hasMoreElements()) { - System.out.println(enumeration.nextElement()); - } - Iterator iterator = v.iterator(); - while (iterator.hasNext()) { - System.out.println(iterator.next()); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIterator.java deleted file mode 100755 index 56f2d2f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIterator.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.adapter.iterenum; - -import java.util.*; - -public class EnumerationIterator implements Iterator { - Enumeration enumeration; - - public EnumerationIterator(Enumeration enumeration) { - this.enumeration = enumeration; - } - - public boolean hasNext() { - return enumeration.hasMoreElements(); - } - - public Object next() { - return enumeration.nextElement(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIteratorTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIteratorTestDrive.java deleted file mode 100755 index d0264d8..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/EnumerationIteratorTestDrive.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.adapter.iterenum; - -import java.util.*; - -public class EnumerationIteratorTestDrive { - public static void main (String args[]) { - Vector v = new Vector(Arrays.asList(args)); - Iterator iterator = new EnumerationIterator(v.elements()); - while (iterator.hasNext()) { - System.out.println(iterator.next()); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumeration.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumeration.java deleted file mode 100755 index 5480780..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumeration.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.adapter.iterenum; - -import java.util.*; - -public class IteratorEnumeration implements Enumeration { - Iterator iterator; - - public IteratorEnumeration(Iterator iterator) { - this.iterator = iterator; - } - - public boolean hasMoreElements() { - return iterator.hasNext(); - } - - public Object nextElement() { - return iterator.next(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumerationTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumerationTestDrive.java deleted file mode 100755 index 1e341a6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/adapter/iterenum/IteratorEnumerationTestDrive.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.adapter.iterenum; - -import java.util.*; - -public class IteratorEnumerationTestDrive { - public static void main (String args[]) { - ArrayList l = new ArrayList(Arrays.asList(args)); - Enumeration enumeration = new IteratorEnumeration(l.iterator()); - while (enumeration.hasMoreElements()) { - System.out.println(enumeration.nextElement()); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Client.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Client.java deleted file mode 100644 index 868f32a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Client.java +++ /dev/null @@ -1,22 +0,0 @@ -package headfirst.designpatterns.bridge.remote; - -public class Client { - public static void main(String[] args) { - TVFactory tvFactory = new TVFactory(); - SpecialRemote remoteSony = new SpecialRemote(tvFactory); - System.out.println("Connect your remote to the TV"); - remoteSony.setTV("Sony"); - remoteSony.on(); - remoteSony.up(); - remoteSony.down(); - remoteSony.off(); - - GenericRemote remoteLG = new GenericRemote(tvFactory); - System.out.println("Connect your remote to the TV"); - remoteLG.setTV("LG"); - remoteLG.on(); - remoteLG.nextChannel(); - remoteLG.prevChannel(); - remoteLG.off(); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/GenericRemote.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/GenericRemote.java deleted file mode 100644 index e454efa..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/GenericRemote.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.bridge.remote; - -public class GenericRemote extends RemoteControl { - public GenericRemote(TVFactory tvFactory) { - super(tvFactory); - } - public void nextChannel() { - int channel = this.getChannel(); - this.setChannel(channel+1); - } - public void prevChannel() { - int channel = this.getChannel(); - this.setChannel(channel-1); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/LG.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/LG.java deleted file mode 100644 index d178491..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/LG.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.bridge.remote; - -public class LG extends TV { - int channel = 1; - public void on() { - System.out.println("Turning on the LG TV"); - } - public void off() { - System.out.println("Turning off the LG TV"); - } - public void tuneChannel(int channel) { - this.channel = channel; - System.out.println("Set the LG TV Channel to " + this.channel); - } - public int getChannel() { - return channel; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/RemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/RemoteControl.java deleted file mode 100644 index f673d5b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/RemoteControl.java +++ /dev/null @@ -1,28 +0,0 @@ -package headfirst.designpatterns.bridge.remote; - -public abstract class RemoteControl { - TV tv; - TVFactory tvFactory; - public RemoteControl(TVFactory tvFactory) { - this.tvFactory = tvFactory; - } - public void on() { - this.tv.on(); - } - public void off() { - this.tv.off(); - } - public void setChannel(int channel) { - tv.tuneChannel(channel); - } - public int getChannel() { - return tv.getChannel(); - } - public void setTV(String type) { - try { - tv = tvFactory.getTV(type); - } catch (Exception e) { - System.out.println(e); - } - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Sony.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Sony.java deleted file mode 100644 index ebf9807..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/Sony.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.bridge.remote; - -public class Sony extends TV { - int station = 0; - public void on() { - System.out.println("Turning on the Sony TV"); - } - public void off() { - System.out.println("Turning off the Sony TV"); - } - public void tuneChannel(int channel) { - this.station = channel; - System.out.println("Set the Sony TV station to " + this.station); - } - public int getChannel() { - return station; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/SpecialRemote.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/SpecialRemote.java deleted file mode 100644 index adb2cda..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/SpecialRemote.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.bridge.remote; - -public class SpecialRemote extends RemoteControl { - public SpecialRemote(TVFactory tvFactory) { - super(tvFactory); - } - public void up() { - int channel = this.getChannel(); - this.setChannel(channel+1); - } - public void down() { - int channel = this.getChannel(); - this.setChannel(channel-1); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TV.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TV.java deleted file mode 100644 index 78832d0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TV.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.bridge.remote; - -public abstract class TV { - public abstract void on(); - public abstract void off(); - public abstract void tuneChannel(int channel); - public abstract int getChannel(); -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TVFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TVFactory.java deleted file mode 100644 index fe03da6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/bridge/remote/TVFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.bridge.remote; - -public class TVFactory { - public TV getTV(String type) throws Exception { - if (type.equals("LG")) { - return new LG(); - } else if (type.equals("Sony")) { - return new Sony(); - } else { - throw new Exception("Invalid TV Type"); - } - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/GingerbreadHouseBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/GingerbreadHouseBuilder.java deleted file mode 100644 index ae39c44..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/GingerbreadHouseBuilder.java +++ /dev/null @@ -1,36 +0,0 @@ -package headfirst.designpatterns.builder.house; - -public class GingerbreadHouseBuilder extends HouseBuilder { - int numWalls = 4; - int numWindows = 4; - String windowMaterial = "Sugar"; - String wallMaterial = "Gingerbread and icing"; - String roofMaterial = "Twizzlers"; - public GingerbreadHouseBuilder() { - this.builderName = "Gingerbread House Builder"; - setHouseType(HouseType.GINGERBREAD); - } - public HouseBuilder addWalls() { - // add exterior walls - for (int i = 0; i < numWalls; i++) { - System.out.println("Adding wall made out of " + wallMaterial); - house.addWall(new Wall(wallMaterial)); - } - return this; - } - public HouseBuilder addWindows() { - for (int i = 0; i < numWindows; i++) { - System.out.println("Adding window made out of " + windowMaterial); - house.addWindow(new Window(windowMaterial)); - } - return this; - } - public HouseBuilder addRoof() { - house.addRoof(new Roof(roofMaterial)); - return this; - } - public House build() { - System.out.println("Stick everything together with icing"); - return house; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/House.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/House.java deleted file mode 100755 index fbd4f11..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/House.java +++ /dev/null @@ -1,65 +0,0 @@ -package headfirst.designpatterns.builder.house; - -import headfirst.designpatterns.builder.house.HouseBuilder.HouseType; -import java.util.*; - -public class House { - String name; - HouseType houseType; - Roof roof; - List walls; - List windows; - - public House() { - this.walls = new ArrayList(); - this.windows = new ArrayList(); - } - public House setHouseType(HouseType houseType) { - this.houseType = houseType; - switch (houseType) { - case WOOD: this.name = "My wood house"; break; - case CLAY: this.name = "My clay house"; break; - case GINGERBREAD: this.name = "My holiday gingerbread house"; break; - case STONE: this.name = "My stone house"; break; - } - return this; - } - House addRoof(Roof roof) { - this.roof = roof; - return this; - } - House addWall(Wall wall) { - this.walls.add(wall); - return this; - } - House addWindow(Window window) { - this.windows.add(window); - return this; - } - public void setName(String name) { - this.name = name; - } - - public String toString() { - // Use a StringBuilder to build the string :-) - // Like StringBuffer, but not synchronized - StringBuilder display = new StringBuilder(); - display.append("---- " + this.name + " ----\n"); - for (Wall wall : walls) { - display.append("--- " + wall.name + " ---\n"); - } - for (Window window : windows) { - display.append("--- " + window.name + " ---\n"); - } - display.append("--- " + roof.name + " ---\n"); - return display.toString(); - - // There is some difference of opinion about StringBuilder and whether it's using - // the Builder pattern or not. Some say yes, some say no. - // StringBuilder does not provide an abstract API with multiple subclasses for - // creating different representations (variations). - } -} - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseBuilder.java deleted file mode 100644 index 023ec19..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseBuilder.java +++ /dev/null @@ -1,31 +0,0 @@ -package headfirst.designpatterns.builder.house; - -import java.util.ArrayList; -import java.util.List; - -public abstract class HouseBuilder { - String builderName; - enum HouseType { - WOOD, CLAY, GINGERBREAD, STONE - } - HouseType houseType; - House house = new House(); - - public void setHouseType(HouseType houseType) { - this.houseType = houseType; - house.setHouseType(houseType); - } - // Each method in the Builder returns the Builder so we can use the Fluent Interface Pattern - public abstract HouseBuilder addWalls(); - public abstract HouseBuilder addRoof(); - public abstract HouseBuilder addWindows(); - - public House build() { - System.out.println("Build the house!"); - // Very simple build -- just return the house! - // We've added all the parts... - // In a real build, we'd have to nail and screw everything together of course. - // And add wiring and so on. - return house; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseDirector.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseDirector.java deleted file mode 100755 index e73377e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/HouseDirector.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.builder.house; - -public class HouseDirector { - - // Fluent Interface pattern (return the builder each time so we can string the calls together) - // Builder pattern (we have two different builders so the "same construction process can create - // different representations"). - // Builder is a solution to the telescoping constructor anti-pattern, where we have multiple, - // complex constructor methods with various args for all various combinations of options - // in construction options. - - // in this example main() is the construct() method - public static void main(String[] args) { - // The Director calls the methods in the correct order to build a house. - // Could make this a lot more complicated to allow number of walls, windows, to be passed in. - - HouseBuilder woodHouseBuilder = new WoodHouseBuilder(); - House woodHouse = woodHouseBuilder.addWalls().addWindows().addRoof().build(); - System.out.println(woodHouse); - - HouseBuilder clayHouseBuilder = new ClayHouseBuilder(); - House clayHouse = clayHouseBuilder.addWalls().addWindows().addRoof().build(); - System.out.println(clayHouse); - - HouseBuilder gingerbreadHouseBuilder = new GingerbreadHouseBuilder(); - House gingerbreadHouse = gingerbreadHouseBuilder.addWalls().addWindows().addRoof().build(); - System.out.println(gingerbreadHouse); - - // Builder has similarities to Abstract Factory. - // But difference is that Builder provides a step by step API for building a product; - // the client is responsible for calling the steps, and those can vary in order, etc. - // With Builder, the client must have more knowledge of the details of the product being built. - // Product implementations can be swapped for others; clients don't change because the use the abstract API. - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/InteriorWall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/InteriorWall.java deleted file mode 100755 index 004be32..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/InteriorWall.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.builder.house; - -public class InteriorWall extends Wall { - String name; - String material; - - public InteriorWall(String material) { - super(material); - this.name = "Interior wall made out of " + material; - } - public void setName(String name) { - this.name = name; - } - public String toString() { - return this.name; - } -} - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Roof.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Roof.java deleted file mode 100755 index 2ab858b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Roof.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.builder.house; - -public class Roof { - String name; - String material; - - public Roof(String material) { - this.name = "Roof made out of " + material; - } - public void setName(String name) { - this.name = name; - } - public String toString() { - return this.name; - } -} - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/StoneHouseBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/StoneHouseBuilder.java deleted file mode 100644 index 07377af..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/StoneHouseBuilder.java +++ /dev/null @@ -1,37 +0,0 @@ -package headfirst.designpatterns.builder.house; - -public class StoneHouseBuilder extends HouseBuilder { - int numWalls = 5; // Stone houses have 5 walls: 4 exterior, 1 interior - int numWindows = 20; // Stone houses have a lot of windows - String windowMaterial = "Antique glass"; - String wallMaterial = "Stone, 2 feet thick"; - String interiorWallMaterial = "Stone, 1 foot thick"; - String roofMaterial = "Tile"; - public StoneHouseBuilder() { - this.builderName = "Stone House Builder"; - setHouseType(HouseType.STONE); - } - public HouseBuilder addWalls() { - // Add 4 exterior walls - for (int i = 0; i < numWalls-1; i++) { - house.addWall(new Wall(interiorWallMaterial)); - } - // Add 1 interior wall - house.addWall(new InteriorWall(wallMaterial)); - return this; - } - public HouseBuilder addWindows() { - for (int i = 0; i < numWindows; i++) { - house.addWindow(new Window(windowMaterial)); - } - return this; - } - public HouseBuilder addRoof() { - house.addRoof(new Roof(roofMaterial)); - return this; - } - public House build() { - System.out.println("Stick everything together with mortar"); - return house; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Wall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Wall.java deleted file mode 100755 index 73a67e5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Wall.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.builder.house; - -public class Wall { - String name; - String material; - - public Wall(String material) { - this.name = "Wall made out of " + material; - } - public void setName(String name) { - this.name = name; - } - public String toString() { - return this.name; - } -} - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Window.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Window.java deleted file mode 100755 index 15cf7b9..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/Window.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.builder.house; - -public class Window { - String name; - String material; - - public Window(String material) { - this.name = "Window made out of " + material; - } - public void setName(String name) { - this.name = name; - } - public String toString() { - return this.name; - } -} - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/WoodHouseBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/WoodHouseBuilder.java deleted file mode 100644 index ff04c25..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/house/WoodHouseBuilder.java +++ /dev/null @@ -1,44 +0,0 @@ -package headfirst.designpatterns.builder.house; - -import headfirst.designpatterns.builder.house.HouseBuilder.HouseType; - -public class WoodHouseBuilder extends HouseBuilder { - int numWalls = 6; // 4 exterior walls, 2 interior - int numWindows = 10; - String windowMaterial = "Tempered glass"; - String wallMaterial = "Wood, 4x6"; - String interiorWallMaterial = "Wood, 2x4"; - String roofMaterial = "Metal"; - public WoodHouseBuilder() { - this.builderName = "Wood House Builder"; - setHouseType(HouseType.WOOD); - } - public HouseBuilder addWalls() { - // add exterior walls - for (int i = 0; i < 4; i++) { - System.out.println("Nailing wood for wall made out of " + wallMaterial); - house.addWall(new Wall(wallMaterial)); - } - // add interior walls - for (int i = 0; i < numWalls - 4; i++) { - System.out.println("Nailing wood for interior wall made out of " + interiorWallMaterial); - house.addWall(new InteriorWall(interiorWallMaterial)); - } - return this; - } - public HouseBuilder addWindows() { - for (int i = 0; i < numWindows; i++) { - System.out.println("Adding window made out of " + windowMaterial); - house.addWindow(new Window(windowMaterial)); - } - return this; - } - public HouseBuilder addRoof() { - house.addRoof(new Roof(roofMaterial)); - return this; - } - public House build() { - System.out.println("Nail everything together"); - return house; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/MeatPizzaBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/MeatPizzaBuilder.java deleted file mode 100644 index 64b2b75..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/MeatPizzaBuilder.java +++ /dev/null @@ -1,40 +0,0 @@ -package headfirst.designpatterns.builder.pizza; - -public class MeatLoversPizzaBuilder extends PizzaBuilder { - public MeatLoversPizzaBuilder() { - this.name = "Meat Lovers Pizza"; - } - public PizzaBuilder addCheese() { - // meat lovers like moz - this.toppings.add("mozzerella"); - return this; - } - public PizzaBuilder addSauce() { - this.toppings.add("NY style sauce"); - return this; - } - public PizzaBuilder addTomatoes() { - this.toppings.add("sliced tomatoes"); - return this; - } - public PizzaBuilder addGarlic() { - this.toppings.add("garlic"); - return this; - } - public PizzaBuilder addOlives() { - // never add olives to meat lovers pizza - return this; - } - public PizzaBuilder addSpinach() { - // never add spinach to meat lovers pizza - return this; - } - public PizzaBuilder addPepperoni() { - this.toppings.add("pepperoni"); - return this; - } - public PizzaBuilder addSausage() { - this.toppings.add("sausage"); - return this; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/Pizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/Pizza.java deleted file mode 100755 index 5b87976..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/Pizza.java +++ /dev/null @@ -1,50 +0,0 @@ -package headfirst.designpatterns.builder.pizza; - -import java.util.*; - -public class Pizza { - String name; - List toppings; - - void addToppings(List toppings) { - this.toppings = toppings; - } - - void prepare() { - System.out.println("Prepare " + name); - System.out.println("Tossing dough..."); - System.out.println("Adding sauce..."); - System.out.println("Adding toppings: "); - for (String topping : toppings) { - System.out.println(" " + topping); - } - } - - void bake() { - System.out.println("Bake for 25 minutes at 350"); - } - - void cut() { - System.out.println("Cut the pizza into diagonal slices"); - } - - void box() { - System.out.println("Place pizza in official PizzaStore box"); - } - - public void setName(String name) { - this.name = name; - } - - public String toString() { - StringBuffer display = new StringBuffer(); - display.append("---- " + this.name + " ----\n"); - for (String topping : toppings) { - display.append(topping + "\n"); - } - return display.toString(); - } -} - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaBuilder.java deleted file mode 100644 index b09ace2..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaBuilder.java +++ /dev/null @@ -1,24 +0,0 @@ -package headfirst.designpatterns.builder.pizza; - -import java.util.ArrayList; -import java.util.List; - -public abstract class PizzaBuilder { - String name; - List toppings = new ArrayList(); - - public abstract PizzaBuilder addCheese(); - public abstract PizzaBuilder addSauce(); - public abstract PizzaBuilder addTomatoes(); - public abstract PizzaBuilder addGarlic(); - public abstract PizzaBuilder addOlives(); - public abstract PizzaBuilder addSpinach(); - public abstract PizzaBuilder addPepperoni(); - public abstract PizzaBuilder addSausage(); - public Pizza build() { - Pizza pizza = new Pizza(); - pizza.setName(this.name); - pizza.addToppings(toppings); - return pizza; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaDirector.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaDirector.java deleted file mode 100755 index 56ecb99..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/PizzaDirector.java +++ /dev/null @@ -1,56 +0,0 @@ -package headfirst.designpatterns.builder.pizza; - -public class PizzaDirector { - - // Fluent Interface pattern (return the builder each time so we can string the calls together) - // Builder pattern (we have two different builders so the "same construction process can create - // different representations"). - // Builder is a solution to the telescoping constructor anti-pattern, where we have multiple, - // complex constructor methods with various args for all various combinations of options - // in construction options. - - // in this example main() is the construct() method - public static void main(String[] args) { - // Could hand builders to PizzaStore which would take the customer's order, - // and call appropriate methods for each topping, then call the - // pizza methods to prep and return to the customer. - PizzaBuilder veggieBuilder = new VeggieLoversPizzaBuilder(); - // The PizzaDirector calls the methods in the correct order to - // build a veggiePizza. - Pizza veggie = veggieBuilder.addSauce().addCheese().addOlives().addTomatoes().addSausage().build(); - veggie.prepare(); - veggie.bake(); - veggie.cut(); - veggie.box(); - System.out.println(veggie); - - PizzaBuilder meatBuilder = new MeatLoversPizzaBuilder(); - // The PizzaDirector calls the methods in the correct order to build - // a meat lovers Pizza - Pizza meat = meatBuilder.addSauce().addTomatoes().addCheese().addSausage().addPepperoni().build(); - meat.prepare(); - meat.bake(); - meat.cut(); - meat.box(); - System.out.println(meat); - - // There is some difference of opinion about StringBuilder and whether it's using - // the Builder pattern or not. Some say yes, some say no. - // StringBuilder does not provide an abstract API with multiple subclasses for - // creating different representations (variations). So, strictly, no, it doesn't - // use the Builder Pattern, but rather the Fluent Interface Pattern. - StringBuilder sb = new StringBuilder(); - sb.append("\nTesting String Builder\n").append(veggie).insert(0, "===="); - System.out.println("Length of the String Builder: " + sb.length()); - System.out.println("Result of the String Builder: " + sb.toString()); - - String sb2 = new StringBuilder().append("\nTesting String Builder\n").append(meat).insert(0, "====").toString(); - System.out.println(sb2); - - // Builder has similarities to Abstract Factory. - // But difference is that Builder provides a step by step API for building a product; - // the client is responsible for calling the steps, and those can vary in order, etc. - // With Builder, the client must have more knowledge of the details of the product being built. - // Product implementations can be swapped for others; clients don't change because the use the abstract API. - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/VeggiePizzaBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/VeggiePizzaBuilder.java deleted file mode 100644 index fbbd03a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/pizza/VeggiePizzaBuilder.java +++ /dev/null @@ -1,41 +0,0 @@ -package headfirst.designpatterns.builder.pizza; - -public class VeggieLoversPizzaBuilder extends PizzaBuilder { - public VeggieLoversPizzaBuilder() { - this.name = "Veggie Lovers Pizza"; - } - public PizzaBuilder addCheese() { - // veggie lovers like parm - this.toppings.add("parmesan"); - return this; - } - public PizzaBuilder addSauce() { - this.toppings.add("sauce"); - return this; - } - public PizzaBuilder addTomatoes() { - this.toppings.add("chopped tomatoes"); - return this; - } - public PizzaBuilder addGarlic() { - this.toppings.add("garlic"); - return this; - } - public PizzaBuilder addOlives() { - this.toppings.add("green olives"); - return this; - } - public PizzaBuilder addSpinach() { - this.toppings.add("spinach"); - return this; - } - public PizzaBuilder addPepperoni() { - // never EVER add Pepperoni to veggie lovers pizza - return this; - } - public PizzaBuilder addSausage() { - // never EVER add Sausage to veggie lovers pizza - return this; - } - -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Accommodation.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Accommodation.java deleted file mode 100644 index 505b086..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Accommodation.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.builder.vacation; - -public abstract class Accommodation { - String name; - Reservation reservation = null; - - public void setReservation(Reservation r) { - this.reservation = r; - } - public Reservation getReservation() { - return this.reservation; - } - public abstract String getLocation(); - public String toString() { - StringBuffer display = new StringBuffer(); - display.append("You're staying at " + name); - if (this.reservation != null) { - display.append("\nYou have a reservation for arrival date: " + reservation.getArrivalDate() + - ", staying for " + reservation.getNights() + " nights"); - } - if (this.getLocation() != "") { - display.append(" in " + this.getLocation()); - } - display.append("\n"); - return display.toString(); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/CityVacationBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/CityVacationBuilder.java deleted file mode 100644 index 834ef60..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/CityVacationBuilder.java +++ /dev/null @@ -1,32 +0,0 @@ -package headfirst.designpatterns.builder.vacation; - -import java.time.LocalDate; - -public class CityVacationBuilder extends VacationBuilder { - public CityVacationBuilder() { - this.name = "City Vacation Builder"; - } - public VacationBuilder addAccommodation() { - this.accommodations.add(new Hotel()); - return this; - } - public VacationBuilder addAccommodation(String name) { - this.accommodations.add(new Hotel(name)); - return this; - } - public VacationBuilder addAccommodation(String name, int year, int month, int day, int nights, int location) { - Reservation reservation = new Reservation(); - reservation.setArrivalDate(year, month, day); - reservation.setNights(nights); - - Hotel hotel = new Hotel(name); - hotel.setReservation(reservation); - hotel.setRoomNumber(location); - this.accommodations.add(hotel); - return this; - } - public VacationBuilder addEvent(String event) { - this.events.add("See the " + event + " show"); - return this; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Hotel.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Hotel.java deleted file mode 100644 index 21f96ce..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Hotel.java +++ /dev/null @@ -1,21 +0,0 @@ -package headfirst.designpatterns.builder.vacation; - -public class Hotel extends Accommodation { - int roomNumber; - public Hotel() { - this.name = "Hotel"; - } - public Hotel(String name) { - this.name = name; - } - public void setRoomNumber(int n) { - this.roomNumber = n; - } - public int getRoomNumber() { - return this.roomNumber; - } - public String getLocation() { - if (roomNumber == 0) return ""; - else return "Room number " + this.roomNumber; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/OutdoorsVacationBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/OutdoorsVacationBuilder.java deleted file mode 100644 index 778b51f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/OutdoorsVacationBuilder.java +++ /dev/null @@ -1,32 +0,0 @@ -package headfirst.designpatterns.builder.vacation; - -import java.time.LocalDate; - -public class OutdoorsVacationBuilder extends VacationBuilder { - public OutdoorsVacationBuilder() { - this.name = "Outdoorsy Vacation Builder"; - } - public VacationBuilder addAccommodation() { - this.accommodations.add(new Tent()); - return this; - } - public VacationBuilder addAccommodation(String name) { - this.accommodations.add(new Tent(name)); - return this; - } - public VacationBuilder addAccommodation(String name, int year, int month, int day, int nights, int location) { - Reservation reservation = new Reservation(); - reservation.setArrivalDate(year, month, day); - reservation.setNights(nights); - - Tent tent = new Tent(name); - tent.setReservation(reservation); - tent.setSiteNumber(location); - this.accommodations.add(tent); - return this; - } - public VacationBuilder addEvent(String event) { - this.events.add("Hike: " + event); - return this; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Reservation.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Reservation.java deleted file mode 100644 index 67ae223..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Reservation.java +++ /dev/null @@ -1,21 +0,0 @@ -package headfirst.designpatterns.builder.vacation; - -import java.time.LocalDate; - -public class Reservation { - LocalDate arrivalDate; - int nights; - - public void setArrivalDate(int year, int month, int day) { - this.arrivalDate = LocalDate.of(year, month, day); - } - public LocalDate getArrivalDate() { - return this.arrivalDate; - } - public void setNights(int nights) { - this.nights = nights; - } - public int getNights() { - return this.nights; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Tent.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Tent.java deleted file mode 100644 index c9085cb..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Tent.java +++ /dev/null @@ -1,21 +0,0 @@ -package headfirst.designpatterns.builder.vacation; - -public class Tent extends Accommodation { - int siteNumber; - public Tent() { - this.name = "Tent"; - } - public Tent(String name) { - this.name = name; - } - public void setSiteNumber(int n) { - this.siteNumber = n; - } - public int getSiteNumber() { - return this.siteNumber; - } - public String getLocation() { - if (siteNumber == 0) return ""; - else return "Site number " + this.siteNumber; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Vacation.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Vacation.java deleted file mode 100755 index daac698..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/Vacation.java +++ /dev/null @@ -1,33 +0,0 @@ -package headfirst.designpatterns.builder.vacation; - -import java.util.*; - -public class Vacation { - String name; - List accommodations = new ArrayList(); - List events = new ArrayList(); - - public void setName(String name) { - this.name = name; - } - public void setAccommodations(List accommodations) { - this.accommodations = accommodations; - } - public void setEvents(List events) { - this.events = events; - } - public String toString() { - StringBuffer display = new StringBuffer(); - display.append("---- " + this.name + " ----\n"); - for (Accommodation a : accommodations) { - display.append(a); - } - for (String e : events) { - display.append(e + "\n"); - } - return display.toString(); - } -} - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationBuilder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationBuilder.java deleted file mode 100644 index ccaac0b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationBuilder.java +++ /dev/null @@ -1,24 +0,0 @@ -package headfirst.designpatterns.builder.vacation; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - -public abstract class VacationBuilder { - String name; - List accommodations = new ArrayList(); - List events = new ArrayList(); - - public abstract VacationBuilder addAccommodation(); - public abstract VacationBuilder addAccommodation(String name); - public abstract VacationBuilder addAccommodation(String name, int year, int month, int day, int nights, int location); - public abstract VacationBuilder addEvent(String event); - - public Vacation getVacation() { - Vacation vacation = new Vacation(); - vacation.setName(name); - vacation.setAccommodations(accommodations); - vacation.setEvents(events); - return vacation; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationDirector.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationDirector.java deleted file mode 100755 index 10971ec..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/builder/vacation/VacationDirector.java +++ /dev/null @@ -1,22 +0,0 @@ -package headfirst.designpatterns.builder.vacation; - -public class VacationDirector { - public static void main(String[] args) { - VacationBuilder outdoorsyVacationBuilder = new OutdoorsVacationBuilder(); - Vacation outdoorsyVacation = outdoorsyVacationBuilder - .addAccommodation("Two person tent", 2020, 7, 1, 5, 34) - .addEvent("Beach") - .addAccommodation("Two person tent") - .addEvent("Mountains") - .getVacation(); - System.out.println(outdoorsyVacation); - - VacationBuilder cityVacationBuilder = new CityVacationBuilder(); - Vacation cityVacation = cityVacationBuilder - .addAccommodation("Grand Facadian", 2020, 8, 1, 5, 0) - .addAccommodation("Hotel Commander", 2020, 8, 6, 2, 0) - .addEvent("Cirque du Soleil") - .getVacation(); - System.out.println(cityVacation); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/Collections.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/Collections.java deleted file mode 100755 index 9e6e73b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/Collections.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.collections; - -import java.util.*; - -public class Collections { - public static void main (String args[]) { - Vector v = new Vector(Arrays.asList(args)); - - System.out.println("Using enumeration with Vector"); - Enumeration enumeration = v.elements(); - while (enumeration.hasMoreElements()) { - System.out.println(enumeration.nextElement()); - } - - System.out.println("Using iterator with Vector"); - Iterator iterator = (Iterator) v.iterator(); - while (iterator.hasNext()) { - System.out.println(iterator.next()); - } - - System.out.println("Using for/in with array of Strings"); - for (String color : args) { - System.out.println(color); - } - - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Cafe.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Cafe.java deleted file mode 100755 index d565c09..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Cafe.java +++ /dev/null @@ -1,44 +0,0 @@ -package headfirst.designpatterns.collections.iterator; - -import java.util.*; - -public class Cafe { - - public static void main(String args[]) { - PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); - DinerMenu dinerMenu = new DinerMenu(); - - // with no iterators - System.out.println("\nMENU\n----\nBREAKFAST"); - ArrayList breakfastItems = pancakeHouseMenu.getMenuItems(); - for (int i = 0; i < breakfastItems.size(); i++) { - String menuItem = (String)breakfastItems.get(i); - System.out.println(menuItem); - } - - System.out.println("\nLUNCH"); - String[] lunchItems = dinerMenu.getMenuItems(); - - for (int i = 0; i < lunchItems.length; i++) { - String menuItem = lunchItems[i]; - System.out.println(menuItem); - } - - // with iterators - Iterator pancakeIterator = pancakeHouseMenu.createIterator(); - Iterator dinerIterator = dinerMenu.createIterator(); - - System.out.println("\nMENU (with iterators)\n----\nBREAKFAST"); - printMenu(pancakeIterator); - System.out.println("\nLUNCH"); - printMenu(dinerIterator); - } - - private static void printMenu(Iterator iterator) { - while (iterator.hasNext()) { - String menuItem = (String)iterator.next(); - System.out.println(menuItem); - - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenu.java deleted file mode 100755 index df8ac2c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenu.java +++ /dev/null @@ -1,41 +0,0 @@ -package headfirst.designpatterns.collections.iterator; - -public class DinerMenu implements Menu { - static final int MAX_ITEMS = 6; - int numberOfItems = 0; - String[] menuItems; - - public DinerMenu() { - menuItems = new String[MAX_ITEMS]; - - addItem("Vegetarian BLT"); - addItem("BLT"); - addItem("Soup of the day"); - addItem("Hotdog"); - addItem("Steamed Veggies and Brown Rice"); - addItem("Pasta"); - } - - public void addItem(String name) - { - if (numberOfItems >= MAX_ITEMS) { - System.err.println("Sorry, menu is full! Can't add item to menu"); - } else { - menuItems[numberOfItems] = name; - numberOfItems = numberOfItems + 1; - } - } - - public String[] getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return new DinerMenuIterator(menuItems); - } - - public String toString() { - return "Diner Menu"; - } - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenuIterator.java deleted file mode 100755 index 77824ac..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/DinerMenuIterator.java +++ /dev/null @@ -1,24 +0,0 @@ -package headfirst.designpatterns.collections.iterator; - -public class DinerMenuIterator implements Iterator { - String[] items; - int position = 0; - - public DinerMenuIterator(String[] items) { - this.items = items; - } - - public String next() { - String menuItem = items[position]; - position = position + 1; - return menuItem; - } - - public boolean hasNext() { - if (position >= items.length || items[position] == null) { - return false; - } else { - return true; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Iterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Iterator.java deleted file mode 100755 index 01ad3e4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Iterator.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.collections.iterator; - -public interface Iterator { - boolean hasNext(); - Object next(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Menu.java deleted file mode 100755 index 50e562f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/Menu.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.collections.iterator; - -public interface Menu { - public Iterator createIterator(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenu.java deleted file mode 100755 index 081a0f3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenu.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.collections.iterator; - -import java.util.ArrayList; - -public class PancakeHouseMenu implements Menu { - ArrayList menuItems; - - public PancakeHouseMenu() { - menuItems = new ArrayList(); - - addItem("K&B's Pancake Breakfast"); - addItem("Regular Pancake Breakfast"); - addItem("Blueberry Pancakes"); - addItem("Waffles"); - } - - public void addItem(String name) - { - menuItems.add(name); - } - - public ArrayList getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return new PancakeHouseMenuIterator(menuItems); - } - - public String toString() { - return "Pancake House Menu"; - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenuIterator.java deleted file mode 100755 index 5c65635..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator/PancakeHouseMenuIterator.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.collections.iterator; - -import java.util.ArrayList; - -public class PancakeHouseMenuIterator implements Iterator { - ArrayList items; - int position = 0; - - public PancakeHouseMenuIterator(ArrayList items) { - this.items = items; - } - - public String next() { - String menuItem = (String) items.get(position); - position = position + 1; - return menuItem; - } - - public boolean hasNext() { - if (position >= items.size()) { - return false; - } else { - return true; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Cafe.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Cafe.java deleted file mode 100755 index 6362b3b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Cafe.java +++ /dev/null @@ -1,28 +0,0 @@ -package headfirst.designpatterns.collections.iterator_builtin; - -import java.util.*; - -public class Cafe { - - public static void main(String args[]) { - PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); - DinerMenu dinerMenu = new DinerMenu(); - - // with iterators - Iterator pancakeIterator = pancakeHouseMenu.createIterator(); - Iterator dinerIterator = dinerMenu.createIterator(); - - System.out.println("\nMENU (with iterators)\n----\nBREAKFAST"); - printMenu(pancakeIterator); - System.out.println("\nLUNCH"); - printMenu(dinerIterator); - } - - private static void printMenu(Iterator iterator) { - while (iterator.hasNext()) { - String menuItem = (String)iterator.next(); - System.out.println(menuItem); - - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenu.java deleted file mode 100755 index bbd976c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenu.java +++ /dev/null @@ -1,43 +0,0 @@ -package headfirst.designpatterns.collections.iterator_builtin; - -import java.util.Iterator; - -public class DinerMenu implements Menu { - static final int MAX_ITEMS = 6; - int numberOfItems = 0; - String[] menuItems; - - public DinerMenu() { - menuItems = new String[MAX_ITEMS]; - - addItem("Vegetarian BLT"); - addItem("BLT"); - addItem("Soup of the day"); - addItem("Hotdog"); - addItem("Steamed Veggies and Brown Rice"); - addItem("Pasta"); - } - - public void addItem(String name) - { - if (numberOfItems >= MAX_ITEMS) { - System.err.println("Sorry, menu is full! Can't add item to menu"); - } else { - menuItems[numberOfItems] = name; - numberOfItems = numberOfItems + 1; - } - } - - public String[] getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return new DinerMenuIterator(menuItems); - } - - public String toString() { - return "Diner Menu"; - } - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenuIterator.java deleted file mode 100755 index 6103c55..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/DinerMenuIterator.java +++ /dev/null @@ -1,39 +0,0 @@ -package headfirst.designpatterns.collections.iterator_builtin; - -import java.util.Iterator; - -public class DinerMenuIterator implements Iterator { - String[] list; - int position = 0; - - public DinerMenuIterator(String[] list) { - this.list = list; - } - - public String next() { - String menuItem = list[position]; - position = position + 1; - return menuItem; - } - - public boolean hasNext() { - if (position >= list.length || list[position] == null) { - return false; - } else { - return true; - } - } - - public void remove() { - if (position <= 0) { - throw new IllegalStateException - ("You can't remove an item until you've done at least one next()"); - } - if (list[position-1] != null) { - for (int i = position-1; i < (list.length-1); i++) { - list[i] = list[i+1]; - } - list[list.length-1] = null; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Menu.java deleted file mode 100755 index 513e382..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/Menu.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.collections.iterator_builtin; - -import java.util.Iterator; - -public interface Menu { - public Iterator createIterator(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/PancakeHouseMenu.java deleted file mode 100755 index ae479ee..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/collections/iterator_builtin/PancakeHouseMenu.java +++ /dev/null @@ -1,36 +0,0 @@ -package headfirst.designpatterns.collections.iterator_builtin; - -import java.util.ArrayList; -import java.util.Iterator; - -public class PancakeHouseMenu implements Menu { - ArrayList menuItems; - - public PancakeHouseMenu() { - menuItems = new ArrayList(); - - addItem("K&B's Pancake Breakfast"); - addItem("Regular Pancake Breakfast"); - addItem("Blueberry Pancakes"); - addItem("Waffles"); - } - - public void addItem(String name) - { - menuItems.add(name); - } - - public ArrayList getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return menuItems.iterator(); - } - - public String toString() { - return "Pancake House Menu"; - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BPMObserver.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BPMObserver.java deleted file mode 100755 index 2b24276..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BPMObserver.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -public interface BPMObserver { - void updateBPM(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatBar.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatBar.java deleted file mode 100755 index d0eae65..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatBar.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -import javax.swing.*; - -public class BeatBar extends JProgressBar implements Runnable { - private static final long serialVersionUID = 2L; - JProgressBar progressBar; - Thread thread; - - public BeatBar() { - thread = new Thread(this); - setMaximum(100); - thread.start(); - } - - public void run() { - for(;;) { - int value = getValue(); - value = (int)(value * .75); - setValue(value); - repaint(); - try { - Thread.sleep(50); - } catch (Exception e) {}; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatController.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatController.java deleted file mode 100755 index bf48620..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatController.java +++ /dev/null @@ -1,42 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -public class BeatController implements ControllerInterface { - BeatModelInterface model; - DJView view; - - public BeatController(BeatModelInterface model) { - this.model = model; - view = new DJView(this, model); - view.createView(); - view.createControls(); - view.disableStopMenuItem(); - view.enableStartMenuItem(); - model.initialize(); - } - - public void start() { - model.on(); - view.disableStartMenuItem(); - view.enableStopMenuItem(); - } - - public void stop() { - model.off(); - view.disableStopMenuItem(); - view.enableStartMenuItem(); - } - - public void increaseBPM() { - int bpm = model.getBPM(); - model.setBPM(bpm + 1); - } - - public void decreaseBPM() { - int bpm = model.getBPM(); - model.setBPM(bpm - 1); - } - - public void setBPM(int bpm) { - model.setBPM(bpm); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModel.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModel.java deleted file mode 100755 index f2032d6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModel.java +++ /dev/null @@ -1,107 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -import java.util.*; -import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.Clip; -import java.io.*; -import javax.sound.sampled.Line; - -public class BeatModel implements BeatModelInterface, Runnable { - List beatObservers = new ArrayList(); - List bpmObservers = new ArrayList(); - int bpm = 90; - Thread thread; - boolean stop = false; - Clip clip; - - public void initialize() { - try { - File resource = new File("clap.wav"); - clip = (Clip) AudioSystem.getLine(new Line.Info(Clip.class)); - clip.open(AudioSystem.getAudioInputStream(resource)); - } - catch(Exception ex) { - System.out.println("Error: Can't load clip"); - System.out.println(ex); - } - } - - public void on() { - bpm = 90; - //notifyBPMObservers(); - thread = new Thread(this); - stop = false; - thread.start(); - } - - public void off() { - stopBeat(); - stop = true; - } - - public void run() { - while (!stop) { - playBeat(); - notifyBeatObservers(); - try { - Thread.sleep(60000/getBPM()); - } catch (Exception e) {} - } - } - - public void setBPM(int bpm) { - this.bpm = bpm; - notifyBPMObservers(); - } - - public int getBPM() { - return bpm; - } - - public void registerObserver(BeatObserver o) { - beatObservers.add(o); - } - - public void notifyBeatObservers() { - for(int i = 0; i < beatObservers.size(); i++) { - BeatObserver observer = (BeatObserver)beatObservers.get(i); - observer.updateBeat(); - } - } - - public void registerObserver(BPMObserver o) { - bpmObservers.add(o); - } - - public void notifyBPMObservers() { - for(int i = 0; i < bpmObservers.size(); i++) { - BPMObserver observer = (BPMObserver)bpmObservers.get(i); - observer.updateBPM(); - } - } - - public void removeObserver(BeatObserver o) { - int i = beatObservers.indexOf(o); - if (i >= 0) { - beatObservers.remove(i); - } - } - - public void removeObserver(BPMObserver o) { - int i = bpmObservers.indexOf(o); - if (i >= 0) { - bpmObservers.remove(i); - } - } - - public void playBeat() { - clip.setFramePosition(0); - clip.start(); - } - public void stopBeat() { - clip.setFramePosition(0); - clip.stop(); - } - -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModelInterface.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModelInterface.java deleted file mode 100755 index 72f194a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatModelInterface.java +++ /dev/null @@ -1,21 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -public interface BeatModelInterface { - void initialize(); - - void on(); - - void off(); - - void setBPM(int bpm); - - int getBPM(); - - void registerObserver(BeatObserver o); - - void removeObserver(BeatObserver o); - - void registerObserver(BPMObserver o); - - void removeObserver(BPMObserver o); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatObserver.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatObserver.java deleted file mode 100755 index 9571e80..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/BeatObserver.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -public interface BeatObserver { - void updateBeat(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/ControllerInterface.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/ControllerInterface.java deleted file mode 100755 index 30e97f6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/ControllerInterface.java +++ /dev/null @@ -1,9 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -public interface ControllerInterface { - void start(); - void stop(); - void increaseBPM(); - void decreaseBPM(); - void setBPM(int bpm); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJTestDrive.java deleted file mode 100755 index 7550c6d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJTestDrive.java +++ /dev/null @@ -1,9 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -public class DJTestDrive { - - public static void main (String[] args) { - BeatModelInterface model = new BeatModel(); - ControllerInterface controller = new BeatController(model); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJView.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJView.java deleted file mode 100755 index 2039169..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJView.java +++ /dev/null @@ -1,187 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; - -public class DJView implements ActionListener, BeatObserver, BPMObserver { - BeatModelInterface model; - ControllerInterface controller; - JFrame viewFrame; - JPanel viewPanel; - BeatBar beatBar; - JLabel bpmOutputLabel; - JFrame controlFrame; - JPanel controlPanel; - JLabel bpmLabel; - JTextField bpmTextField; - JButton setBPMButton; - JButton increaseBPMButton; - JButton decreaseBPMButton; - JMenuBar menuBar; - JMenu menu; - JMenuItem startMenuItem; - JMenuItem stopMenuItem; - - public DJView(ControllerInterface controller, BeatModelInterface model) { - this.controller = controller; - this.model = model; - model.registerObserver((BeatObserver)this); - model.registerObserver((BPMObserver)this); - } - - public void createView() { - // Create all Swing components here - viewPanel = new JPanel(new GridLayout(1, 2)); - viewFrame = new JFrame("View"); - viewFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - viewFrame.setSize(new Dimension(100, 80)); - bpmOutputLabel = new JLabel("offline", SwingConstants.CENTER); - beatBar = new BeatBar(); - beatBar.setValue(0); - JPanel bpmPanel = new JPanel(new GridLayout(2, 1)); - bpmPanel.add(beatBar); - bpmPanel.add(bpmOutputLabel); - viewPanel.add(bpmPanel); - viewFrame.getContentPane().add(viewPanel, BorderLayout.CENTER); - viewFrame.pack(); - viewFrame.setVisible(true); - } - - - public void createControls() { - // Create all Swing components here - JFrame.setDefaultLookAndFeelDecorated(true); - controlFrame = new JFrame("Control"); - controlFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - controlFrame.setSize(new Dimension(100, 80)); - - controlPanel = new JPanel(new GridLayout(1, 2)); - - menuBar = new JMenuBar(); - menu = new JMenu("DJ Control"); - startMenuItem = new JMenuItem("Start"); - menu.add(startMenuItem); - startMenuItem.addActionListener((event) -> controller.start()); - // was.... - /* - startMenuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent event) { - controller.start(); - } - }); - */ - stopMenuItem = new JMenuItem("Stop"); - menu.add(stopMenuItem); - stopMenuItem.addActionListener((event) -> controller.stop()); - // was... - /* - stopMenuItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent event) { - controller.stop(); - } - }); - */ - JMenuItem exit = new JMenuItem("Quit"); - exit.addActionListener((event) -> System.exit(0)); - // was... - /* - exit.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent event) { - System.exit(0); - } - }); - */ - - menu.add(exit); - menuBar.add(menu); - controlFrame.setJMenuBar(menuBar); - - bpmTextField = new JTextField(2); - bpmLabel = new JLabel("Enter BPM:", SwingConstants.RIGHT); - setBPMButton = new JButton("Set"); - setBPMButton.setSize(new Dimension(10,40)); - increaseBPMButton = new JButton(">>"); - decreaseBPMButton = new JButton("<<"); - setBPMButton.addActionListener(this); - increaseBPMButton.addActionListener(this); - decreaseBPMButton.addActionListener(this); - - JPanel buttonPanel = new JPanel(new GridLayout(1, 2)); - - buttonPanel.add(decreaseBPMButton); - buttonPanel.add(increaseBPMButton); - - JPanel enterPanel = new JPanel(new GridLayout(1, 2)); - enterPanel.add(bpmLabel); - enterPanel.add(bpmTextField); - JPanel insideControlPanel = new JPanel(new GridLayout(3, 1)); - insideControlPanel.add(enterPanel); - insideControlPanel.add(setBPMButton); - insideControlPanel.add(buttonPanel); - controlPanel.add(insideControlPanel); - - bpmLabel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); - bpmOutputLabel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); - - controlFrame.getRootPane().setDefaultButton(setBPMButton); - controlFrame.getContentPane().add(controlPanel, BorderLayout.CENTER); - - controlFrame.pack(); - controlFrame.setVisible(true); - } - - public void enableStopMenuItem() { - stopMenuItem.setEnabled(true); - } - - public void disableStopMenuItem() { - stopMenuItem.setEnabled(false); - } - - public void enableStartMenuItem() { - startMenuItem.setEnabled(true); - } - - public void disableStartMenuItem() { - startMenuItem.setEnabled(false); - } - - public void actionPerformed(ActionEvent event) { - if (event.getSource() == setBPMButton) { - int bpm = 90; - String bpmText = bpmTextField.getText(); - if (bpmText == null || bpmText.contentEquals("")) { - bpm = 90; - } else { - bpm = Integer.parseInt(bpmTextField.getText()); - } - controller.setBPM(bpm); - } else if (event.getSource() == increaseBPMButton) { - controller.increaseBPM(); - } else if (event.getSource() == decreaseBPMButton) { - controller.decreaseBPM(); - } - } - - public void updateBPM() { - if (model != null) { - int bpm = model.getBPM(); - if (bpm == 0) { - if (bpmOutputLabel != null) { - bpmOutputLabel.setText("offline"); - } - } else { - if (bpmOutputLabel != null) { - bpmOutputLabel.setText("Current BPM: " + model.getBPM()); - } - } - } - } - - public void updateBeat() { - if (beatBar != null) { - beatBar.setValue(100); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpHandler.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpHandler.java deleted file mode 100644 index 316f1c6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpHandler.java +++ /dev/null @@ -1,101 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import com.sun.net.httpserver.*; - -// Controller for the DJ Web View -// Takes actions from the view and translates them to actions on the model -// View has no interaction to the model -// Using the exact same model, BeatModel, as we used with the DJView and BeatContoller -public class DJViewHttpHandler implements HttpHandler { - BeatModel beatModel; - Map queryPairs; - - public DJViewHttpHandler(BeatModel beatModel) { - this.beatModel = beatModel; - } - public void handle(HttpExchange httpExchange) throws IOException { - String uri = httpExchange.getRequestURI().toString(); - System.out.println("URI: " + uri); - String[] params = uri.split("\\?"); - String queryStrings = ""; - if (params.length > 1) { - queryStrings = params[1]; - } - - boolean noAction = true; - try { - queryPairs = this.splitQuery(queryStrings); - noAction = false; - } catch (Exception e) { - System.out.println("Error splitting query: " + e.getMessage()); - } - System.out.println("Query pairs: " + queryPairs); - - if (!noAction) { - String bpm = this.getParameter("bpm"); - if (bpm == null) { - bpm = beatModel.getBPM() + ""; - } - String set = this.getParameter("set"); - if (set != null) { - int bpmNumber = 90; - bpmNumber = Integer.parseInt(bpm); - beatModel.setBPM(bpmNumber); - } - String decrease = this.getParameter("decrease"); - if (decrease != null) { - beatModel.setBPM(beatModel.getBPM() - 1); - } - String increase = this.getParameter("increase"); - if (increase != null) { - beatModel.setBPM(beatModel.getBPM() + 1); - } - String on = this.getParameter("on"); - if (on != null) { - beatModel.on(); - } - String off = this.getParameter("off"); - if (off != null) { - beatModel.off(); - } - } - - // allow access from web server other than 8080 - Headers headers = httpExchange.getResponseHeaders(); - headers.add("Access-Control-Allow-Origin","*"); - - OutputStream outputStream = httpExchange.getResponseBody(); - StringBuilder responseStringBuilder = new StringBuilder(); - responseStringBuilder.append(beatModel.getBPM()); - System.out.println("BPM: " + beatModel.getBPM()); - - String responseString = responseStringBuilder.toString(); - httpExchange.sendResponseHeaders(200, responseString.length()); - outputStream.write(responseString.getBytes()); - outputStream.flush(); - outputStream.close(); - } - - Map splitQuery(String query) throws UnsupportedEncodingException { - Map query_pairs = new HashMap(); - String[] pairs = query.split("&"); - for (String pair : pairs) { - int idx = pair.indexOf("="); - query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); - } - return query_pairs; - } - - // bpm, set, decrease, increase, on, off - String getParameter(String param) { - return queryPairs.get(param); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpServer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpServer.java deleted file mode 100755 index c97bd25..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewHttpServer.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -import com.sun.net.httpserver.HttpServer; -import java.net.InetSocketAddress; - -public class DJViewHttpServer { - - public static void main(String[] args) { - - try { - System.out.println("DJView Http Server Running"); - - BeatModel beatModel = new BeatModel(); - beatModel.initialize(); - // create a server on port 8080, with a backlog queue allowed of size 0 (ie, no queue) - // most people will already have a web server running on 80, so we're using 8080 - HttpServer server = HttpServer.create(new InetSocketAddress("localhost", 8080), 0); - server.createContext("/djview", new DJViewHttpHandler(beatModel)); - server.start(); - System.out.println("DJView Server is running at http://localhost:8080/djview"); - - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewServlet.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewServlet.java deleted file mode 100644 index 91c3791..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/DJViewServlet.java +++ /dev/null @@ -1,77 +0,0 @@ -// This code is from Head First Design Patterns first edition -// and has been removed from the second edition. -// -// Left here for those with the first edition, but no guarantees it -// will work. -// -// 9/15/2020 -// -package headfirst.designpatterns.combined.djview; - -import javax.servlet.*; -import javax.servlet.http.*; -import java.io.*; - -public class DJViewServlet extends HttpServlet { - - private static final long serialVersionUID = 2L; - - public void init() throws ServletException { - BeatModel beatModel = new BeatModel(); - beatModel.initialize(); - getServletContext().setAttribute("beatModel", beatModel); - } - - public void doGet(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - doPost(request, response); - } - - public void doPost(HttpServletRequest request, - HttpServletResponse response) - throws IOException, ServletException - { - BeatModel beatModel = - (BeatModel)getServletContext().getAttribute("beatModel"); - - String bpm = request.getParameter("bpm"); - if (bpm == null) { - bpm = beatModel.getBPM() + ""; - } - - String set = request.getParameter("set"); - if (set != null) { - int bpmNumber = 90; - bpmNumber = Integer.parseInt(bpm); - beatModel.setBPM(bpmNumber); - } - - String decrease = request.getParameter("decrease"); - if (decrease != null) { - beatModel.setBPM(beatModel.getBPM() - 1); - } - String increase = request.getParameter("increase"); - if (increase != null) { - beatModel.setBPM(beatModel.getBPM() + 1); - } - String on = request.getParameter("on"); - if (on != null) { - beatModel.on(); - } - String off = request.getParameter("off"); - if (off != null) { - beatModel.off(); - } - - request.setAttribute("beatModel", beatModel); - - RequestDispatcher dispatcher = - request.getRequestDispatcher("/djview.jsp"); - dispatcher.forward(request, response); - - } - - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartAdapter.java deleted file mode 100755 index 3333edc..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartAdapter.java +++ /dev/null @@ -1,37 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -public class HeartAdapter implements BeatModelInterface { - HeartModelInterface heart; - - public HeartAdapter(HeartModelInterface heart) { - this.heart = heart; - } - - public void initialize() {} - - public void on() {} - - public void off() {} - - public int getBPM() { - return heart.getHeartRate(); - } - - public void setBPM(int bpm) {} - - public void registerObserver(BeatObserver o) { - heart.registerObserver(o); - } - - public void removeObserver(BeatObserver o) { - heart.removeObserver(o); - } - - public void registerObserver(BPMObserver o) { - heart.registerObserver(o); - } - - public void removeObserver(BPMObserver o) { - heart.removeObserver(o); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartController.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartController.java deleted file mode 100755 index 97a855c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartController.java +++ /dev/null @@ -1,28 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -public class HeartController implements ControllerInterface { - HeartModelInterface model; - DJView view; - - public HeartController(HeartModelInterface model) { - this.model = model; - view = new DJView(this, new HeartAdapter(model)); - view.createView(); - view.createControls(); - view.disableStopMenuItem(); - view.disableStartMenuItem(); - } - - public void start() {} - - public void stop() {} - - public void increaseBPM() {} - - public void decreaseBPM() {} - - public void setBPM(int bpm) {} -} - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModel.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModel.java deleted file mode 100755 index 9791b83..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModel.java +++ /dev/null @@ -1,79 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -import java.util.*; - -public class HeartModel implements HeartModelInterface, Runnable { - ArrayList beatObservers = new ArrayList(); - ArrayList bpmObservers = new ArrayList(); - int time = 1000; - int bpm = 90; - Random random = new Random(System.currentTimeMillis()); - Thread thread; - - public HeartModel() { - thread = new Thread(this); - thread.start(); - } - - public void run() { - int lastrate = -1; - - for(;;) { - int change = random.nextInt(10); - if (random.nextInt(2) == 0) { - change = 0 - change; - } - int rate = 60000/(time + change); - if (rate < 120 && rate > 50) { - time += change; - notifyBeatObservers(); - if (rate != lastrate) { - lastrate = rate; - notifyBPMObservers(); - } - } - try { - Thread.sleep(time); - } catch (Exception e) {} - } - } - public int getHeartRate() { - return 60000/time; - } - - public void registerObserver(BeatObserver o) { - beatObservers.add(o); - } - - public void removeObserver(BeatObserver o) { - int i = beatObservers.indexOf(o); - if (i >= 0) { - beatObservers.remove(i); - } - } - - public void notifyBeatObservers() { - for(int i = 0; i < beatObservers.size(); i++) { - BeatObserver observer = (BeatObserver)beatObservers.get(i); - observer.updateBeat(); - } - } - - public void registerObserver(BPMObserver o) { - bpmObservers.add(o); - } - - public void removeObserver(BPMObserver o) { - int i = bpmObservers.indexOf(o); - if (i >= 0) { - bpmObservers.remove(i); - } - } - - public void notifyBPMObservers() { - for(int i = 0; i < bpmObservers.size(); i++) { - BPMObserver observer = (BPMObserver)bpmObservers.get(i); - observer.updateBPM(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModelInterface.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModelInterface.java deleted file mode 100755 index 65d76dc..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartModelInterface.java +++ /dev/null @@ -1,9 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -public interface HeartModelInterface { - int getHeartRate(); - void registerObserver(BeatObserver o); - void removeObserver(BeatObserver o); - void registerObserver(BPMObserver o); - void removeObserver(BPMObserver o); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartTestDrive.java deleted file mode 100755 index b3099d1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/HeartTestDrive.java +++ /dev/null @@ -1,9 +0,0 @@ -package headfirst.designpatterns.combined.djview; - -public class HeartTestDrive { - - public static void main (String[] args) { - HeartModel heartModel = new HeartModel(); - ControllerInterface model = new HeartController(heartModel); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/README.md b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/README.md deleted file mode 100644 index 32224a8..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# The Servlet code has been removed from -# Head First Design Patterns 2nd edition -# -# No guarantees that it will work. -# -# 9/15/2020 -# -# To run the DJView Servlet on localhost - -1. Download Tomcat: http://tomcat.apache.org/index.html -Place the folder (apache-tomcat-VERSION) in a folder somewhere. -The instructions below refer to this folder as the "tomcat" folder. - -2. Build the code and note where the binary files are generated (in the -bin/ directory in your project directory). - -3. In Eclipse, add the servlet and jsp jars: - * lib/servlet-api-3.1.jar - * lib/jsp/javax.servlet.jsp-2.3.2.jar - -4. From tomcat folder, run: - * bin/startup.sh - -5. Navigate to localhost:8080 in your browser; if you see a page, Tomcat is running! - -6. Under tomcat/webapps make a new folder, djview/ - -7. Copy the jsp/index.html file and the jsp/djview.jsp file there. - -8. Make a new folder in the tomcat/webapps/djview/ folder named "WEB-INF". - -9. Place a copy of the jsp/web.xml file there. This file maps the Servlet class to a URL -for the form post/get in index.html - -10. Create a set of folders that create the path: -tomcat/webapps/djview/WEB-INF/classes/headfirst/designpatterns/combined/djview/ - -11. Copy the following classes from headfirst/designpatterns/combined/djview/ to the -tomcat/webapps/djview/WEB-INF/classes/headfirst/designpatterns/combined/djview/ -folder: - * BeatModel.class - * BeatModelInterface.class - * BeatController.class - * BeatObserver.class - * BPMObserver.class - * ControllerInterface.class - * DJViewServlet.class - -12. Restart tomcat from the top tomcat folder: - * bin/shutdown.sh - * bin/startup.sh - -13. Navigate to localhost:8080/djview/djview.jsp - - -NEW -Don't need tomcat. -Run DJViewHttpServer, this will run the server on port 8080. -CORS disabled so requests can come from different servers. -Client: -run HFDP/dj/dj.html from local web server (port 80 usually). - - - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/WEB-INF/web.xml b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/WEB-INF/web.xml deleted file mode 100644 index 008a4b4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/WEB-INF/web.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - DJView Servlet Application - - DJView Servlet Application - - - DJViewServlet - headfirst.designpatterns.combined.djview.DJViewServlet - - - - DJViewServlet - /servlet/DJViewServlet - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/djview.jsp b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/djview.jsp deleted file mode 100644 index be85a5b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/djview.jsp +++ /dev/null @@ -1,29 +0,0 @@ - - - - -DJ View - - - -

DJ View

-Beats per minutes = -
-
-
- -
-BPM: -  - -
- -
- -
-
- - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/index.html b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/index.html deleted file mode 100644 index 497b542..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combined/djview/jsp/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - DJView Web Application - - - DJView - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DecoyDuck.java deleted file mode 100755 index 982ea2e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DecoyDuck.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.adapter; - -public class DecoyDuck implements Quackable { - public void quack() { - System.out.println("<< Silence >>"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckCall.java deleted file mode 100755 index 6e8f3b5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckCall.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.adapter; - -public class DuckCall implements Quackable { - public void quack() { - System.out.println("Kwak"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckSimulator.java deleted file mode 100755 index cefaa8f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/DuckSimulator.java +++ /dev/null @@ -1,28 +0,0 @@ -package headfirst.designpatterns.combining.adapter; - -public class DuckSimulator { - public static void main(String[] args) { - DuckSimulator simulator = new DuckSimulator(); - simulator.simulate(); - } - - void simulate() { - Quackable mallardDuck = new MallardDuck(); - Quackable redheadDuck = new RedheadDuck(); - Quackable duckCall = new DuckCall(); - Quackable rubberDuck = new RubberDuck(); - Quackable gooseDuck = new GooseAdapter(new Goose()); - - System.out.println("\nDuck Simulator: With Goose Adapter"); - - simulate(mallardDuck); - simulate(redheadDuck); - simulate(duckCall); - simulate(rubberDuck); - simulate(gooseDuck); - } - - void simulate(Quackable duck) { - duck.quack(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Goose.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Goose.java deleted file mode 100755 index 1ba551f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Goose.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.adapter; - -public class Goose { - public void honk() { - System.out.println("Honk"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/GooseAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/GooseAdapter.java deleted file mode 100755 index 6e8914b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/GooseAdapter.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.combining.adapter; - -public class GooseAdapter implements Quackable { - Goose goose; - - public GooseAdapter(Goose goose) { - this.goose = goose; - } - - public void quack() { - goose.honk(); - } - - public String toString() { - return "Goose pretending to be a Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/MallardDuck.java deleted file mode 100755 index b61416e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/MallardDuck.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.adapter; - -public class MallardDuck implements Quackable { - public void quack() { - System.out.println("Quack"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Quackable.java deleted file mode 100755 index 22ffb80..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/Quackable.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.combining.adapter; - -public interface Quackable { - public void quack(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RedheadDuck.java deleted file mode 100755 index 772bf33..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RedheadDuck.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.adapter; - -public class RedheadDuck implements Quackable { - public void quack() { - System.out.println("Quack"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RubberDuck.java deleted file mode 100755 index fe36fcc..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/adapter/RubberDuck.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.adapter; - -public class RubberDuck implements Quackable { - public void quack() { - System.out.println("Squeak"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/AbstractDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/AbstractDuckFactory.java deleted file mode 100755 index ae23a25..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/AbstractDuckFactory.java +++ /dev/null @@ -1,9 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public abstract class AbstractDuckFactory { - - public abstract Quackable createMallardDuck(); - public abstract Quackable createRedheadDuck(); - public abstract Quackable createDuckCall(); - public abstract Quackable createRubberDuck(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/CountingDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/CountingDuckFactory.java deleted file mode 100755 index bb1db47..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/CountingDuckFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class CountingDuckFactory extends AbstractDuckFactory { - - public Quackable createMallardDuck() { - return new QuackCounter(new MallardDuck()); - } - - public Quackable createRedheadDuck() { - return new QuackCounter(new RedheadDuck()); - } - - public Quackable createDuckCall() { - return new QuackCounter(new DuckCall()); - } - - public Quackable createRubberDuck() { - return new QuackCounter(new RubberDuck()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DecoyDuck.java deleted file mode 100755 index 4e3b94e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DecoyDuck.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class DecoyDuck implements Quackable { - - public void quack() { - System.out.println("<< Silence >>"); - } - - public String toString() { - return "Decoy Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckCall.java deleted file mode 100755 index 306a99b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckCall.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class DuckCall implements Quackable { - - public void quack() { - System.out.println("Kwak"); - } - - public String toString() { - return "Duck Call"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckFactory.java deleted file mode 100755 index 3858271..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class DuckFactory extends AbstractDuckFactory { - - public Quackable createMallardDuck() { - return new MallardDuck(); - } - - public Quackable createRedheadDuck() { - return new RedheadDuck(); - } - - public Quackable createDuckCall() { - return new DuckCall(); - } - - public Quackable createRubberDuck() { - return new RubberDuck(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckSimulator.java deleted file mode 100755 index b619aff..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/DuckSimulator.java +++ /dev/null @@ -1,55 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class DuckSimulator { - - public static void main(String[] args) { - DuckSimulator simulator = new DuckSimulator(); - AbstractDuckFactory duckFactory = new CountingDuckFactory(); - - simulator.simulate(duckFactory); - } - - void simulate(AbstractDuckFactory duckFactory) { - Quackable redheadDuck = duckFactory.createRedheadDuck(); - Quackable duckCall = duckFactory.createDuckCall(); - Quackable rubberDuck = duckFactory.createRubberDuck(); - Quackable gooseDuck = new GooseAdapter(new Goose()); - - System.out.println("\nDuck Simulator: With Composite - Flocks"); - - Flock flockOfDucks = new Flock(); - - flockOfDucks.add(redheadDuck); - flockOfDucks.add(duckCall); - flockOfDucks.add(rubberDuck); - flockOfDucks.add(gooseDuck); - - Flock flockOfMallards = new Flock(); - - Quackable mallardOne = duckFactory.createMallardDuck(); - Quackable mallardTwo = duckFactory.createMallardDuck(); - Quackable mallardThree = duckFactory.createMallardDuck(); - Quackable mallardFour = duckFactory.createMallardDuck(); - - flockOfMallards.add(mallardOne); - flockOfMallards.add(mallardTwo); - flockOfMallards.add(mallardThree); - flockOfMallards.add(mallardFour); - - flockOfDucks.add(flockOfMallards); - - System.out.println("\nDuck Simulator: Whole Flock Simulation"); - simulate(flockOfDucks); - - System.out.println("\nDuck Simulator: Mallard Flock Simulation"); - simulate(flockOfMallards); - - System.out.println("\nThe ducks quacked " + - QuackCounter.getQuacks() + - " times"); - } - - void simulate(Quackable duck) { - duck.quack(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Flock.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Flock.java deleted file mode 100755 index 3c5ad65..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Flock.java +++ /dev/null @@ -1,24 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -import java.util.Iterator; -import java.util.ArrayList; - -public class Flock implements Quackable { - ArrayList quackers = new ArrayList(); - - public void add(Quackable quacker) { - quackers.add(quacker); - } - - public void quack() { - Iterator iterator = quackers.iterator(); - while (iterator.hasNext()) { - Quackable quacker = iterator.next(); - quacker.quack(); - } - } - - public String toString() { - return "Flock of Quackers"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Goose.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Goose.java deleted file mode 100755 index f2d4a11..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Goose.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class Goose { - public void honk() { - System.out.println("Honk"); - } - - public String toString() { - return "Goose"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/GooseAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/GooseAdapter.java deleted file mode 100755 index 9cb0fe6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/GooseAdapter.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class GooseAdapter implements Quackable { - Goose goose; - - public GooseAdapter(Goose goose) { - this.goose = goose; - } - - public void quack() { - goose.honk(); - } - - public String toString() { - return "Goose pretending to be a Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/MallardDuck.java deleted file mode 100755 index 6145e6b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/MallardDuck.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class MallardDuck implements Quackable { - - public void quack() { - System.out.println("Quack"); - } - - public String toString() { - return "Mallard Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/QuackCounter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/QuackCounter.java deleted file mode 100755 index 0f1e7e8..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/QuackCounter.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class QuackCounter implements Quackable { - Quackable duck; - static int numberOfQuacks; - - public QuackCounter(Quackable duck) { - this.duck = duck; - } - - public void quack() { - duck.quack(); - numberOfQuacks++; - } - - public static int getQuacks() { - return numberOfQuacks; - } - - public String toString() { - return duck.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Quackable.java deleted file mode 100755 index 62392fb..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/Quackable.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public interface Quackable { - public void quack(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RedheadDuck.java deleted file mode 100755 index 4bd5ace..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RedheadDuck.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class RedheadDuck implements Quackable { - public void quack() { - System.out.println("Quack"); - } - - public String toString() { - return "Redhead Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RubberDuck.java deleted file mode 100755 index 929260b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/composite/RubberDuck.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.composite; - -public class RubberDuck implements Quackable { - - public void quack() { - System.out.println("Squeak"); - } - - public String toString() { - return "Rubber Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DecoyDuck.java deleted file mode 100755 index 4306404..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DecoyDuck.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.decorator; - -public class DecoyDuck implements Quackable { - - public void quack() { - System.out.println("<< Silence >>"); - } - - public String toString() { - return "Decoy Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckCall.java deleted file mode 100755 index 54fedc3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckCall.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.decorator; - -public class DuckCall implements Quackable { - - public void quack() { - System.out.println("Kwak"); - } - - public String toString() { - return "Duck Call"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckSimulator.java deleted file mode 100755 index feeada0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/DuckSimulator.java +++ /dev/null @@ -1,31 +0,0 @@ -package headfirst.designpatterns.combining.decorator; - -public class DuckSimulator { - public static void main(String[] args) { - DuckSimulator simulator = new DuckSimulator(); - simulator.simulate(); - } - - void simulate() { - Quackable mallardDuck = new QuackCounter(new MallardDuck()); - Quackable redheadDuck = new QuackCounter(new RedheadDuck()); - Quackable duckCall = new QuackCounter(new DuckCall()); - Quackable rubberDuck = new QuackCounter(new RubberDuck()); - Quackable gooseDuck = new GooseAdapter(new Goose()); - - System.out.println("\nDuck Simulator: With Decorator"); - - simulate(mallardDuck); - simulate(redheadDuck); - simulate(duckCall); - simulate(rubberDuck); - simulate(gooseDuck); - - System.out.println("The ducks quacked " + - QuackCounter.getQuacks() + " times"); - } - - void simulate(Quackable duck) { - duck.quack(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Goose.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Goose.java deleted file mode 100755 index 4d3f39d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Goose.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.combining.decorator; - -public class Goose { - public void honk() { - System.out.println("Honk"); - } - - public String toString() { - return "Goose"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/GooseAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/GooseAdapter.java deleted file mode 100755 index a616ce8..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/GooseAdapter.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.combining.decorator; - -public class GooseAdapter implements Quackable { - Goose goose; - - public GooseAdapter(Goose goose) { - this.goose = goose; - } - - public void quack() { - goose.honk(); - } - - public String toString() { - return "Goose pretending to be a Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/MallardDuck.java deleted file mode 100755 index 74ba629..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/MallardDuck.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.decorator; - -public class MallardDuck implements Quackable { - - public void quack() { - System.out.println("Quack"); - } - - public String toString() { - return "Mallard Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/QuackCounter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/QuackCounter.java deleted file mode 100755 index 0ebf299..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/QuackCounter.java +++ /dev/null @@ -1,22 +0,0 @@ -package headfirst.designpatterns.combining.decorator; - -public class QuackCounter implements Quackable { - Quackable duck; - static int numberOfQuacks; - - public QuackCounter (Quackable duck) { - this.duck = duck; - } - - public void quack() { - duck.quack(); - numberOfQuacks++; - } - - public static int getQuacks() { - return numberOfQuacks; - } - public String toString() { - return duck.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Quackable.java deleted file mode 100755 index 84e4a19..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/Quackable.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.combining.decorator; - -public interface Quackable { - public void quack(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RedheadDuck.java deleted file mode 100755 index 5111b51..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RedheadDuck.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.decorator; - -public class RedheadDuck implements Quackable { - public void quack() { - System.out.println("Quack"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RubberDuck.java deleted file mode 100755 index e564f88..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/decorator/RubberDuck.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.decorator; - -public class RubberDuck implements Quackable { - - public void quack() { - System.out.println("Squeak"); - } - - public String toString() { - return "Rubber Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DecoyDuck.java deleted file mode 100755 index 444d02a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DecoyDuck.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.ducks; - -public class DecoyDuck implements Quackable { - public void quack() { - System.out.println("<< Silence >>"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckCall.java deleted file mode 100755 index ff62541..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckCall.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.ducks; - -public class DuckCall implements Quackable { - public void quack() { - System.out.println("Kwak"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckSimulator.java deleted file mode 100755 index eebe612..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/DuckSimulator.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.combining.ducks; - -public class DuckSimulator { - public static void main(String[] args) { - DuckSimulator simulator = new DuckSimulator(); - simulator.simulate(); - } - - void simulate() { - Quackable mallardDuck = new MallardDuck(); - Quackable redheadDuck = new RedheadDuck(); - Quackable duckCall = new DuckCall(); - Quackable rubberDuck = new RubberDuck(); - - System.out.println("\nDuck Simulator"); - - simulate(mallardDuck); - simulate(redheadDuck); - simulate(duckCall); - simulate(rubberDuck); - } - - void simulate(Quackable duck) { - duck.quack(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/MallardDuck.java deleted file mode 100755 index 35917cf..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/MallardDuck.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.ducks; - -public class MallardDuck implements Quackable { - public void quack() { - System.out.println("Quack"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/Quackable.java deleted file mode 100755 index 7b57f13..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/Quackable.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.combining.ducks; - -public interface Quackable { - public void quack(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RedheadDuck.java deleted file mode 100755 index 2c73bca..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RedheadDuck.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.ducks; - -public class RedheadDuck implements Quackable { - public void quack() { - System.out.println("Quack"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RubberDuck.java deleted file mode 100755 index 12cd62d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/ducks/RubberDuck.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.ducks; - -public class RubberDuck implements Quackable { - public void quack() { - System.out.println("Squeak"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/AbstractDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/AbstractDuckFactory.java deleted file mode 100755 index 207b3fa..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/AbstractDuckFactory.java +++ /dev/null @@ -1,9 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public abstract class AbstractDuckFactory { - - public abstract Quackable createMallardDuck(); - public abstract Quackable createRedheadDuck(); - public abstract Quackable createDuckCall(); - public abstract Quackable createRubberDuck(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/CountingDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/CountingDuckFactory.java deleted file mode 100755 index 31793d3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/CountingDuckFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class CountingDuckFactory extends AbstractDuckFactory { - - public Quackable createMallardDuck() { - return new QuackCounter(new MallardDuck()); - } - - public Quackable createRedheadDuck() { - return new QuackCounter(new RedheadDuck()); - } - - public Quackable createDuckCall() { - return new QuackCounter(new DuckCall()); - } - - public Quackable createRubberDuck() { - return new QuackCounter(new RubberDuck()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DecoyDuck.java deleted file mode 100755 index 8ab970f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DecoyDuck.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class DecoyDuck implements Quackable { - - public void quack() { - System.out.println("<< Silence >>"); - } - - public String toString() { - return "Decoy Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckCall.java deleted file mode 100755 index 3632024..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckCall.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class DuckCall implements Quackable { - - public void quack() { - System.out.println("Kwak"); - } - - public String toString() { - return "Duck Call"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckFactory.java deleted file mode 100755 index e830807..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class DuckFactory extends AbstractDuckFactory { - - public Quackable createMallardDuck() { - return new MallardDuck(); - } - - public Quackable createRedheadDuck() { - return new RedheadDuck(); - } - - public Quackable createDuckCall() { - return new DuckCall(); - } - - public Quackable createRubberDuck() { - return new RubberDuck(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckSimulator.java deleted file mode 100755 index 5522d8f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/DuckSimulator.java +++ /dev/null @@ -1,34 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class DuckSimulator { - public static void main(String[] args) { - DuckSimulator simulator = new DuckSimulator(); - AbstractDuckFactory duckFactory = new CountingDuckFactory(); - - simulator.simulate(duckFactory); - } - - void simulate(AbstractDuckFactory duckFactory) { - Quackable mallardDuck = duckFactory.createMallardDuck(); - Quackable redheadDuck = duckFactory.createRedheadDuck(); - Quackable duckCall = duckFactory.createDuckCall(); - Quackable rubberDuck = duckFactory.createRubberDuck(); - Quackable gooseDuck = new GooseAdapter(new Goose()); - - System.out.println("\nDuck Simulator: With Abstract Factory"); - - simulate(mallardDuck); - simulate(redheadDuck); - simulate(duckCall); - simulate(rubberDuck); - simulate(gooseDuck); - - System.out.println("The ducks quacked " + - QuackCounter.getQuacks() + - " times"); - } - - void simulate(Quackable duck) { - duck.quack(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Goose.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Goose.java deleted file mode 100755 index 6c35145..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Goose.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class Goose { - public void honk() { - System.out.println("Honk"); - } - - public String toString() { - return "Goose"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/GooseAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/GooseAdapter.java deleted file mode 100755 index 915155c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/GooseAdapter.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class GooseAdapter implements Quackable { - Goose goose; - - public GooseAdapter(Goose goose) { - this.goose = goose; - } - - public void quack() { - goose.honk(); - } - - public String toString() { - return "Goose pretending to be a Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/MallardDuck.java deleted file mode 100755 index b91b33c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/MallardDuck.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class MallardDuck implements Quackable { - - public void quack() { - System.out.println("Quack"); - } - - public String toString() { - return "Mallard Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/QuackCounter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/QuackCounter.java deleted file mode 100755 index 6a73c30..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/QuackCounter.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class QuackCounter implements Quackable { - Quackable duck; - static int numberOfQuacks; - - public QuackCounter(Quackable duck) { - this.duck = duck; - } - - public void quack() { - duck.quack(); - numberOfQuacks++; - } - - public static int getQuacks() { - return numberOfQuacks; - } - - public String toString() { - return duck.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Quackable.java deleted file mode 100755 index 37c50a5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/Quackable.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public interface Quackable { - public void quack(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RedheadDuck.java deleted file mode 100755 index e7df76b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RedheadDuck.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class RedheadDuck implements Quackable { - public void quack() { - System.out.println("Quack"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RubberDuck.java deleted file mode 100755 index ddd7ae4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/factory/RubberDuck.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.factory; - -public class RubberDuck implements Quackable { - - public void quack() { - System.out.println("Squeak"); - } - - public String toString() { - return "Rubber Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/.QuackDecorator.java.swp b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/.QuackDecorator.java.swp deleted file mode 100755 index 873837cff6bb8e239ca064d97d0ad692b20b99f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2-D(p-6vwCD1=RX+Esphrl;Uo!&9m{ObY>FN8ZQK2 z!8`FWMErUM-#`&xz$-x%{qJOx%?D|&yim@UL_}(zq3*1i{1jmb&RpA z8+WgL+q=N{GGkJ!FkPN>t;VWW7Z+7ogkF?{A{vwMBrWK#udQtQ>rzzKls4Ai6xK=| z8~=Jzk-pKPzl~Vc#loZ>s941{KM9P~EvfyRO%d*{$S~2uCfeH(Eiq;{S|$TzVA#O? zrG?A<%*@#nCvOjj=$;Ia0Wv@a$N(8217v^r_S-di2%qP{REArm4>CXo z$N(8217v^p?6Rp;mZ1+T= z%?brAZBxg*(hPS!o7}P*L(j$85-T*CL8L<7S>btz?=#N%#O+;iS2a$osy^(V+w>Q2 zC91+l;^_`7&)2f13?{X^6^h-F?7maFLL(1$Gk7l}FP-%rH|qgPSDj>&w{5Jj=w8K^ z*QD)4i?ez9VBXvuG7GNTy>v``q{nR4x$CrMx0UhI48G*#=UcnYdV}UgcPoNOy2soR zV5jeVgGWJ~!Hg2izR55W#tgj=T-6(qtjpMD5x3F)#8-zk(50wJ-W!?sdL#2**LLZk GGVBiseMCS2 diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/AbstractDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/AbstractDuckFactory.java deleted file mode 100755 index 71aac2b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/AbstractDuckFactory.java +++ /dev/null @@ -1,9 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public abstract class AbstractDuckFactory { - - public abstract Quackable createMallardDuck(); - public abstract Quackable createRedheadDuck(); - public abstract Quackable createDuckCall(); - public abstract Quackable createRubberDuck(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/CountingDuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/CountingDuckFactory.java deleted file mode 100755 index 22de8cd..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/CountingDuckFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class CountingDuckFactory extends AbstractDuckFactory { - - public Quackable createMallardDuck() { - return new QuackCounter(new MallardDuck()); - } - - public Quackable createRedheadDuck() { - return new QuackCounter(new RedheadDuck()); - } - - public Quackable createDuckCall() { - return new QuackCounter(new DuckCall()); - } - - public Quackable createRubberDuck() { - return new QuackCounter(new RubberDuck()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DecoyDuck.java deleted file mode 100755 index 54d042d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DecoyDuck.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class DecoyDuck implements Quackable { - Observable observable; - - public DecoyDuck() { - observable = new Observable(this); - } - - public void quack() { - System.out.println("<< Silence >>"); - notifyObservers(); - } - - public void registerObserver(Observer observer) { - observable.registerObserver(observer); - } - - public void notifyObservers() { - observable.notifyObservers(); - } - - public String toString() { - return "Decoy Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckCall.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckCall.java deleted file mode 100755 index 241afb7..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckCall.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class DuckCall implements Quackable { - Observable observable; - - public DuckCall() { - observable = new Observable(this); - } - - public void quack() { - System.out.println("Kwak"); - notifyObservers(); - } - - public void registerObserver(Observer observer) { - observable.registerObserver(observer); - } - - public void notifyObservers() { - observable.notifyObservers(); - } - - public String toString() { - return "Duck Call"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckFactory.java deleted file mode 100755 index 25bfdf9..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class DuckFactory extends AbstractDuckFactory { - - public Quackable createMallardDuck() { - return new MallardDuck(); - } - - public Quackable createRedheadDuck() { - return new RedheadDuck(); - } - - public Quackable createDuckCall() { - return new DuckCall(); - } - - public Quackable createRubberDuck() { - return new RubberDuck(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckSimulator.java deleted file mode 100755 index 1f1851e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/DuckSimulator.java +++ /dev/null @@ -1,54 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class DuckSimulator { - public static void main(String[] args) { - DuckSimulator simulator = new DuckSimulator(); - AbstractDuckFactory duckFactory = new CountingDuckFactory(); - - simulator.simulate(duckFactory); - } - - void simulate(AbstractDuckFactory duckFactory) { - - Quackable redheadDuck = duckFactory.createRedheadDuck(); - Quackable duckCall = duckFactory.createDuckCall(); - Quackable rubberDuck = duckFactory.createRubberDuck(); - Quackable gooseDuck = new GooseAdapter(new Goose()); - - Flock flockOfDucks = new Flock(); - - flockOfDucks.add(redheadDuck); - flockOfDucks.add(duckCall); - flockOfDucks.add(rubberDuck); - flockOfDucks.add(gooseDuck); - - Flock flockOfMallards = new Flock(); - - Quackable mallardOne = duckFactory.createMallardDuck(); - Quackable mallardTwo = duckFactory.createMallardDuck(); - Quackable mallardThree = duckFactory.createMallardDuck(); - Quackable mallardFour = duckFactory.createMallardDuck(); - - flockOfMallards.add(mallardOne); - flockOfMallards.add(mallardTwo); - flockOfMallards.add(mallardThree); - flockOfMallards.add(mallardFour); - - flockOfDucks.add(flockOfMallards); - - System.out.println("\nDuck Simulator: With Observer"); - - Quackologist quackologist = new Quackologist(); - flockOfDucks.registerObserver(quackologist); - - simulate(flockOfDucks); - - System.out.println("\nThe ducks quacked " + - QuackCounter.getQuacks() + - " times"); - } - - void simulate(Quackable duck) { - duck.quack(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Flock.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Flock.java deleted file mode 100755 index 1d995c0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Flock.java +++ /dev/null @@ -1,34 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -import java.util.Iterator; -import java.util.*; - -public class Flock implements Quackable { - List ducks = new ArrayList(); - - public void add(Quackable duck) { - ducks.add(duck); - } - - public void quack() { - Iterator iterator = ducks.iterator(); - while (iterator.hasNext()) { - Quackable duck = (Quackable)iterator.next(); - duck.quack(); - } - } - - public void registerObserver(Observer observer) { - Iterator iterator = ducks.iterator(); - while (iterator.hasNext()) { - Quackable duck = (Quackable)iterator.next(); - duck.registerObserver(observer); - } - } - - public void notifyObservers() { } - - public String toString() { - return "Flock of Ducks"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Goose.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Goose.java deleted file mode 100755 index e00c8b0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Goose.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class Goose { - - public void honk() { - System.out.println("Honk"); - } - - public String toString() { - return "Goose"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/GooseAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/GooseAdapter.java deleted file mode 100755 index d2b2168..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/GooseAdapter.java +++ /dev/null @@ -1,28 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class GooseAdapter implements Quackable { - Goose goose; - Observable observable; - - public GooseAdapter(Goose goose) { - this.goose = goose; - observable = new Observable(this); - } - - public void quack() { - goose.honk(); - notifyObservers(); - } - - public void registerObserver(Observer observer) { - observable.registerObserver(observer); - } - - public void notifyObservers() { - observable.notifyObservers(); - } - - public String toString() { - return "Goose pretending to be a Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/MallardDuck.java deleted file mode 100755 index ede2c2c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/MallardDuck.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class MallardDuck implements Quackable { - Observable observable; - - public MallardDuck() { - observable = new Observable(this); - } - - public void quack() { - System.out.println("Quack"); - notifyObservers(); - } - - public void registerObserver(Observer observer) { - observable.registerObserver(observer); - } - - public void notifyObservers() { - observable.notifyObservers(); - } - - public String toString() { - return "Mallard Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observable.java deleted file mode 100755 index bf954a5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observable.java +++ /dev/null @@ -1,30 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -import java.util.Iterator; -import java.util.List; -import java.util.ArrayList; - -public class Observable implements QuackObservable { - List observers = new ArrayList(); - QuackObservable duck; - - public Observable(QuackObservable duck) { - this.duck = duck; - } - - public void registerObserver(Observer observer) { - observers.add(observer); - } - - public void notifyObservers() { - Iterator iterator = observers.iterator(); - while (iterator.hasNext()) { - Observer observer = iterator.next(); - observer.update(duck); - } - } - - public Iterator getObservers() { - return observers.iterator(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observer.java deleted file mode 100755 index bbdd809..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Observer.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public interface Observer { - public void update(QuackObservable duck); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackCounter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackCounter.java deleted file mode 100755 index 3e67c69..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackCounter.java +++ /dev/null @@ -1,31 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class QuackCounter implements Quackable { - Quackable duck; - static int numberOfQuacks; - - public QuackCounter(Quackable duck) { - this.duck = duck; - } - - public void quack() { - duck.quack(); - numberOfQuacks++; - } - - public static int getQuacks() { - return numberOfQuacks; - } - - public void registerObserver(Observer observer) { - duck.registerObserver(observer); - } - - public void notifyObservers() { - duck.notifyObservers(); - } - - public String toString() { - return duck.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackObservable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackObservable.java deleted file mode 100755 index 88db133..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/QuackObservable.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public interface QuackObservable { - public void registerObserver(Observer observer); - public void notifyObservers(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackable.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackable.java deleted file mode 100755 index d77272d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackable.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public interface Quackable extends QuackObservable { - public void quack(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackologist.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackologist.java deleted file mode 100755 index f145144..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/Quackologist.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class Quackologist implements Observer { - - public void update(QuackObservable duck) { - System.out.println("Quackologist: " + duck + " just quacked."); - } - - public String toString() { - return "Quackologist"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RedheadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RedheadDuck.java deleted file mode 100755 index 2b5aa54..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RedheadDuck.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class RedheadDuck implements Quackable { - Observable observable; - - public RedheadDuck() { - observable = new Observable(this); - } - - public void quack() { - System.out.println("Quack"); - notifyObservers(); - } - - public void registerObserver(Observer observer) { - observable.registerObserver(observer); - } - - public void notifyObservers() { - observable.notifyObservers(); - } - - public String toString() { - return "Redhead Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RubberDuck.java deleted file mode 100755 index 19c5d48..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/combining/observer/RubberDuck.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.combining.observer; - -public class RubberDuck implements Quackable { - Observable observable; - - public RubberDuck() { - observable = new Observable(this); - } - - public void quack() { - System.out.println("Squeak"); - notifyObservers(); - } - - public void registerObserver(Observer observer) { - observable.registerObserver(observer); - } - - public void notifyObservers() { - observable.notifyObservers(); - } - - public String toString() { - return "Rubber Duck"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/BurgerAndFriesOrder.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/BurgerAndFriesOrder.java deleted file mode 100644 index 937cb8f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/BurgerAndFriesOrder.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.command.diner; - -public class BurgerAndFriesOrder implements Order { - Cook cook; - public BurgerAndFriesOrder(Cook cook) { - this.cook = cook; - } - public void orderUp() { - cook.makeBurger(); - cook.makeFries(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Cook.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Cook.java deleted file mode 100644 index 7df0663..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Cook.java +++ /dev/null @@ -1,14 +0,0 @@ -package headfirst.designpatterns.command.diner; - -public class Cook { - - public Cook() {} - - public void makeBurger() { - System.out.println("Making a burger"); - } - - public void makeFries() { - System.out.println("Making fries"); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Customer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Customer.java deleted file mode 100644 index b764a40..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Customer.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.command.diner; - -public class Customer { - Waitress waitress; - Order order; - public Customer(Waitress waitress) { - this.waitress = waitress; - } - public void createOrder(Order order) { - this.order = order; - } - public void hungry() { - waitress.takeOrder(order); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Diner.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Diner.java deleted file mode 100644 index 4a695ea..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Diner.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.command.diner; - -public class Diner { - public static void main(String[] args) { - Cook cook = new Cook(); - Waitress waitress = new Waitress(); - Customer customer = new Customer(waitress); - customer.createOrder(new BurgerAndFriesOrder(cook)); - customer.hungry(); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Order.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Order.java deleted file mode 100755 index 2bcad5e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Order.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.command.diner; - -@FunctionalInterface -public interface Order { - public void orderUp(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Waitress.java deleted file mode 100644 index c53025c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/diner/Waitress.java +++ /dev/null @@ -1,10 +0,0 @@ -package headfirst.designpatterns.command.diner; - -public class Waitress { - Order order; - public Waitress() {} - public void takeOrder(Order order) { - this.order = order; - order.orderUp(); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Cook.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Cook.java deleted file mode 100644 index f16cd68..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Cook.java +++ /dev/null @@ -1,14 +0,0 @@ -package headfirst.designpatterns.command.dinerLambda; - -public class Cook { - - public Cook() {} - - public void makeBurger() { - System.out.println("Making a burger"); - } - - public void makeFries() { - System.out.println("Making fries"); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Customer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Customer.java deleted file mode 100644 index cbfeb77..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Customer.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.command.dinerLambda; - -public class Customer { - Waitress waitress; - Cook cook; - Order o; - public Customer(Waitress waitress, Cook cook) { - this.waitress = waitress; - this.cook = cook; - } - public void createOrder() { - Order o = () -> { cook.makeBurger(); cook.makeFries(); }; - } - public void hungry() { - waitress.takeOrder(o); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Diner.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Diner.java deleted file mode 100644 index 1df5379..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Diner.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.command.dinerLambda; - -public class Diner { - public static void main(String[] args) { - Cook cook = new Cook(); - Waitress waitress = new Waitress(); - Customer customer = new Customer(waitress, cook); - customer.createOrder(); - customer.hungry(); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Order.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Order.java deleted file mode 100755 index 457dce0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Order.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.command.dinerLambda; - -@FunctionalInterface -public interface Order { - public void orderUp(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Waitress.java deleted file mode 100644 index 5ae13ec..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/dinerLambda/Waitress.java +++ /dev/null @@ -1,10 +0,0 @@ -package headfirst.designpatterns.command.dinerLambda; - -public class Waitress { - Order order; - public Waitress() {} - public void takeOrder(Order order) { - this.order = order; - order.orderUp(); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFan.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFan.java deleted file mode 100755 index 56c730e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFan.java +++ /dev/null @@ -1,42 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class CeilingFan { - public static final int HIGH = 3; - public static final int MEDIUM = 2; - public static final int LOW = 1; - public static final int OFF = 0; - String location; - int speed; - - public CeilingFan(String location) { - this.location = location; - } - - public void high() { - // turns the ceiling fan on to high - speed = HIGH; - System.out.println(location + " ceiling fan is on high"); - } - - public void medium() { - // turns the ceiling fan on to medium - speed = MEDIUM; - System.out.println(location + " ceiling fan is on medium"); - } - - public void low() { - // turns the ceiling fan on to low - speed = LOW; - System.out.println(location + " ceiling fan is on low"); - } - - public void off() { - // turns the ceiling fan off - speed = OFF; - System.out.println(location + " ceiling fan is off"); - } - - public int getSpeed() { - return speed; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanHighCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanHighCommand.java deleted file mode 100755 index 69fee07..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanHighCommand.java +++ /dev/null @@ -1,22 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class CeilingFanHighCommand implements Command { - CeilingFan ceilingFan; - int prevSpeed; - - public CeilingFanHighCommand(CeilingFan ceilingFan) { - this.ceilingFan = ceilingFan; - } - public void execute() { - prevSpeed = ceilingFan.getSpeed(); - ceilingFan.high(); - } - public void undo() { - switch (prevSpeed) { - case CeilingFan.HIGH: ceilingFan.high(); break; - case CeilingFan.MEDIUM: ceilingFan.medium(); break; - case CeilingFan.LOW: ceilingFan.low(); break; - default: ceilingFan.off(); break; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanMediumCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanMediumCommand.java deleted file mode 100755 index 3c687b6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanMediumCommand.java +++ /dev/null @@ -1,22 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class CeilingFanMediumCommand implements Command { - CeilingFan ceilingFan; - int prevSpeed; - - public CeilingFanMediumCommand(CeilingFan ceilingFan) { - this.ceilingFan = ceilingFan; - } - public void execute() { - prevSpeed = ceilingFan.getSpeed(); - ceilingFan.medium(); - } - public void undo() { - switch (prevSpeed) { - case CeilingFan.HIGH: ceilingFan.high(); break; - case CeilingFan.MEDIUM: ceilingFan.medium(); break; - case CeilingFan.LOW: ceilingFan.low(); break; - default: ceilingFan.off(); break; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanOffCommand.java deleted file mode 100755 index 4548fa5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/CeilingFanOffCommand.java +++ /dev/null @@ -1,22 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class CeilingFanOffCommand implements Command { - CeilingFan ceilingFan; - int prevSpeed; - - public CeilingFanOffCommand(CeilingFan ceilingFan) { - this.ceilingFan = ceilingFan; - } - public void execute() { - prevSpeed = ceilingFan.getSpeed(); - ceilingFan.off(); - } - public void undo() { - switch (prevSpeed) { - case CeilingFan.HIGH: ceilingFan.high(); break; - case CeilingFan.MEDIUM: ceilingFan.medium(); break; - case CeilingFan.LOW: ceilingFan.low(); break; - default: ceilingFan.off(); break; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Command.java deleted file mode 100755 index 01b969f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Command.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.command.party; - -public interface Command { - public void execute(); - public void undo(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Hottub.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Hottub.java deleted file mode 100755 index dbd1518..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Hottub.java +++ /dev/null @@ -1,45 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class Hottub { - boolean on; - int temperature; - - public Hottub() { - } - - public void on() { - on = true; - } - - public void off() { - on = false; - } - - public void circulate() { - if (on) { - System.out.println("Hottub is bubbling!"); - } - } - - public void jetsOn() { - if (on) { - System.out.println("Hottub jets are on"); - } - } - - public void jetsOff() { - if (on) { - System.out.println("Hottub jets are off"); - } - } - - public void setTemperature(int temperature) { - if (temperature > this.temperature) { - System.out.println("Hottub is heating to a steaming " + temperature + " degrees"); - } - else { - System.out.println("Hottub is cooling to " + temperature + " degrees"); - } - this.temperature = temperature; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOffCommand.java deleted file mode 100755 index 0883db5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOffCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class HottubOffCommand implements Command { - Hottub hottub; - - public HottubOffCommand(Hottub hottub) { - this.hottub = hottub; - } - - public void execute() { - hottub.setTemperature(98); - hottub.off(); - } - public void undo() { - hottub.on(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOnCommand.java deleted file mode 100755 index a175bff..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/HottubOnCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class HottubOnCommand implements Command { - Hottub hottub; - - public HottubOnCommand(Hottub hottub) { - this.hottub = hottub; - } - public void execute() { - hottub.on(); - hottub.setTemperature(104); - hottub.circulate(); - } - public void undo() { - hottub.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Light.java deleted file mode 100755 index e7e9947..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Light.java +++ /dev/null @@ -1,34 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class Light { - String location; - int level; - - public Light(String location) { - this.location = location; - } - - public void on() { - level = 100; - System.out.println("Light is on"); - } - - public void off() { - level = 0; - System.out.println("Light is off"); - } - - public void dim(int level) { - this.level = level; - if (level == 0) { - off(); - } - else { - System.out.println("Light is dimmed to " + level + "%"); - } - } - - public int getLevel() { - return level; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOffCommand.java deleted file mode 100755 index 18b322a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOffCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class LightOffCommand implements Command { - Light light; - - public LightOffCommand(Light light) { - this.light = light; - } - - public void execute() { - light.off(); - } - - public void undo() { - light.on(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOnCommand.java deleted file mode 100755 index 86ee80a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LightOnCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class LightOnCommand implements Command { - Light light; - - public LightOnCommand(Light light) { - this.light = light; - } - - public void execute() { - light.on(); - } - - public void undo() { - light.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOffCommand.java deleted file mode 100755 index 3df6631..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOffCommand.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class LivingroomLightOffCommand implements Command { - Light light; - - public LivingroomLightOffCommand(Light light) { - this.light = light; - } - public void execute() { - light.off(); - } - public void undo() { - light.on(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOnCommand.java deleted file mode 100755 index b7314dd..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/LivingroomLightOnCommand.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class LivingroomLightOnCommand implements Command { - Light light; - - public LivingroomLightOnCommand(Light light) { - this.light = light; - } - public void execute() { - light.on(); - } - public void undo() { - light.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/MacroCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/MacroCommand.java deleted file mode 100755 index 5016cf8..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/MacroCommand.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class MacroCommand implements Command { - Command[] commands; - - public MacroCommand(Command[] commands) { - this.commands = commands; - } - - public void execute() { - for (int i = 0; i < commands.length; i++) { - commands[i].execute(); - } - } - - /** - * NOTE: these commands have to be done backwards to ensure - * proper undo functionality - */ - public void undo() { - for (int i = commands.length -1; i >= 0; i--) { - commands[i].undo(); - } - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/NoCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/NoCommand.java deleted file mode 100755 index 2c88823..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/NoCommand.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class NoCommand implements Command { - public void execute() { } - public void undo() { } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteControl.java deleted file mode 100755 index ab3584e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteControl.java +++ /dev/null @@ -1,52 +0,0 @@ -package headfirst.designpatterns.command.party; - -// -// This is the invoker -// -public class RemoteControl { - Command[] onCommands; - Command[] offCommands; - Command undoCommand; - - public RemoteControl() { - onCommands = new Command[7]; - offCommands = new Command[7]; - - Command noCommand = new NoCommand(); - for(int i=0;i<7;i++) { - onCommands[i] = noCommand; - offCommands[i] = noCommand; - } - undoCommand = noCommand; - } - - public void setCommand(int slot, Command onCommand, Command offCommand) { - onCommands[slot] = onCommand; - offCommands[slot] = offCommand; - } - - public void onButtonWasPushed(int slot) { - onCommands[slot].execute(); - undoCommand = onCommands[slot]; - } - - public void offButtonWasPushed(int slot) { - offCommands[slot].execute(); - undoCommand = offCommands[slot]; - } - - public void undoButtonWasPushed() { - undoCommand.undo(); - } - - public String toString() { - StringBuffer stringBuff = new StringBuffer(); - stringBuff.append("\n------ Remote Control -------\n"); - for (int i = 0; i < onCommands.length; i++) { - stringBuff.append("[slot " + i + "] " + onCommands[i].getClass().getName() - + " " + offCommands[i].getClass().getName() + "\n"); - } - stringBuff.append("[undo] " + undoCommand.getClass().getName() + "\n"); - return stringBuff.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteLoader.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteLoader.java deleted file mode 100755 index 354a585..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/RemoteLoader.java +++ /dev/null @@ -1,37 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class RemoteLoader { - - public static void main(String[] args) { - - RemoteControl remoteControl = new RemoteControl(); - - Light light = new Light("Living Room"); - TV tv = new TV("Living Room"); - Stereo stereo = new Stereo("Living Room"); - Hottub hottub = new Hottub(); - - LightOnCommand lightOn = new LightOnCommand(light); - StereoOnCommand stereoOn = new StereoOnCommand(stereo); - TVOnCommand tvOn = new TVOnCommand(tv); - HottubOnCommand hottubOn = new HottubOnCommand(hottub); - LightOffCommand lightOff = new LightOffCommand(light); - StereoOffCommand stereoOff = new StereoOffCommand(stereo); - TVOffCommand tvOff = new TVOffCommand(tv); - HottubOffCommand hottubOff = new HottubOffCommand(hottub); - - Command[] partyOn = { lightOn, stereoOn, tvOn, hottubOn}; - Command[] partyOff = { lightOff, stereoOff, tvOff, hottubOff}; - - MacroCommand partyOnMacro = new MacroCommand(partyOn); - MacroCommand partyOffMacro = new MacroCommand(partyOff); - - remoteControl.setCommand(0, partyOnMacro, partyOffMacro); - - System.out.println(remoteControl); - System.out.println("--- Pushing Macro On---"); - remoteControl.onButtonWasPushed(0); - System.out.println("--- Pushing Macro Off---"); - remoteControl.offButtonWasPushed(0); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Stereo.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Stereo.java deleted file mode 100755 index 51466cd..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/Stereo.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class Stereo { - String location; - - public Stereo(String location) { - this.location = location; - } - - public void on() { - System.out.println(location + " stereo is on"); - } - - public void off() { - System.out.println(location + " stereo is off"); - } - - public void setCD() { - System.out.println(location + " stereo is set for CD input"); - } - - public void setDVD() { - System.out.println(location + " stereo is set for DVD input"); - } - - public void setRadio() { - System.out.println(location + " stereo is set for Radio"); - } - - public void setVolume(int volume) { - // code to set the volume - // valid range: 1-11 (after all 11 is better than 10, right?) - System.out.println(location + " Stereo volume set to " + volume); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOffCommand.java deleted file mode 100755 index 6eaa36b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOffCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class StereoOffCommand implements Command { - Stereo stereo; - - public StereoOffCommand(Stereo stereo) { - this.stereo = stereo; - } - - public void execute() { - stereo.off(); - } - - public void undo() { - stereo.on(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnCommand.java deleted file mode 100755 index 926dd1b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class StereoOnCommand implements Command { - Stereo stereo; - - public StereoOnCommand(Stereo stereo) { - this.stereo = stereo; - } - - public void execute() { - stereo.on(); - } - - public void undo() { - stereo.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnWithCDCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnWithCDCommand.java deleted file mode 100755 index 984daba..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/StereoOnWithCDCommand.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class StereoOnWithCDCommand implements Command { - Stereo stereo; - - public StereoOnWithCDCommand(Stereo stereo) { - this.stereo = stereo; - } - - public void execute() { - stereo.on(); - stereo.setCD(); - stereo.setVolume(11); - } - - public void undo() { - stereo.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TV.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TV.java deleted file mode 100755 index bc1d0fd..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TV.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class TV { - String location; - int channel; - - public TV(String location) { - this.location = location; - } - - public void on() { - System.out.println(location + " TV is on"); - } - - public void off() { - System.out.println(location + " TV is off"); - } - - public void setInputChannel() { - this.channel = 3; - System.out.println(location + " TV channel is set for DVD"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOffCommand.java deleted file mode 100755 index 39d3304..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOffCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class TVOffCommand implements Command { - TV tv; - - public TVOffCommand(TV tv) { - this.tv= tv; - } - - public void execute() { - tv.off(); - } - - public void undo() { - tv.on(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOnCommand.java deleted file mode 100755 index fd089a4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/party/TVOnCommand.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.command.party; - -public class TVOnCommand implements Command { - TV tv; - - public TVOnCommand(TV tv) { - this.tv= tv; - } - - public void execute() { - tv.on(); - tv.setInputChannel(); - } - - public void undo() { - tv.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFan.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFan.java deleted file mode 100755 index 1ea1dfb..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFan.java +++ /dev/null @@ -1,42 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class CeilingFan { - String location = ""; - int level; - public static final int HIGH = 2; - public static final int MEDIUM = 1; - public static final int LOW = 0; - - public CeilingFan(String location) { - this.location = location; - } - - public void high() { - // turns the ceiling fan on to high - level = HIGH; - System.out.println(location + " ceiling fan is on high"); - - } - - public void medium() { - // turns the ceiling fan on to medium - level = MEDIUM; - System.out.println(location + " ceiling fan is on medium"); - } - - public void low() { - // turns the ceiling fan on to low - level = LOW; - System.out.println(location + " ceiling fan is on low"); - } - - public void off() { - // turns the ceiling fan off - level = 0; - System.out.println(location + " ceiling fan is off"); - } - - public int getSpeed() { - return level; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOffCommand.java deleted file mode 100755 index 9b78518..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOffCommand.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class CeilingFanOffCommand implements Command { - CeilingFan ceilingFan; - - public CeilingFanOffCommand(CeilingFan ceilingFan) { - this.ceilingFan = ceilingFan; - } - public void execute() { - ceilingFan.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOnCommand.java deleted file mode 100755 index c0b21f6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/CeilingFanOnCommand.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class CeilingFanOnCommand implements Command { - CeilingFan ceilingFan; - - public CeilingFanOnCommand(CeilingFan ceilingFan) { - this.ceilingFan = ceilingFan; - } - public void execute() { - ceilingFan.high(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Command.java deleted file mode 100755 index 15ef179..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Command.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public interface Command { - public void execute(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoor.java deleted file mode 100755 index 35cf681..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoor.java +++ /dev/null @@ -1,29 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class GarageDoor { - String location; - - public GarageDoor(String location) { - this.location = location; - } - - public void up() { - System.out.println(location + " garage Door is Up"); - } - - public void down() { - System.out.println(location + " garage Door is Down"); - } - - public void stop() { - System.out.println(location + " garage Door is Stopped"); - } - - public void lightOn() { - System.out.println(location + " garage light is on"); - } - - public void lightOff() { - System.out.println(location + " garage light is off"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorDownCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorDownCommand.java deleted file mode 100755 index f10af51..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorDownCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class GarageDoorDownCommand implements Command { - GarageDoor garageDoor; - - public GarageDoorDownCommand(GarageDoor garageDoor) { - this.garageDoor = garageDoor; - } - - public void execute() { - garageDoor.up(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorUpCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorUpCommand.java deleted file mode 100755 index 0de73c5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/GarageDoorUpCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class GarageDoorUpCommand implements Command { - GarageDoor garageDoor; - - public GarageDoorUpCommand(GarageDoor garageDoor) { - this.garageDoor = garageDoor; - } - - public void execute() { - garageDoor.up(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Hottub.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Hottub.java deleted file mode 100755 index b1efb40..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Hottub.java +++ /dev/null @@ -1,56 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class Hottub { - boolean on; - int temperature; - - public Hottub() { - } - - public void on() { - on = true; - } - - public void off() { - on = false; - } - - public void bubblesOn() { - if (on) { - System.out.println("Hottub is bubbling!"); - } - } - - public void bubblesOff() { - if (on) { - System.out.println("Hottub is not bubbling"); - } - } - - public void jetsOn() { - if (on) { - System.out.println("Hottub jets are on"); - } - } - - public void jetsOff() { - if (on) { - System.out.println("Hottub jets are off"); - } - } - - public void setTemperature(int temperature) { - this.temperature = temperature; - } - - public void heat() { - temperature = 105; - System.out.println("Hottub is heating to a steaming 105 degrees"); - } - - public void cool() { - temperature = 98; - System.out.println("Hottub is cooling to 98 degrees"); - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOffCommand.java deleted file mode 100755 index e87c43b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOffCommand.java +++ /dev/null @@ -1,14 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class HottubOffCommand implements Command { - Hottub hottub; - - public HottubOffCommand(Hottub hottub) { - this.hottub = hottub; - } - - public void execute() { - hottub.cool(); - hottub.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOnCommand.java deleted file mode 100755 index bb639fe..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/HottubOnCommand.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class HottubOnCommand implements Command { - Hottub hottub; - - public HottubOnCommand(Hottub hottub) { - this.hottub = hottub; - } - - public void execute() { - hottub.on(); - hottub.heat(); - hottub.bubblesOn(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Light.java deleted file mode 100755 index 68c743f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Light.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class Light { - String location = ""; - - public Light(String location) { - this.location = location; - } - - public void on() { - System.out.println(location + " light is on"); - } - - public void off() { - System.out.println(location + " light is off"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOffCommand.java deleted file mode 100755 index 9b054c6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOffCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class LightOffCommand implements Command { - Light light; - - public LightOffCommand(Light light) { - this.light = light; - } - - public void execute() { - light.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOnCommand.java deleted file mode 100755 index 38d2e34..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LightOnCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class LightOnCommand implements Command { - Light light; - - public LightOnCommand(Light light) { - this.light = light; - } - - public void execute() { - light.on(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOffCommand.java deleted file mode 100755 index f1dc730..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOffCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class LivingroomLightOffCommand implements Command { - Light light; - - public LivingroomLightOffCommand(Light light) { - this.light = light; - } - - public void execute() { - light.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOnCommand.java deleted file mode 100755 index bb7e6bb..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/LivingroomLightOnCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class LivingroomLightOnCommand implements Command { - Light light; - - public LivingroomLightOnCommand(Light light) { - this.light = light; - } - - public void execute() { - light.on(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/NoCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/NoCommand.java deleted file mode 100755 index 6f58f42..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/NoCommand.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class NoCommand implements Command { - public void execute() { } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteControl.java deleted file mode 100755 index 72697c7..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteControl.java +++ /dev/null @@ -1,43 +0,0 @@ -package headfirst.designpatterns.command.remote; - -// -// This is the invoker -// -public class RemoteControl { - Command[] onCommands; - Command[] offCommands; - - public RemoteControl() { - onCommands = new Command[7]; - offCommands = new Command[7]; - - Command noCommand = new NoCommand(); - for (int i = 0; i < 7; i++) { - onCommands[i] = noCommand; - offCommands[i] = noCommand; - } - } - - public void setCommand(int slot, Command onCommand, Command offCommand) { - onCommands[slot] = onCommand; - offCommands[slot] = offCommand; - } - - public void onButtonWasPushed(int slot) { - onCommands[slot].execute(); - } - - public void offButtonWasPushed(int slot) { - offCommands[slot].execute(); - } - - public String toString() { - StringBuffer stringBuff = new StringBuffer(); - stringBuff.append("\n------ Remote Control -------\n"); - for (int i = 0; i < onCommands.length; i++) { - stringBuff.append("[slot " + i + "] " + onCommands[i].getClass().getName() - + " " + offCommands[i].getClass().getName() + "\n"); - } - return stringBuff.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteLoader.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteLoader.java deleted file mode 100755 index 61dea51..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/RemoteLoader.java +++ /dev/null @@ -1,54 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class RemoteLoader { - - public static void main(String[] args) { - RemoteControl remoteControl = new RemoteControl(); - - Light livingRoomLight = new Light("Living Room"); - Light kitchenLight = new Light("Kitchen"); - CeilingFan ceilingFan= new CeilingFan("Living Room"); - GarageDoor garageDoor = new GarageDoor("Garage"); - Stereo stereo = new Stereo("Living Room"); - - LightOnCommand livingRoomLightOn = - new LightOnCommand(livingRoomLight); - LightOffCommand livingRoomLightOff = - new LightOffCommand(livingRoomLight); - LightOnCommand kitchenLightOn = - new LightOnCommand(kitchenLight); - LightOffCommand kitchenLightOff = - new LightOffCommand(kitchenLight); - - CeilingFanOnCommand ceilingFanOn = - new CeilingFanOnCommand(ceilingFan); - CeilingFanOffCommand ceilingFanOff = - new CeilingFanOffCommand(ceilingFan); - - GarageDoorUpCommand garageDoorUp = - new GarageDoorUpCommand(garageDoor); - GarageDoorDownCommand garageDoorDown = - new GarageDoorDownCommand(garageDoor); - - StereoOnWithCDCommand stereoOnWithCD = - new StereoOnWithCDCommand(stereo); - StereoOffCommand stereoOff = - new StereoOffCommand(stereo); - - remoteControl.setCommand(0, livingRoomLightOn, livingRoomLightOff); - remoteControl.setCommand(1, kitchenLightOn, kitchenLightOff); - remoteControl.setCommand(2, ceilingFanOn, ceilingFanOff); - remoteControl.setCommand(3, stereoOnWithCD, stereoOff); - - System.out.println(remoteControl); - - remoteControl.onButtonWasPushed(0); - remoteControl.offButtonWasPushed(0); - remoteControl.onButtonWasPushed(1); - remoteControl.offButtonWasPushed(1); - remoteControl.onButtonWasPushed(2); - remoteControl.offButtonWasPushed(2); - remoteControl.onButtonWasPushed(3); - remoteControl.offButtonWasPushed(3); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Stereo.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Stereo.java deleted file mode 100755 index 9a520d0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/Stereo.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class Stereo { - String location; - - public Stereo(String location) { - this.location = location; - } - - public void on() { - System.out.println(location + " stereo is on"); - } - - public void off() { - System.out.println(location + " stereo is off"); - } - - public void setCD() { - System.out.println(location + " stereo is set for CD input"); - } - - public void setDVD() { - System.out.println(location + " stereo is set for DVD input"); - } - - public void setRadio() { - System.out.println(location + " stereo is set for Radio"); - } - - public void setVolume(int volume) { - // code to set the volume - // valid range: 1-11 (after all 11 is better than 10, right?) - System.out.println(location + " stereo volume set to " + volume); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOffCommand.java deleted file mode 100755 index 01b6d16..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOffCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class StereoOffCommand implements Command { - Stereo stereo; - - public StereoOffCommand(Stereo stereo) { - this.stereo = stereo; - } - - public void execute() { - stereo.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOnWithCDCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOnWithCDCommand.java deleted file mode 100755 index e3dd08b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/StereoOnWithCDCommand.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class StereoOnWithCDCommand implements Command { - Stereo stereo; - - public StereoOnWithCDCommand(Stereo stereo) { - this.stereo = stereo; - } - - public void execute() { - stereo.on(); - stereo.setCD(); - stereo.setVolume(11); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/TV.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/TV.java deleted file mode 100755 index fbdf007..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remote/TV.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.command.remote; - -public class TV { - String location; - int channel; - - public TV(String location) { - this.location = location; - } - - public void on() { - System.out.println("TV is on"); - } - - public void off() { - System.out.println("TV is off"); - } - - public void setInputChannel() { - this.channel = 3; - System.out.println("Channel is set for VCR"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/CeilingFan.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/CeilingFan.java deleted file mode 100755 index 31da30e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/CeilingFan.java +++ /dev/null @@ -1,42 +0,0 @@ -package headfirst.designpatterns.command.remoteWL; - -public class CeilingFan { - String location = ""; - int level; - public static final int HIGH = 2; - public static final int MEDIUM = 1; - public static final int LOW = 0; - - public CeilingFan(String location) { - this.location = location; - } - - public void high() { - // turns the ceiling fan on to high - level = HIGH; - System.out.println(location + " ceiling fan is on high"); - - } - - public void medium() { - // turns the ceiling fan on to medium - level = MEDIUM; - System.out.println(location + " ceiling fan is on medium"); - } - - public void low() { - // turns the ceiling fan on to low - level = LOW; - System.out.println(location + " ceiling fan is on low"); - } - - public void off() { - // turns the ceiling fan off - level = 0; - System.out.println(location + " ceiling fan is off"); - } - - public int getSpeed() { - return level; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Command.java deleted file mode 100755 index 264affe..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Command.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.command.remoteWL; - -@FunctionalInterface -public interface Command { - public void execute(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/GarageDoor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/GarageDoor.java deleted file mode 100755 index bc93e09..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/GarageDoor.java +++ /dev/null @@ -1,29 +0,0 @@ -package headfirst.designpatterns.command.remoteWL; - -public class GarageDoor { - String location; - - public GarageDoor(String location) { - this.location = location; - } - - public void up() { - System.out.println(location + " garage Door is Up"); - } - - public void down() { - System.out.println(location + " garage Door is Down"); - } - - public void stop() { - System.out.println(location + " garage Door is Stopped"); - } - - public void lightOn() { - System.out.println(location + " garage light is on"); - } - - public void lightOff() { - System.out.println(location + " garage light is off"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Hottub.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Hottub.java deleted file mode 100755 index e8c909c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Hottub.java +++ /dev/null @@ -1,56 +0,0 @@ -package headfirst.designpatterns.command.remoteWL; - -public class Hottub { - boolean on; - int temperature; - - public Hottub() { - } - - public void on() { - on = true; - } - - public void off() { - on = false; - } - - public void bubblesOn() { - if (on) { - System.out.println("Hottub is bubbling!"); - } - } - - public void bubblesOff() { - if (on) { - System.out.println("Hottub is not bubbling"); - } - } - - public void jetsOn() { - if (on) { - System.out.println("Hottub jets are on"); - } - } - - public void jetsOff() { - if (on) { - System.out.println("Hottub jets are off"); - } - } - - public void setTemperature(int temperature) { - this.temperature = temperature; - } - - public void heat() { - temperature = 105; - System.out.println("Hottub is heating to a steaming 105 degrees"); - } - - public void cool() { - temperature = 98; - System.out.println("Hottub is cooling to 98 degrees"); - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Light.java deleted file mode 100755 index a79c65e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Light.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.command.remoteWL; - -public class Light { - String location = ""; - - public Light(String location) { - this.location = location; - } - - public void on() { - System.out.println(location + " light is on"); - } - - public void off() { - System.out.println(location + " light is off"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteControl.java deleted file mode 100755 index 807b0e6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteControl.java +++ /dev/null @@ -1,43 +0,0 @@ -package headfirst.designpatterns.command.remoteWL; - -// -// This is the invoker -// -public class RemoteControl { - Command[] onCommands; - Command[] offCommands; - - public RemoteControl() { - onCommands = new Command[7]; - offCommands = new Command[7]; - - for (int i = 0; i < 7; i++) { - onCommands[i] = () -> { }; - offCommands[i] = () -> { }; - } - } - - public void setCommand(int slot, Command onCommand, Command offCommand) { - onCommands[slot] = onCommand; - offCommands[slot] = offCommand; - } - - public void onButtonWasPushed(int slot) { - onCommands[slot].execute(); - } - - public void offButtonWasPushed(int slot) { - offCommands[slot].execute(); - } - - public String toString() { - StringBuffer stringBuff = new StringBuffer(); - stringBuff.append("\n------ Remote Control -------\n"); - for (int i = 0; i < onCommands.length; i++) { - stringBuff.append("[slot " + i + "] " + onCommands[i].getClass().getName() - + " " + offCommands[i].getClass().getName() + "\n"); - } - return stringBuff.toString(); - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteLoader.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteLoader.java deleted file mode 100755 index bce86a6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/RemoteLoader.java +++ /dev/null @@ -1,38 +0,0 @@ -package headfirst.designpatterns.command.remoteWL; - -public class RemoteLoader { - - public static void main(String[] args) { - RemoteControl remoteControl = new RemoteControl(); - - Light livingRoomLight = new Light("Living Room"); - Light kitchenLight = new Light("Kitchen"); - CeilingFan ceilingFan= new CeilingFan("Living Room"); - GarageDoor garageDoor = new GarageDoor("Main house"); - Stereo stereo = new Stereo("Living Room"); - - remoteControl.setCommand(0, livingRoomLight::on, livingRoomLight::off); - remoteControl.setCommand(1, kitchenLight::on, kitchenLight::off); - remoteControl.setCommand(2, ceilingFan::high, ceilingFan::off); - - Command stereoOnWithCD = () -> { - stereo.on(); stereo.setCD(); stereo.setVolume(11); - }; - remoteControl.setCommand(3, stereoOnWithCD, stereo::off); - remoteControl.setCommand(4, garageDoor::up, garageDoor::down); - - System.out.println(remoteControl); - - remoteControl.onButtonWasPushed(0); - remoteControl.offButtonWasPushed(0); - remoteControl.onButtonWasPushed(1); - remoteControl.offButtonWasPushed(1); - remoteControl.onButtonWasPushed(2); - remoteControl.offButtonWasPushed(2); - remoteControl.onButtonWasPushed(3); - remoteControl.offButtonWasPushed(3); - remoteControl.onButtonWasPushed(4); - remoteControl.offButtonWasPushed(4); - remoteControl.onButtonWasPushed(5); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Stereo.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Stereo.java deleted file mode 100755 index 47f01b5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/Stereo.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.command.remoteWL; - -public class Stereo { - String location; - - public Stereo(String location) { - this.location = location; - } - - public void on() { - System.out.println(location + " stereo is on"); - } - - public void off() { - System.out.println(location + " stereo is off"); - } - - public void setCD() { - System.out.println(location + " stereo is set for CD input"); - } - - public void setDVD() { - System.out.println(location + " stereo is set for DVD input"); - } - - public void setRadio() { - System.out.println(location + " stereo is set for Radio"); - } - - public void setVolume(int volume) { - // code to set the volume - // valid range: 1-11 (after all 11 is better than 10, right?) - System.out.println(location + " stereo volume set to " + volume); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/TV.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/TV.java deleted file mode 100755 index b686f4f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/remoteWL/TV.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.command.remoteWL; - -public class TV { - String location; - int channel; - - public TV(String location) { - this.location = location; - } - - public void on() { - System.out.println("TV is on"); - } - - public void off() { - System.out.println("TV is off"); - } - - public void setInputChannel() { - this.channel = 3; - System.out.println("Channel is set for VCR"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Command.java deleted file mode 100755 index b04b476..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Command.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.command.simpleremote; - -public interface Command { - public void execute(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoor.java deleted file mode 100755 index 1eab5b7..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoor.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.command.simpleremote; - -public class GarageDoor { - - public GarageDoor() { - } - - public void up() { - System.out.println("Garage Door is Open"); - } - - public void down() { - System.out.println("Garage Door is Closed"); - } - - public void stop() { - System.out.println("Garage Door is Stopped"); - } - - public void lightOn() { - System.out.println("Garage light is on"); - } - - public void lightOff() { - System.out.println("Garage light is off"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoorOpenCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoorOpenCommand.java deleted file mode 100755 index 12c32bd..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/GarageDoorOpenCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.command.simpleremote; - -public class GarageDoorOpenCommand implements Command { - GarageDoor garageDoor; - - public GarageDoorOpenCommand(GarageDoor garageDoor) { - this.garageDoor = garageDoor; - } - - public void execute() { - garageDoor.up(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Light.java deleted file mode 100755 index 93fcfab..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/Light.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.command.simpleremote; - -public class Light { - - public Light() { - } - - public void on() { - System.out.println("Light is on"); - } - - public void off() { - System.out.println("Light is off"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOffCommand.java deleted file mode 100755 index cb3bd21..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOffCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.command.simpleremote; - -public class LightOffCommand implements Command { - Light light; - - public LightOffCommand(Light light) { - this.light = light; - } - - public void execute() { - light.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOnCommand.java deleted file mode 100755 index b8ad69c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/LightOnCommand.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.command.simpleremote; - -public class LightOnCommand implements Command { - Light light; - - public LightOnCommand(Light light) { - this.light = light; - } - - public void execute() { - light.on(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/RemoteControlTest.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/RemoteControlTest.java deleted file mode 100755 index 61d6a77..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/RemoteControlTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.command.simpleremote; - -public class RemoteControlTest { - public static void main(String[] args) { - SimpleRemoteControl remote = new SimpleRemoteControl(); - Light light = new Light(); - GarageDoor garageDoor = new GarageDoor(); - LightOnCommand lightOn = new LightOnCommand(light); - GarageDoorOpenCommand garageOpen = - new GarageDoorOpenCommand(garageDoor); - - remote.setCommand(lightOn); - remote.buttonWasPressed(); - remote.setCommand(garageOpen); - remote.buttonWasPressed(); - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/SimpleRemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/SimpleRemoteControl.java deleted file mode 100755 index 8206f50..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremote/SimpleRemoteControl.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.command.simpleremote; - -// -// This is the invoker -// -public class SimpleRemoteControl { - Command slot; - - public SimpleRemoteControl() {} - - public void setCommand(Command command) { - slot = command; - } - - public void buttonWasPressed() { - slot.execute(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Command.java deleted file mode 100755 index fd87776..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Command.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.command.simpleremoteWL; - -@FunctionalInterface -public interface Command { - public void execute(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/GarageDoor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/GarageDoor.java deleted file mode 100755 index 4b102fc..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/GarageDoor.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.command.simpleremoteWL; - -public class GarageDoor { - - public GarageDoor() { - } - - public void up() { - System.out.println("Garage Door is Open"); - } - - public void down() { - System.out.println("Garage Door is Closed"); - } - - public void stop() { - System.out.println("Garage Door is Stopped"); - } - - public void lightOn() { - System.out.println("Garage light is on"); - } - - public void lightOff() { - System.out.println("Garage light is off"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Light.java deleted file mode 100755 index ae3ac35..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/Light.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.command.simpleremoteWL; - -public class Light { - - public Light() { - } - - public void on() { - System.out.println("Light is on"); - } - - public void off() { - System.out.println("Light is off"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/RemoteControlTest.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/RemoteControlTest.java deleted file mode 100755 index f465af1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/RemoteControlTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.command.simpleremoteWL; - -public class RemoteControlTest { - public static void main(String[] args) { - SimpleRemoteControl remote = new SimpleRemoteControl(); - Light light = new Light(); - GarageDoor garageDoor = new GarageDoor(); - remote.setCommand(light::on); - remote.buttonWasPressed(); - remote.setCommand(garageDoor::up); - remote.buttonWasPressed(); - remote.setCommand(garageDoor::lightOn); - remote.buttonWasPressed(); - remote.setCommand(garageDoor::lightOff); - remote.buttonWasPressed(); - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/SimpleRemoteControl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/SimpleRemoteControl.java deleted file mode 100755 index dac6f69..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/simpleremoteWL/SimpleRemoteControl.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.command.simpleremoteWL; - -// -// This is the invoker -// -public class SimpleRemoteControl { - Command slot; - - public SimpleRemoteControl() {} - - public void setCommand(Command command) { - slot = command; - } - - public void buttonWasPressed() { - slot.execute(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/swing/SwingCommandExample.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/swing/SwingCommandExample.java deleted file mode 100755 index 3727978..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/swing/SwingCommandExample.java +++ /dev/null @@ -1,71 +0,0 @@ -package headfirst.designpatterns.command.swing; - -import java.awt.*; -import javax.swing.*; - -public class SwingCommandExample { - JFrame frame; - JPanel panel; - - public static void main(String[] args) { - SwingCommandExample example = new SwingCommandExample(); - example.go(); - } - - public void go() { - frame = new JFrame(); - panel = new JPanel(); - - // The GUI is the client - // The buttons are the invokers - JButton onButton = new JButton("On"); - JButton offButton = new JButton("Off"); - - // The light is the receiver - JLabel light = new JLabel("light"); - light.setOpaque(true); - light.setBackground(Color.LIGHT_GRAY); - - // The lambdas (ActionListeners) are the commands & actionPerformed() method implementation in one. - // We use addActionListener() to set the commands and code for the actionPerformed() method - // in the invokers (the buttons) - // The interface that all the commands (listeners) implement is the ActionListener interface. - // This interface has one method, actionPerformed(). - // This is equivalent to the execute() method. - // The buttons invoke the actionPerformed() method when they are clicked, which is the method - // we implemented in the command (the listeners) - // This method which executes the code to run on the receiver, the light. - onButton.addActionListener(event -> - light.setBackground(Color.YELLOW) - ); - offButton.addActionListener(event -> - light.setBackground(Color.LIGHT_GRAY) - ); - // Set frame properties - frame.setContentPane(panel); - panel.add(onButton); - panel.add(light); - panel.add(offButton); - - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.setSize(300,300); - frame.setVisible(true); - } - - /* - * Remove these two inner classes to use lambda expressions instead. - * - class AngelListener implements ActionListener { - public void actionPerformed(ActionEvent event) { - System.out.println("Don't do it, you might regret it!"); - } - } - - class DevilListener implements ActionListener { - public void actionPerformed(ActionEvent event) { - System.out.println("Come on, do it!"); - } - } - */ - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFan.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFan.java deleted file mode 100755 index 6dd42b1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFan.java +++ /dev/null @@ -1,39 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class CeilingFan { - public static final int HIGH = 3; - public static final int MEDIUM = 2; - public static final int LOW = 1; - public static final int OFF = 0; - String location; - int speed; - - public CeilingFan(String location) { - this.location = location; - speed = OFF; - } - - public void high() { - speed = HIGH; - System.out.println(location + " ceiling fan is on high"); - } - - public void medium() { - speed = MEDIUM; - System.out.println(location + " ceiling fan is on medium"); - } - - public void low() { - speed = LOW; - System.out.println(location + " ceiling fan is on low"); - } - - public void off() { - speed = OFF; - System.out.println(location + " ceiling fan is off"); - } - - public int getSpeed() { - return speed; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanHighCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanHighCommand.java deleted file mode 100755 index c2d61c0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanHighCommand.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class CeilingFanHighCommand implements Command { - CeilingFan ceilingFan; - int prevSpeed; - - public CeilingFanHighCommand(CeilingFan ceilingFan) { - this.ceilingFan = ceilingFan; - } - - public void execute() { - prevSpeed = ceilingFan.getSpeed(); - ceilingFan.high(); - } - - public void undo() { - if (prevSpeed == CeilingFan.HIGH) { - ceilingFan.high(); - } else if (prevSpeed == CeilingFan.MEDIUM) { - ceilingFan.medium(); - } else if (prevSpeed == CeilingFan.LOW) { - ceilingFan.low(); - } else if (prevSpeed == CeilingFan.OFF) { - ceilingFan.off(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanLowCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanLowCommand.java deleted file mode 100755 index 85383c7..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanLowCommand.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class CeilingFanLowCommand implements Command { - CeilingFan ceilingFan; - int prevSpeed; - - public CeilingFanLowCommand(CeilingFan ceilingFan) { - this.ceilingFan = ceilingFan; - } - - public void execute() { - prevSpeed = ceilingFan.getSpeed(); - ceilingFan.low(); - } - - public void undo() { - if (prevSpeed == CeilingFan.HIGH) { - ceilingFan.high(); - } else if (prevSpeed == CeilingFan.MEDIUM) { - ceilingFan.medium(); - } else if (prevSpeed == CeilingFan.LOW) { - ceilingFan.low(); - } else if (prevSpeed == CeilingFan.OFF) { - ceilingFan.off(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanMediumCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanMediumCommand.java deleted file mode 100755 index 51a1c3c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanMediumCommand.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class CeilingFanMediumCommand implements Command { - CeilingFan ceilingFan; - int prevSpeed; - - public CeilingFanMediumCommand(CeilingFan ceilingFan) { - this.ceilingFan = ceilingFan; - } - - public void execute() { - prevSpeed = ceilingFan.getSpeed(); - ceilingFan.medium(); - } - - public void undo() { - if (prevSpeed == CeilingFan.HIGH) { - ceilingFan.high(); - } else if (prevSpeed == CeilingFan.MEDIUM) { - ceilingFan.medium(); - } else if (prevSpeed == CeilingFan.LOW) { - ceilingFan.low(); - } else if (prevSpeed == CeilingFan.OFF) { - ceilingFan.off(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanOffCommand.java deleted file mode 100755 index 577d109..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/CeilingFanOffCommand.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class CeilingFanOffCommand implements Command { - CeilingFan ceilingFan; - int prevSpeed; - - public CeilingFanOffCommand(CeilingFan ceilingFan) { - this.ceilingFan = ceilingFan; - } - - public void execute() { - prevSpeed = ceilingFan.getSpeed(); - ceilingFan.off(); - } - - public void undo() { - if (prevSpeed == CeilingFan.HIGH) { - ceilingFan.high(); - } else if (prevSpeed == CeilingFan.MEDIUM) { - ceilingFan.medium(); - } else if (prevSpeed == CeilingFan.LOW) { - ceilingFan.low(); - } else if (prevSpeed == CeilingFan.OFF) { - ceilingFan.off(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Command.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Command.java deleted file mode 100755 index 23e1444..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Command.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public interface Command { - public void execute(); - public void undo(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOffCommand.java deleted file mode 100755 index 2f15474..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOffCommand.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class DimmerLightOffCommand implements Command { - Light light; - int prevLevel; - - public DimmerLightOffCommand(Light light) { - this.light = light; - prevLevel = 100; - } - - public void execute() { - prevLevel = light.getLevel(); - light.off(); - } - - public void undo() { - light.dim(prevLevel); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOnCommand.java deleted file mode 100755 index abcf08e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/DimmerLightOnCommand.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class DimmerLightOnCommand implements Command { - Light light; - int prevLevel; - - public DimmerLightOnCommand(Light light) { - this.light = light; - } - - public void execute() { - prevLevel = light.getLevel(); - light.dim(75); - } - - public void undo() { - light.dim(prevLevel); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Light.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Light.java deleted file mode 100755 index 278a60a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/Light.java +++ /dev/null @@ -1,34 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class Light { - String location; - int level; - - public Light(String location) { - this.location = location; - } - - public void on() { - level = 100; - System.out.println("Light is on"); - } - - public void off() { - level = 0; - System.out.println("Light is off"); - } - - public void dim(int level) { - this.level = level; - if (level == 0) { - off(); - } - else { - System.out.println("Light is dimmed to " + level + "%"); - } - } - - public int getLevel() { - return level; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOffCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOffCommand.java deleted file mode 100755 index dbcf415..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOffCommand.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class LightOffCommand implements Command { - Light light; - int level; - public LightOffCommand(Light light) { - this.light = light; - } - - public void execute() { - level = light.getLevel(); - light.off(); - } - - public void undo() { - light.dim(level); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOnCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOnCommand.java deleted file mode 100755 index ac07ff1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/LightOnCommand.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class LightOnCommand implements Command { - Light light; - int level; - public LightOnCommand(Light light) { - this.light = light; - } - - public void execute() { - level = light.getLevel(); - light.on(); - } - - public void undo() { - light.dim(level); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/NoCommand.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/NoCommand.java deleted file mode 100755 index 2d2e01e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/NoCommand.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class NoCommand implements Command { - public void execute() { } - public void undo() { } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteControlWithUndo.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteControlWithUndo.java deleted file mode 100755 index 964ce03..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteControlWithUndo.java +++ /dev/null @@ -1,52 +0,0 @@ -package headfirst.designpatterns.command.undo; - -// -// This is the invoker -// -public class RemoteControlWithUndo { - Command[] onCommands; - Command[] offCommands; - Command undoCommand; - - public RemoteControlWithUndo() { - onCommands = new Command[7]; - offCommands = new Command[7]; - - Command noCommand = new NoCommand(); - for(int i=0;i<7;i++) { - onCommands[i] = noCommand; - offCommands[i] = noCommand; - } - undoCommand = noCommand; - } - - public void setCommand(int slot, Command onCommand, Command offCommand) { - onCommands[slot] = onCommand; - offCommands[slot] = offCommand; - } - - public void onButtonWasPushed(int slot) { - onCommands[slot].execute(); - undoCommand = onCommands[slot]; - } - - public void offButtonWasPushed(int slot) { - offCommands[slot].execute(); - undoCommand = offCommands[slot]; - } - - public void undoButtonWasPushed() { - undoCommand.undo(); - } - - public String toString() { - StringBuffer stringBuff = new StringBuffer(); - stringBuff.append("\n------ Remote Control -------\n"); - for (int i = 0; i < onCommands.length; i++) { - stringBuff.append("[slot " + i + "] " + onCommands[i].getClass().getName() - + " " + offCommands[i].getClass().getName() + "\n"); - } - stringBuff.append("[undo] " + undoCommand.getClass().getName() + "\n"); - return stringBuff.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteLoader.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteLoader.java deleted file mode 100755 index a484c3f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/command/undo/RemoteLoader.java +++ /dev/null @@ -1,47 +0,0 @@ -package headfirst.designpatterns.command.undo; - -public class RemoteLoader { - - public static void main(String[] args) { - RemoteControlWithUndo remoteControl = new RemoteControlWithUndo(); - - Light livingRoomLight = new Light("Living Room"); - - LightOnCommand livingRoomLightOn = - new LightOnCommand(livingRoomLight); - LightOffCommand livingRoomLightOff = - new LightOffCommand(livingRoomLight); - - remoteControl.setCommand(0, livingRoomLightOn, livingRoomLightOff); - - remoteControl.onButtonWasPushed(0); - remoteControl.offButtonWasPushed(0); - System.out.println(remoteControl); - remoteControl.undoButtonWasPushed(); - remoteControl.offButtonWasPushed(0); - remoteControl.onButtonWasPushed(0); - System.out.println(remoteControl); - remoteControl.undoButtonWasPushed(); - - CeilingFan ceilingFan = new CeilingFan("Living Room"); - - CeilingFanMediumCommand ceilingFanMedium = - new CeilingFanMediumCommand(ceilingFan); - CeilingFanHighCommand ceilingFanHigh = - new CeilingFanHighCommand(ceilingFan); - CeilingFanOffCommand ceilingFanOff = - new CeilingFanOffCommand(ceilingFan); - - remoteControl.setCommand(0, ceilingFanMedium, ceilingFanOff); - remoteControl.setCommand(1, ceilingFanHigh, ceilingFanOff); - - remoteControl.onButtonWasPushed(0); - remoteControl.offButtonWasPushed(0); - System.out.println(remoteControl); - remoteControl.undoButtonWasPushed(); - - remoteControl.onButtonWasPushed(1); - System.out.println(remoteControl); - remoteControl.undoButtonWasPushed(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Menu.java deleted file mode 100755 index d658d9b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Menu.java +++ /dev/null @@ -1,48 +0,0 @@ -package headfirst.designpatterns.composite.menu; - -import java.util.Iterator; -import java.util.ArrayList; - -public class Menu extends MenuComponent { - ArrayList menuComponents = new ArrayList(); - String name; - String description; - - public Menu(String name, String description) { - this.name = name; - this.description = description; - } - - public void add(MenuComponent menuComponent) { - menuComponents.add(menuComponent); - } - - public void remove(MenuComponent menuComponent) { - menuComponents.remove(menuComponent); - } - - public MenuComponent getChild(int i) { - return (MenuComponent)menuComponents.get(i); - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public void print() { - System.out.print("\n" + getName()); - System.out.println(", " + getDescription()); - System.out.println("---------------------"); - - Iterator iterator = menuComponents.iterator(); - while (iterator.hasNext()) { - MenuComponent menuComponent = - (MenuComponent)iterator.next(); - menuComponent.print(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuComponent.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuComponent.java deleted file mode 100755 index f90748d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuComponent.java +++ /dev/null @@ -1,31 +0,0 @@ -package headfirst.designpatterns.composite.menu; - -public abstract class MenuComponent { - - public void add(MenuComponent menuComponent) { - throw new UnsupportedOperationException(); - } - public void remove(MenuComponent menuComponent) { - throw new UnsupportedOperationException(); - } - public MenuComponent getChild(int i) { - throw new UnsupportedOperationException(); - } - - public String getName() { - throw new UnsupportedOperationException(); - } - public String getDescription() { - throw new UnsupportedOperationException(); - } - public double getPrice() { - throw new UnsupportedOperationException(); - } - public boolean isVegetarian() { - throw new UnsupportedOperationException(); - } - - public void print() { - throw new UnsupportedOperationException(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuItem.java deleted file mode 100755 index 47cdb9e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuItem.java +++ /dev/null @@ -1,44 +0,0 @@ -package headfirst.designpatterns.composite.menu; - -public class MenuItem extends MenuComponent { - String name; - String description; - boolean vegetarian; - double price; - - public MenuItem(String name, - String description, - boolean vegetarian, - double price) - { - this.name = name; - this.description = description; - this.vegetarian = vegetarian; - this.price = price; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public double getPrice() { - return price; - } - - public boolean isVegetarian() { - return vegetarian; - } - - public void print() { - System.out.print(" " + getName()); - if (isVegetarian()) { - System.out.print("(v)"); - } - System.out.println(", " + getPrice()); - System.out.println(" -- " + getDescription()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuTestDrive.java deleted file mode 100755 index baa30c9..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/MenuTestDrive.java +++ /dev/null @@ -1,131 +0,0 @@ -package headfirst.designpatterns.composite.menu; - -public class MenuTestDrive { - public static void main(String args[]) { - MenuComponent pancakeHouseMenu = - new Menu("PANCAKE HOUSE MENU", "Breakfast"); - MenuComponent dinerMenu = - new Menu("DINER MENU", "Lunch"); - MenuComponent cafeMenu = - new Menu("CAFE MENU", "Dinner"); - MenuComponent dessertMenu = - new Menu("DESSERT MENU", "Dessert of course!"); - MenuComponent coffeeMenu = new Menu("COFFEE MENU", "Stuff to go with your afternoon coffee"); - - MenuComponent allMenus = new Menu("ALL MENUS", "All menus combined"); - - allMenus.add(pancakeHouseMenu); - allMenus.add(dinerMenu); - allMenus.add(cafeMenu); - - pancakeHouseMenu.add(new MenuItem( - "K&B's Pancake Breakfast", - "Pancakes with scrambled eggs and toast", - true, - 2.99)); - pancakeHouseMenu.add(new MenuItem( - "Regular Pancake Breakfast", - "Pancakes with fried eggs, sausage", - false, - 2.99)); - pancakeHouseMenu.add(new MenuItem( - "Blueberry Pancakes", - "Pancakes made with fresh blueberries, and blueberry syrup", - true, - 3.49)); - pancakeHouseMenu.add(new MenuItem( - "Waffles", - "Waffles with your choice of blueberries or strawberries", - true, - 3.59)); - - dinerMenu.add(new MenuItem( - "Vegetarian BLT", - "(Fakin') Bacon with lettuce & tomato on whole wheat", - true, - 2.99)); - dinerMenu.add(new MenuItem( - "BLT", - "Bacon with lettuce & tomato on whole wheat", - false, - 2.99)); - dinerMenu.add(new MenuItem( - "Soup of the day", - "A bowl of the soup of the day, with a side of potato salad", - false, - 3.29)); - dinerMenu.add(new MenuItem( - "Hot Dog", - "A hot dog, with saurkraut, relish, onions, topped with cheese", - false, - 3.05)); - dinerMenu.add(new MenuItem( - "Steamed Veggies and Brown Rice", - "Steamed vegetables over brown rice", - true, - 3.99)); - - dinerMenu.add(new MenuItem( - "Pasta", - "Spaghetti with marinara sauce, and a slice of sourdough bread", - true, - 3.89)); - - dinerMenu.add(dessertMenu); - - dessertMenu.add(new MenuItem( - "Apple Pie", - "Apple pie with a flakey crust, topped with vanilla icecream", - true, - 1.59)); - - dessertMenu.add(new MenuItem( - "Cheesecake", - "Creamy New York cheesecake, with a chocolate graham crust", - true, - 1.99)); - dessertMenu.add(new MenuItem( - "Sorbet", - "A scoop of raspberry and a scoop of lime", - true, - 1.89)); - - cafeMenu.add(new MenuItem( - "Veggie Burger and Air Fries", - "Veggie burger on a whole wheat bun, lettuce, tomato, and fries", - true, - 3.99)); - cafeMenu.add(new MenuItem( - "Soup of the day", - "A cup of the soup of the day, with a side salad", - false, - 3.69)); - cafeMenu.add(new MenuItem( - "Burrito", - "A large burrito, with whole pinto beans, salsa, guacamole", - true, - 4.29)); - - cafeMenu.add(coffeeMenu); - - coffeeMenu.add(new MenuItem( - "Coffee Cake", - "Crumbly cake topped with cinnamon and walnuts", - true, - 1.59)); - coffeeMenu.add(new MenuItem( - "Bagel", - "Flavors include sesame, poppyseed, cinnamon raisin, pumpkin", - false, - 0.69)); - coffeeMenu.add(new MenuItem( - "Biscotti", - "Three almond or hazelnut biscotti cookies", - true, - 0.89)); - - Waitress waitress = new Waitress(allMenus); - - waitress.printMenu(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Waitress.java deleted file mode 100755 index 5b1b445..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menu/Waitress.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.composite.menu; - -public class Waitress { - MenuComponent allMenus; - - public Waitress(MenuComponent allMenus) { - this.allMenus = allMenus; - } - - public void printMenu() { - allMenus.print(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/CompositeIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/CompositeIterator.java deleted file mode 100755 index 255bf66..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/CompositeIterator.java +++ /dev/null @@ -1,49 +0,0 @@ -package headfirst.designpatterns.composite.menuiterator; - -import java.util.*; - -public class CompositeIterator implements Iterator { - Stack> stack = new Stack>(); - - public CompositeIterator(Iterator iterator) { - stack.push(iterator); - } - - public MenuComponent next() { - if (hasNext()) { - Iterator iterator = stack.peek(); - MenuComponent component = iterator.next(); - stack.push(component.createIterator()); - return component; - } else { - return null; - } - } - - public boolean hasNext() { - if (stack.empty()) { - return false; - } else { - Iterator iterator = stack.peek(); - if (!iterator.hasNext()) { - stack.pop(); - return hasNext(); - } else { - return true; - } - } - } - - /* - * No longer needed as of Java 8 - * - * (non-Javadoc) - * @see java.util.Iterator#remove() - * - public void remove() { - throw new UnsupportedOperationException(); - } - */ -} - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Menu.java deleted file mode 100755 index 9a07bec..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Menu.java +++ /dev/null @@ -1,57 +0,0 @@ -package headfirst.designpatterns.composite.menuiterator; - -import java.util.Iterator; -import java.util.ArrayList; - -public class Menu extends MenuComponent { - Iterator iterator = null; - ArrayList menuComponents = new ArrayList(); - String name; - String description; - - public Menu(String name, String description) { - this.name = name; - this.description = description; - } - - public void add(MenuComponent menuComponent) { - menuComponents.add(menuComponent); - } - - public void remove(MenuComponent menuComponent) { - menuComponents.remove(menuComponent); - } - - public MenuComponent getChild(int i) { - return menuComponents.get(i); - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - - public Iterator createIterator() { - if (iterator == null) { - iterator = new CompositeIterator(menuComponents.iterator()); - } - return iterator; - } - - - public void print() { - System.out.print("\n" + getName()); - System.out.println(", " + getDescription()); - System.out.println("---------------------"); - - Iterator iterator = menuComponents.iterator(); - while (iterator.hasNext()) { - MenuComponent menuComponent = iterator.next(); - menuComponent.print(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuComponent.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuComponent.java deleted file mode 100755 index 8b19342..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuComponent.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.composite.menuiterator; - -import java.util.*; - -public abstract class MenuComponent { - - public void add(MenuComponent menuComponent) { - throw new UnsupportedOperationException(); - } - public void remove(MenuComponent menuComponent) { - throw new UnsupportedOperationException(); - } - public MenuComponent getChild(int i) { - throw new UnsupportedOperationException(); - } - - public String getName() { - throw new UnsupportedOperationException(); - } - public String getDescription() { - throw new UnsupportedOperationException(); - } - public double getPrice() { - throw new UnsupportedOperationException(); - } - public boolean isVegetarian() { - throw new UnsupportedOperationException(); - } - - public abstract Iterator createIterator(); - - public void print() { - throw new UnsupportedOperationException(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuItem.java deleted file mode 100755 index fb97b4a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuItem.java +++ /dev/null @@ -1,53 +0,0 @@ -package headfirst.designpatterns.composite.menuiterator; - -import java.util.Iterator; - -public class MenuItem extends MenuComponent { - - String name; - String description; - boolean vegetarian; - double price; - - public MenuItem(String name, - String description, - boolean vegetarian, - double price) - { - this.name = name; - this.description = description; - this.vegetarian = vegetarian; - this.price = price; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public double getPrice() { - return price; - } - - public boolean isVegetarian() { - return vegetarian; - } - - public Iterator createIterator() { - return new NullIterator(); - } - - public void print() { - System.out.print(" " + getName()); - if (isVegetarian()) { - System.out.print("(v)"); - } - System.out.println(", " + getPrice()); - System.out.println(" -- " + getDescription()); - } - -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuTestDrive.java deleted file mode 100755 index 6c2fe0a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/MenuTestDrive.java +++ /dev/null @@ -1,114 +0,0 @@ -package headfirst.designpatterns.composite.menuiterator; - -public class MenuTestDrive { - public static void main(String args[]) { - - MenuComponent pancakeHouseMenu = - new Menu("PANCAKE HOUSE MENU", "Breakfast"); - MenuComponent dinerMenu = - new Menu("DINER MENU", "Lunch"); - MenuComponent cafeMenu = - new Menu("CAFE MENU", "Dinner"); - MenuComponent dessertMenu = - new Menu("DESSERT MENU", "Dessert of course!"); - - MenuComponent allMenus = new Menu("ALL MENUS", "All menus combined"); - - allMenus.add(pancakeHouseMenu); - allMenus.add(dinerMenu); - allMenus.add(cafeMenu); - - pancakeHouseMenu.add(new MenuItem( - "K&B's Pancake Breakfast", - "Pancakes with scrambled eggs and toast", - true, - 2.99)); - pancakeHouseMenu.add(new MenuItem( - "Regular Pancake Breakfast", - "Pancakes with fried eggs, sausage", - false, - 2.99)); - pancakeHouseMenu.add(new MenuItem( - "Blueberry Pancakes", - "Pancakes made with fresh blueberries and blueberry syrup", - true, - 3.49)); - pancakeHouseMenu.add(new MenuItem( - "Waffles", - "Waffles with your choice of blueberries or strawberries", - true, - 3.59)); - - dinerMenu.add(new MenuItem( - "Vegetarian BLT", - "(Fakin') Bacon with lettuce & tomato on whole wheat", - true, - 2.99)); - dinerMenu.add(new MenuItem( - "BLT", - "Bacon with lettuce & tomato on whole wheat", - false, - 2.99)); - dinerMenu.add(new MenuItem( - "Soup of the day", - "A bowl of the soup of the day, with a side of potato salad", - false, - 3.29)); - dinerMenu.add(new MenuItem( - "Hot Dog", - "A hot dog, with saurkraut, relish, onions, topped with cheese", - false, - 3.05)); - dinerMenu.add(new MenuItem( - "Steamed Veggies and Brown Rice", - "A medly of steamed vegetables over brown rice", - true, - 3.99)); - - dinerMenu.add(new MenuItem( - "Pasta", - "Spaghetti with marinara sauce, and a slice of sourdough bread", - true, - 3.89)); - - dinerMenu.add(dessertMenu); - - dessertMenu.add(new MenuItem( - "Apple Pie", - "Apple pie with a flakey crust, topped with vanilla icecream", - true, - 1.59)); - dessertMenu.add(new MenuItem( - "Cheesecake", - "Creamy New York cheesecake, with a chocolate graham crust", - true, - 1.99)); - dessertMenu.add(new MenuItem( - "Sorbet", - "A scoop of raspberry and a scoop of lime", - true, - 1.89)); - - cafeMenu.add(new MenuItem( - "Veggie Burger and Air Fries", - "Veggie burger on a whole wheat bun, lettuce, tomato, and fries", - true, - 3.99)); - cafeMenu.add(new MenuItem( - "Soup of the day", - "A cup of the soup of the day, with a side salad", - false, - 3.69)); - cafeMenu.add(new MenuItem( - "Burrito", - "A large burrito, with whole pinto beans, salsa, guacamole", - true, - 4.29)); - - Waitress waitress = new Waitress(allMenus); - - waitress.printVegetarianMenu(); - //waitress.printMenu(); - - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/NullIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/NullIterator.java deleted file mode 100755 index 77e9c22..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/NullIterator.java +++ /dev/null @@ -1,25 +0,0 @@ -package headfirst.designpatterns.composite.menuiterator; - -import java.util.Iterator; - -public class NullIterator implements Iterator { - - public MenuComponent next() { - return null; - } - - public boolean hasNext() { - return false; - } - - /* - * No longer needed as of Java 8 - * - * (non-Javadoc) - * @see java.util.Iterator#remove() - * - public void remove() { - throw new UnsupportedOperationException(); - } - */ -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Waitress.java deleted file mode 100755 index dae2ec0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/composite/menuiterator/Waitress.java +++ /dev/null @@ -1,29 +0,0 @@ -package headfirst.designpatterns.composite.menuiterator; - -import java.util.Iterator; - -public class Waitress { - MenuComponent allMenus; - - public Waitress(MenuComponent allMenus) { - this.allMenus = allMenus; - } - - public void printMenu() { - allMenus.print(); - } - - public void printVegetarianMenu() { - Iterator iterator = allMenus.createIterator(); - - System.out.println("\nVEGETARIAN MENU\n----"); - while (iterator.hasNext()) { - MenuComponent menuComponent = iterator.next(); - try { - if (menuComponent.isVegetarian()) { - menuComponent.print(); - } - } catch (UnsupportedOperationException e) {} - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/InputTest.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/InputTest.java deleted file mode 100755 index bec0c80..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/InputTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package headfirst.designpatterns.decorator.io; - -import java.io.*; - -public class InputTest { - public static void main(String[] args) throws IOException { - int c; - InputStream in = null; - try { - in = - new LowerCaseInputStream( - new BufferedInputStream( - new FileInputStream("test.txt"))); - - while((c = in.read()) >= 0) { - System.out.print((char)c); - } - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (in != null) { in.close(); } - } - System.out.println(); - try (InputStream in2 = - new LowerCaseInputStream( - new BufferedInputStream( - new FileInputStream("test.txt")))) - { - while((c = in2.read()) >= 0) { - System.out.print((char)c); - } - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/LowerCaseInputStream.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/LowerCaseInputStream.java deleted file mode 100755 index 3a3e03b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/io/LowerCaseInputStream.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.decorator.io; - -import java.io.*; - -public class LowerCaseInputStream extends FilterInputStream { - - public LowerCaseInputStream(InputStream in) { - super(in); - } - - public int read() throws IOException { - int c = in.read(); - return (c == -1 ? c : Character.toLowerCase((char)c)); - } - - public int read(byte[] b, int offset, int len) throws IOException { - int result = in.read(b, offset, len); - for (int i = offset; i < offset+result; i++) { - b[i] = (byte)Character.toLowerCase((char)b[i]); - } - return result; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Cheese.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Cheese.java deleted file mode 100755 index b1e4a54..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Cheese.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.decorator.pizza; - -public class Cheese extends ToppingDecorator { - - - public Cheese(Pizza pizza) { - this.pizza = pizza; - } - - public String getDescription() { - return pizza.getDescription() + ", Cheese"; - } - - public double cost() { - return pizza.cost(); // cheese is free - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Olives.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Olives.java deleted file mode 100755 index 0c37888..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Olives.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.decorator.pizza; - -public class Olives extends ToppingDecorator { - - - public Olives(Pizza pizza) { - this.pizza = pizza; - } - - public String getDescription() { - return pizza.getDescription() + ", Olives"; - } - - public double cost() { - return pizza.cost() + .30; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Pizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Pizza.java deleted file mode 100755 index 4d2fb8f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/Pizza.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.decorator.pizza; - -public abstract class Pizza { - String description = "Basic Pizza"; - - public String getDescription() { - return description; - } - - public abstract double cost(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/PizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/PizzaStore.java deleted file mode 100755 index 847fc2c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/PizzaStore.java +++ /dev/null @@ -1,14 +0,0 @@ -package headfirst.designpatterns.decorator.pizza; - -public class PizzaStore { - - public static void main(String args[]) { - Pizza pizza = new ThincrustPizza(); - Pizza cheesePizza = new Cheese(pizza); - Pizza greekPizza = new Olives(cheesePizza); - - System.out.println(greekPizza.getDescription() - + " $" + greekPizza.cost()); - - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThickcrustPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThickcrustPizza.java deleted file mode 100755 index d12c2cd..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThickcrustPizza.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.decorator.pizza; - -public class ThickcrustPizza extends Pizza { - - public ThickcrustPizza() { - description = "Thick crust pizza, with tomato sauce"; - } - - public double cost() { - return 7.99; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThincrustPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThincrustPizza.java deleted file mode 100755 index 402d4bf..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ThincrustPizza.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.decorator.pizza; - -public class ThincrustPizza extends Pizza { - - public ThincrustPizza() { - description = "Thin crust pizza, with tomato sauce"; - } - - public double cost() { - return 7.99; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ToppingDecorator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ToppingDecorator.java deleted file mode 100755 index a7e95eb..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/pizza/ToppingDecorator.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.decorator.pizza; - -public abstract class ToppingDecorator extends Pizza { - Pizza pizza; - public abstract String getDescription(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Beverage.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Beverage.java deleted file mode 100755 index 8c77fb8..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Beverage.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public abstract class Beverage { - String description = "Unknown Beverage"; - - public String getDescription() { - return description; - } - - public abstract double cost(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/CondimentDecorator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/CondimentDecorator.java deleted file mode 100755 index 30d1025..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/CondimentDecorator.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public abstract class CondimentDecorator extends Beverage { - Beverage beverage; - public abstract String getDescription(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/DarkRoast.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/DarkRoast.java deleted file mode 100755 index f952683..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/DarkRoast.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public class DarkRoast extends Beverage { - public DarkRoast() { - description = "Dark Roast Coffee"; - } - - public double cost() { - return .99; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Decaf.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Decaf.java deleted file mode 100755 index d637b36..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Decaf.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public class Decaf extends Beverage { - public Decaf() { - description = "Decaf Coffee"; - } - - public double cost() { - return 1.05; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Espresso.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Espresso.java deleted file mode 100755 index 592c0b6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Espresso.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public class Espresso extends Beverage { - - public Espresso() { - description = "Espresso"; - } - - public double cost() { - return 1.99; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/HouseBlend.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/HouseBlend.java deleted file mode 100755 index 34de0d1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/HouseBlend.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public class HouseBlend extends Beverage { - public HouseBlend() { - description = "House Blend Coffee"; - } - - public double cost() { - return .89; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Milk.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Milk.java deleted file mode 100755 index 17e1bef..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Milk.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public class Milk extends CondimentDecorator { - public Milk(Beverage beverage) { - this.beverage = beverage; - } - - public String getDescription() { - return beverage.getDescription() + ", Milk"; - } - - public double cost() { - return .10 + beverage.cost(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Mocha.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Mocha.java deleted file mode 100755 index 1df34ae..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Mocha.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public class Mocha extends CondimentDecorator { - public Mocha(Beverage beverage) { - this.beverage = beverage; - } - - public String getDescription() { - return beverage.getDescription() + ", Mocha"; - } - - public double cost() { - return .20 + beverage.cost(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Soy.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Soy.java deleted file mode 100755 index ea6a92c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Soy.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public class Soy extends CondimentDecorator { - public Soy(Beverage beverage) { - this.beverage = beverage; - } - - public String getDescription() { - return beverage.getDescription() + ", Soy"; - } - - public double cost() { - return .15 + beverage.cost(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/StarbuzzCoffee.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/StarbuzzCoffee.java deleted file mode 100755 index 7d2fe33..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/StarbuzzCoffee.java +++ /dev/null @@ -1,24 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public class StarbuzzCoffee { - - public static void main(String args[]) { - Beverage beverage = new Espresso(); - System.out.println(beverage.getDescription() - + " $" + beverage.cost()); - - Beverage beverage2 = new DarkRoast(); - beverage2 = new Mocha(beverage2); - beverage2 = new Mocha(beverage2); - beverage2 = new Whip(beverage2); - System.out.println(beverage2.getDescription() - + " $" + beverage2.cost()); - - Beverage beverage3 = new HouseBlend(); - beverage3 = new Soy(beverage3); - beverage3 = new Mocha(beverage3); - beverage3 = new Whip(beverage3); - System.out.println(beverage3.getDescription() - + " $" + beverage3.cost()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Whip.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Whip.java deleted file mode 100755 index 318c187..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzz/Whip.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzz; - -public class Whip extends CondimentDecorator { - public Whip(Beverage beverage) { - this.beverage = beverage; - } - - public String getDescription() { - return beverage.getDescription() + ", Whip"; - } - - public double cost() { - return .10 + beverage.cost(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Beverage.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Beverage.java deleted file mode 100755 index 989f23c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Beverage.java +++ /dev/null @@ -1,21 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -public abstract class Beverage { - public enum Size { TALL, GRANDE, VENTI }; - Size size = Size.TALL; - String description = "Unknown Beverage"; - - public String getDescription() { - return description; - } - - public void setSize(Size size) { - this.size = size; - } - - public Size getSize() { - return this.size; - } - - public abstract double cost(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/CondimentDecorator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/CondimentDecorator.java deleted file mode 100755 index ddc96fb..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/CondimentDecorator.java +++ /dev/null @@ -1,10 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -public abstract class CondimentDecorator extends Beverage { - public Beverage beverage; - public abstract String getDescription(); - - public Size getSize() { - return beverage.getSize(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/DarkRoast.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/DarkRoast.java deleted file mode 100755 index a6e9afe..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/DarkRoast.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -public class DarkRoast extends Beverage { - public DarkRoast() { - description = "Dark Roast Coffee"; - } - - public double cost() { - return .99; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Decaf.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Decaf.java deleted file mode 100755 index 053d4ee..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Decaf.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -public class Decaf extends Beverage { - public Decaf() { - description = "Decaf Coffee"; - } - - public double cost() { - return 1.05; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Espresso.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Espresso.java deleted file mode 100755 index 2807569..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Espresso.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -public class Espresso extends Beverage { - - public Espresso() { - description = "Espresso"; - } - - public double cost() { - return 1.99; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/HouseBlend.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/HouseBlend.java deleted file mode 100755 index fa7044b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/HouseBlend.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -public class HouseBlend extends Beverage { - public HouseBlend() { - description = "House Blend Coffee"; - } - - public double cost() { - return .89; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Milk.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Milk.java deleted file mode 100755 index 6414ea5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Milk.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -public class Milk extends CondimentDecorator { - public Milk(Beverage beverage) { - this.beverage = beverage; - } - - public String getDescription() { - return beverage.getDescription() + ", Milk"; - } - - public double cost() { - return beverage.cost() + .10; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Mocha.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Mocha.java deleted file mode 100755 index 4c70abd..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Mocha.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -public class Mocha extends CondimentDecorator { - public Mocha(Beverage beverage) { - this.beverage = beverage; - } - - public String getDescription() { - return beverage.getDescription() + ", Mocha"; - } - - public double cost() { - return beverage.cost() + .20; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Soy.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Soy.java deleted file mode 100755 index ce3d58a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Soy.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -public class Soy extends CondimentDecorator { - public Soy(Beverage beverage) { - this.beverage = beverage; - } - - public String getDescription() { - return beverage.getDescription() + ", Soy"; - } - - public double cost() { - double cost = beverage.cost(); - if (beverage.getSize() == Size.TALL) { - cost += .10; - } else if (beverage.getSize() == Size.GRANDE) { - cost += .15; - } else if (beverage.getSize() == Size.VENTI) { - cost += .20; - } - return cost; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/StarbuzzCoffee.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/StarbuzzCoffee.java deleted file mode 100755 index 34bfa7b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/StarbuzzCoffee.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -import headfirst.designpatterns.decorator.starbuzzWithSizes.Beverage.Size; - -public class StarbuzzCoffee { - - public static void main(String args[]) { - Beverage beverage = new Espresso(); - System.out.println(beverage.getDescription() - + " $" + String.format("%.2f", beverage.cost())); - - Beverage beverage2 = new DarkRoast(); - beverage2 = new Mocha(beverage2); - beverage2 = new Mocha(beverage2); - beverage2 = new Whip(beverage2); - System.out.println(beverage2.getDescription() - + " $" + String.format("%.2f", beverage2.cost())); - - Beverage beverage3 = new HouseBlend(); - beverage3.setSize(Size.VENTI); - beverage3 = new Soy(beverage3); - beverage3 = new Mocha(beverage3); - beverage3 = new Whip(beverage3); - System.out.println(beverage3.getDescription() - + " $" + String.format("%.2f", beverage3.cost())); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Whip.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Whip.java deleted file mode 100755 index 890e10d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/decorator/starbuzzWithSizes/Whip.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.decorator.starbuzzWithSizes; - -public class Whip extends CondimentDecorator { - public Whip(Beverage beverage) { - this.beverage = beverage; - } - - public String getDescription() { - return beverage.getDescription() + ", Whip"; - } - - public double cost() { - return beverage.cost() + .10; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Duck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Duck.java deleted file mode 100755 index 6226ab2..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Duck.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.ducks; - -public interface Duck { - public void quack(); - public void fly(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckAdapter.java deleted file mode 100755 index 312acd4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckAdapter.java +++ /dev/null @@ -1,22 +0,0 @@ -package headfirst.designpatterns.ducks; -import java.util.Random; - -public class DuckAdapter implements Turkey { - Duck duck; - Random rand; - - public DuckAdapter(Duck duck) { - this.duck = duck; - rand = new Random(); - } - - public void gobble() { - duck.quack(); - } - - public void fly() { - if (rand.nextInt(5) == 0) { - duck.fly(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckTestDrive.java deleted file mode 100755 index 356bac7..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/DuckTestDrive.java +++ /dev/null @@ -1,25 +0,0 @@ -package headfirst.designpatterns.ducks; - -public class DuckTestDrive { - public static void main(String[] args) { - MallardDuck duck = new MallardDuck(); - - WildTurkey turkey = new WildTurkey(); - Duck turkeyAdapter = new TurkeyAdapter(turkey); - - System.out.println("The Turkey says..."); - turkey.gobble(); - turkey.fly(); - - System.out.println("\nThe Duck says..."); - testDuck(duck); - - System.out.println("\nThe TurkeyAdapter says..."); - testDuck(turkeyAdapter); - } - - static void testDuck(Duck duck) { - duck.quack(); - duck.fly(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/MallardDuck.java deleted file mode 100755 index f27b5df..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/MallardDuck.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.ducks; - -public class MallardDuck implements Duck { - public void quack() { - System.out.println("Quack"); - } - - public void fly() { - System.out.println("I'm flying"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Turkey.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Turkey.java deleted file mode 100755 index e486899..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/Turkey.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.ducks; - -public interface Turkey { - public void gobble(); - public void fly(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyAdapter.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyAdapter.java deleted file mode 100755 index 2f62e42..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyAdapter.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.ducks; - -public class TurkeyAdapter implements Duck { - Turkey turkey; - - public TurkeyAdapter(Turkey turkey) { - this.turkey = turkey; - } - - public void quack() { - turkey.gobble(); - } - - public void fly() { - for(int i=0; i < 5; i++) { - turkey.fly(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyTestDrive.java deleted file mode 100755 index 301f04a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/TurkeyTestDrive.java +++ /dev/null @@ -1,14 +0,0 @@ -package headfirst.designpatterns.ducks; - -public class TurkeyTestDrive { - public static void main(String[] args) { - MallardDuck duck = new MallardDuck(); - Turkey duckAdapter = new DuckAdapter(duck); - - for(int i=0;i<10;i++) { - System.out.println("The DuckAdapter says..."); - duckAdapter.gobble(); - duckAdapter.fly(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/WildTurkey.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/WildTurkey.java deleted file mode 100755 index 9a5cf01..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/ducks/WildTurkey.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.ducks; - -public class WildTurkey implements Turkey { - public void gobble() { - System.out.println("Gobble gobble"); - } - - public void fly() { - System.out.println("I'm flying a short distance"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Amplifier.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Amplifier.java deleted file mode 100755 index a320147..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Amplifier.java +++ /dev/null @@ -1,45 +0,0 @@ -package headfirst.designpatterns.facade.hometheater; - -public class Amplifier { - String description; - Tuner tuner; - StreamingPlayer player; - - public Amplifier(String description) { - this.description = description; - } - - public void on() { - System.out.println(description + " on"); - } - - public void off() { - System.out.println(description + " off"); - } - - public void setStereoSound() { - System.out.println(description + " stereo mode on"); - } - - public void setSurroundSound() { - System.out.println(description + " surround sound on (5 speakers, 1 subwoofer)"); - } - - public void setVolume(int level) { - System.out.println(description + " setting volume to " + level); - } - - public void setTuner(Tuner tuner) { - System.out.println(description + " setting tuner to " + player); - this.tuner = tuner; - } - - public void setStreamingPlayer(StreamingPlayer player) { - System.out.println(description + " setting Streaming player to " + player); - this.player = player; - } - - public String toString() { - return description; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/CdPlayer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/CdPlayer.java deleted file mode 100755 index 5cf810e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/CdPlayer.java +++ /dev/null @@ -1,55 +0,0 @@ -package headfirst.designpatterns.facade.hometheater; - -public class CdPlayer { - String description; - int currentTrack; - Amplifier amplifier; - String title; - - public CdPlayer(String description, Amplifier amplifier) { - this.description = description; - this.amplifier = amplifier; - } - - public void on() { - System.out.println(description + " on"); - } - - public void off() { - System.out.println(description + " off"); - } - - public void eject() { - title = null; - System.out.println(description + " eject"); - } - - public void play(String title) { - this.title = title; - currentTrack = 0; - System.out.println(description + " playing \"" + title + "\""); - } - - public void play(int track) { - if (title == null) { - System.out.println(description + " can't play track " + currentTrack + - ", no cd inserted"); - } else { - currentTrack = track; - System.out.println(description + " playing track " + currentTrack); - } - } - - public void stop() { - currentTrack = 0; - System.out.println(description + " stopped"); - } - - public void pause() { - System.out.println(description + " paused \"" + title + "\""); - } - - public String toString() { - return description; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterFacade.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterFacade.java deleted file mode 100755 index 5ac81d1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterFacade.java +++ /dev/null @@ -1,72 +0,0 @@ -package headfirst.designpatterns.facade.hometheater; - -public class HomeTheaterFacade { - Amplifier amp; - Tuner tuner; - StreamingPlayer player; - CdPlayer cd; - Projector projector; - TheaterLights lights; - Screen screen; - PopcornPopper popper; - - public HomeTheaterFacade(Amplifier amp, - Tuner tuner, - StreamingPlayer player, - Projector projector, - Screen screen, - TheaterLights lights, - PopcornPopper popper) { - - this.amp = amp; - this.tuner = tuner; - this.player = player; - this.projector = projector; - this.screen = screen; - this.lights = lights; - this.popper = popper; - } - - public void watchMovie(String movie) { - System.out.println("Get ready to watch a movie..."); - popper.on(); - popper.pop(); - lights.dim(10); - screen.down(); - projector.on(); - projector.wideScreenMode(); - amp.on(); - amp.setStreamingPlayer(player); - amp.setSurroundSound(); - amp.setVolume(5); - player.on(); - player.play(movie); - } - - - public void endMovie() { - System.out.println("Shutting movie theater down..."); - popper.off(); - lights.on(); - screen.up(); - projector.off(); - amp.off(); - player.stop(); - player.off(); - } - - public void listenToRadio(double frequency) { - System.out.println("Tuning in the airwaves..."); - tuner.on(); - tuner.setFrequency(frequency); - amp.on(); - amp.setVolume(5); - amp.setTuner(tuner); - } - - public void endRadio() { - System.out.println("Shutting down the tuner..."); - tuner.off(); - amp.off(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterTestDrive.java deleted file mode 100755 index 604f247..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/HomeTheaterTestDrive.java +++ /dev/null @@ -1,21 +0,0 @@ -package headfirst.designpatterns.facade.hometheater; - -public class HomeTheaterTestDrive { - public static void main(String[] args) { - Amplifier amp = new Amplifier("Amplifier"); - Tuner tuner = new Tuner("AM/FM Tuner", amp); - StreamingPlayer player = new StreamingPlayer("Streaming Player", amp); - CdPlayer cd = new CdPlayer("CD Player", amp); - Projector projector = new Projector("Projector", player); - TheaterLights lights = new TheaterLights("Theater Ceiling Lights"); - Screen screen = new Screen("Theater Screen"); - PopcornPopper popper = new PopcornPopper("Popcorn Popper"); - - HomeTheaterFacade homeTheater = - new HomeTheaterFacade(amp, tuner, player, - projector, screen, lights, popper); - - homeTheater.watchMovie("Raiders of the Lost Ark"); - homeTheater.endMovie(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/PopcornPopper.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/PopcornPopper.java deleted file mode 100755 index 35e4292..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/PopcornPopper.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.facade.hometheater; - -public class PopcornPopper { - String description; - - public PopcornPopper(String description) { - this.description = description; - } - - public void on() { - System.out.println(description + " on"); - } - - public void off() { - System.out.println(description + " off"); - } - - public void pop() { - System.out.println(description + " popping popcorn!"); - } - - - public String toString() { - return description; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Projector.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Projector.java deleted file mode 100755 index 8abeb8f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Projector.java +++ /dev/null @@ -1,31 +0,0 @@ -package headfirst.designpatterns.facade.hometheater; - -public class Projector { - String description; - StreamingPlayer player; - - public Projector(String description, StreamingPlayer player) { - this.description = description; - this.player = player; - } - - public void on() { - System.out.println(description + " on"); - } - - public void off() { - System.out.println(description + " off"); - } - - public void wideScreenMode() { - System.out.println(description + " in widescreen mode (16x9 aspect ratio)"); - } - - public void tvMode() { - System.out.println(description + " in tv mode (4x3 aspect ratio)"); - } - - public String toString() { - return description; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Screen.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Screen.java deleted file mode 100755 index a8b068b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Screen.java +++ /dev/null @@ -1,22 +0,0 @@ -package headfirst.designpatterns.facade.hometheater; - -public class Screen { - String description; - - public Screen(String description) { - this.description = description; - } - - public void up() { - System.out.println(description + " going up"); - } - - public void down() { - System.out.println(description + " going down"); - } - - - public String toString() { - return description; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/StreamingPlayer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/StreamingPlayer.java deleted file mode 100755 index 7db362b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/StreamingPlayer.java +++ /dev/null @@ -1,57 +0,0 @@ -package headfirst.designpatterns.facade.hometheater; - -public class StreamingPlayer { - String description; - int currentChapter; - Amplifier amplifier; - String movie; - - public StreamingPlayer(String description, Amplifier amplifier) { - this.description = description; - this.amplifier = amplifier; - } - - public void on() { - System.out.println(description + " on"); - } - - public void off() { - System.out.println(description + " off"); - } - - public void play(String movie) { - this.movie = movie; - currentChapter = 0; - System.out.println(description + " playing \"" + movie + "\""); - } - - public void play(int chapter) { - if (movie == null) { - System.out.println(description + " can't play chapter " + chapter + " no movie selected"); - } else { - currentChapter = chapter; - System.out.println(description + " playing chapter " + currentChapter + " of \"" + movie + "\""); - } - } - - public void stop() { - currentChapter = 0; - System.out.println(description + " stopped \"" + movie + "\""); - } - - public void pause() { - System.out.println(description + " paused \"" + movie + "\""); - } - - public void setTwoChannelAudio() { - System.out.println(description + " set two channel audio"); - } - - public void setSurroundAudio() { - System.out.println(description + " set surround audio"); - } - - public String toString() { - return description; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/TheaterLights.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/TheaterLights.java deleted file mode 100755 index f034adb..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/TheaterLights.java +++ /dev/null @@ -1,25 +0,0 @@ -package headfirst.designpatterns.facade.hometheater; - -public class TheaterLights { - String description; - - public TheaterLights(String description) { - this.description = description; - } - - public void on() { - System.out.println(description + " on"); - } - - public void off() { - System.out.println(description + " off"); - } - - public void dim(int level) { - System.out.println(description + " dimming to " + level + "%"); - } - - public String toString() { - return description; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Tuner.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Tuner.java deleted file mode 100755 index c68dc30..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/facade/hometheater/Tuner.java +++ /dev/null @@ -1,36 +0,0 @@ -package headfirst.designpatterns.facade.hometheater; - -public class Tuner { - String description; - Amplifier amplifier; - double frequency; - - public Tuner(String description, Amplifier amplifier) { - this.description = description; - } - - public void on() { - System.out.println(description + " on"); - } - - public void off() { - System.out.println(description + " off"); - } - - public void setFrequency(double frequency) { - System.out.println(description + " setting frequency to " + frequency); - this.frequency = frequency; - } - - public void setAm() { - System.out.println(description + " setting AM mode"); - } - - public void setFm() { - System.out.println(description + " setting FM mode"); - } - - public String toString() { - return description; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Calendar.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Calendar.java deleted file mode 100644 index f0a256e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Calendar.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.factory.challenge; - -import java.util.*; - -public abstract class Calendar { - Zone zone; - public void print() { - System.out.println("--- " + zone.getDisplayName() + " Calendar ---"); - // print all appointments in correct time zone - System.out.println("Offset from GMT: " + zone.getOffset()); - } - public abstract void createCalendar(List appointments); -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/CalendarTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/CalendarTestDrive.java deleted file mode 100755 index bfb6bb6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/CalendarTestDrive.java +++ /dev/null @@ -1,14 +0,0 @@ -package headfirst.designpatterns.factory.challenge; - -import java.util.*; - -public class CalendarTestDrive { - - public static void main(String[] args) { - ZoneFactory zoneFactory = new ZoneFactory(); - Calendar calendar = new PacificCalendar(zoneFactory); - List appts = Arrays.asList("appt 1", "appt 2"); - calendar.createCalendar(appts); - calendar.print(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/PacificCalendar.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/PacificCalendar.java deleted file mode 100644 index f1cf599..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/PacificCalendar.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.factory.challenge; - -import java.util.*; - -public class PacificCalendar extends Calendar { - public PacificCalendar(ZoneFactory zoneFactory) { - zone = zoneFactory.createZone("US/Pacific"); - // make a calendar for the pacific zone - // ... - } - public void createCalendar(List appointments) { - // make calendar from appointments - System.out.println("Making the calendar"); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Zone.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Zone.java deleted file mode 100644 index e1379f2..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/Zone.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.challenge; - -public class Zone { - String displayName; - int offset; - public String getDisplayName() { return displayName; } - public int getOffset() { return offset; } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneCentral.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneCentral.java deleted file mode 100644 index 97d6632..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneCentral.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.challenge; - -public class ZoneCentral extends Zone { - public ZoneCentral() { - displayName = "US/Central"; - offset = -6; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneEastern.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneEastern.java deleted file mode 100644 index f758a87..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneEastern.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.challenge; - -public class ZoneEastern extends Zone { - public ZoneEastern() { - displayName = "US/Eastern"; - offset = -5; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneFactory.java deleted file mode 100644 index f23c757..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.factory.challenge; - -public class ZoneFactory { - public Zone createZone(String zoneId) { - Zone zone = null; - if (zoneId == "US/Pacific") { - zone = new ZonePacific(); - } - else if (zoneId == "US/Mountain") { - zone = new ZoneMountain(); - } - else if (zoneId == "US/Central") { - zone = new ZoneCentral(); - } - else if (zoneId == "US/Eastern") { - zone = new ZoneEastern(); - } - return zone; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneMountain.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneMountain.java deleted file mode 100644 index 13731ea..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZoneMountain.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.challenge; - -public class ZoneMountain extends Zone { - public ZoneMountain() { - displayName = "US/Mountain"; - offset = -7; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZonePacific.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZonePacific.java deleted file mode 100644 index 080a9a6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/challenge/ZonePacific.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.challenge; - -public class ZonePacific extends Zone { - public ZonePacific() { - displayName = "US/Pacific"; - offset = -8; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/BlackOlives.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/BlackOlives.java deleted file mode 100755 index 4688924..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/BlackOlives.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class BlackOlives implements Veggies { - - public String toString() { - return "Black Olives"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Cheese.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Cheese.java deleted file mode 100755 index b2c3388..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Cheese.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public interface Cheese { - public String toString(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/CheesePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/CheesePizza.java deleted file mode 100755 index 1087f07..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/CheesePizza.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class CheesePizza extends Pizza { - PizzaIngredientFactory ingredientFactory; - - public CheesePizza(PizzaIngredientFactory ingredientFactory) { - this.ingredientFactory = ingredientFactory; - } - - void prepare() { - System.out.println("Preparing " + name); - dough = ingredientFactory.createDough(); - sauce = ingredientFactory.createSauce(); - cheese = ingredientFactory.createCheese(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaIngredientFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaIngredientFactory.java deleted file mode 100755 index 27c2f82..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaIngredientFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class ChicagoPizzaIngredientFactory - implements PizzaIngredientFactory -{ - - public Dough createDough() { - return new ThickCrustDough(); - } - - public Sauce createSauce() { - return new PlumTomatoSauce(); - } - - public Cheese createCheese() { - return new MozzarellaCheese(); - } - - public Veggies[] createVeggies() { - Veggies veggies[] = { new BlackOlives(), - new Spinach(), - new Eggplant() }; - return veggies; - } - - public Pepperoni createPepperoni() { - return new SlicedPepperoni(); - } - - public Clams createClam() { - return new FrozenClams(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaStore.java deleted file mode 100755 index 230f7e3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ChicagoPizzaStore.java +++ /dev/null @@ -1,33 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class ChicagoPizzaStore extends PizzaStore { - - protected Pizza createPizza(String item) { - Pizza pizza = null; - PizzaIngredientFactory ingredientFactory = - new ChicagoPizzaIngredientFactory(); - - if (item.equals("cheese")) { - - pizza = new CheesePizza(ingredientFactory); - pizza.setName("Chicago Style Cheese Pizza"); - - } else if (item.equals("veggie")) { - - pizza = new VeggiePizza(ingredientFactory); - pizza.setName("Chicago Style Veggie Pizza"); - - } else if (item.equals("clam")) { - - pizza = new ClamPizza(ingredientFactory); - pizza.setName("Chicago Style Clam Pizza"); - - } else if (item.equals("pepperoni")) { - - pizza = new PepperoniPizza(ingredientFactory); - pizza.setName("Chicago Style Pepperoni Pizza"); - - } - return pizza; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ClamPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ClamPizza.java deleted file mode 100755 index 1950ef9..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ClamPizza.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class ClamPizza extends Pizza { - PizzaIngredientFactory ingredientFactory; - - public ClamPizza(PizzaIngredientFactory ingredientFactory) { - this.ingredientFactory = ingredientFactory; - } - - void prepare() { - System.out.println("Preparing " + name); - dough = ingredientFactory.createDough(); - sauce = ingredientFactory.createSauce(); - cheese = ingredientFactory.createCheese(); - clam = ingredientFactory.createClam(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Clams.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Clams.java deleted file mode 100755 index 994ddca..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Clams.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public interface Clams { - public String toString(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Dough.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Dough.java deleted file mode 100755 index 88f90ae..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Dough.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public interface Dough { - public String toString(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Eggplant.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Eggplant.java deleted file mode 100755 index ab4f970..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Eggplant.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class Eggplant implements Veggies { - - public String toString() { - return "Eggplant"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FreshClams.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FreshClams.java deleted file mode 100755 index 4d47054..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FreshClams.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class FreshClams implements Clams { - - public String toString() { - return "Fresh Clams from Long Island Sound"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FrozenClams.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FrozenClams.java deleted file mode 100755 index 17a2c2f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/FrozenClams.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class FrozenClams implements Clams { - - public String toString() { - return "Frozen Clams from Chesapeake Bay"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Garlic.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Garlic.java deleted file mode 100755 index 58ecfd6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Garlic.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class Garlic implements Veggies { - - public String toString() { - return "Garlic"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MarinaraSauce.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MarinaraSauce.java deleted file mode 100755 index 3c4f153..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MarinaraSauce.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class MarinaraSauce implements Sauce { - public String toString() { - return "Marinara Sauce"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MozzarellaCheese.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MozzarellaCheese.java deleted file mode 100755 index ed22b75..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/MozzarellaCheese.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class MozzarellaCheese implements Cheese { - - public String toString() { - return "Shredded Mozzarella"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Mushroom.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Mushroom.java deleted file mode 100755 index ed9dd06..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Mushroom.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class Mushroom implements Veggies { - - public String toString() { - return "Mushrooms"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaIngredientFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaIngredientFactory.java deleted file mode 100755 index 996a98c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaIngredientFactory.java +++ /dev/null @@ -1,29 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class NYPizzaIngredientFactory implements PizzaIngredientFactory { - - public Dough createDough() { - return new ThinCrustDough(); - } - - public Sauce createSauce() { - return new MarinaraSauce(); - } - - public Cheese createCheese() { - return new ReggianoCheese(); - } - - public Veggies[] createVeggies() { - Veggies veggies[] = { new Garlic(), new Onion(), new Mushroom(), new RedPepper() }; - return veggies; - } - - public Pepperoni createPepperoni() { - return new SlicedPepperoni(); - } - - public Clams createClam() { - return new FreshClams(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaStore.java deleted file mode 100755 index d0ef2a1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/NYPizzaStore.java +++ /dev/null @@ -1,33 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class NYPizzaStore extends PizzaStore { - - protected Pizza createPizza(String item) { - Pizza pizza = null; - PizzaIngredientFactory ingredientFactory = - new NYPizzaIngredientFactory(); - - if (item.equals("cheese")) { - - pizza = new CheesePizza(ingredientFactory); - pizza.setName("New York Style Cheese Pizza"); - - } else if (item.equals("veggie")) { - - pizza = new VeggiePizza(ingredientFactory); - pizza.setName("New York Style Veggie Pizza"); - - } else if (item.equals("clam")) { - - pizza = new ClamPizza(ingredientFactory); - pizza.setName("New York Style Clam Pizza"); - - } else if (item.equals("pepperoni")) { - - pizza = new PepperoniPizza(ingredientFactory); - pizza.setName("New York Style Pepperoni Pizza"); - - } - return pizza; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Onion.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Onion.java deleted file mode 100755 index 6b9520a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Onion.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class Onion implements Veggies { - - public String toString() { - return "Onion"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ParmesanCheese.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ParmesanCheese.java deleted file mode 100755 index 2f16a85..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ParmesanCheese.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class ParmesanCheese implements Cheese { - - public String toString() { - return "Shredded Parmesan"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pepperoni.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pepperoni.java deleted file mode 100755 index dd46b5f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pepperoni.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public interface Pepperoni { - public String toString(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PepperoniPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PepperoniPizza.java deleted file mode 100755 index 32c0809..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PepperoniPizza.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class PepperoniPizza extends Pizza { - PizzaIngredientFactory ingredientFactory; - - public PepperoniPizza(PizzaIngredientFactory ingredientFactory) { - this.ingredientFactory = ingredientFactory; - } - - void prepare() { - System.out.println("Preparing " + name); - dough = ingredientFactory.createDough(); - sauce = ingredientFactory.createSauce(); - cheese = ingredientFactory.createCheese(); - veggies = ingredientFactory.createVeggies(); - pepperoni = ingredientFactory.createPepperoni(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pizza.java deleted file mode 100755 index 67edec0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Pizza.java +++ /dev/null @@ -1,69 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public abstract class Pizza { - String name; - - Dough dough; - Sauce sauce; - Veggies veggies[]; - Cheese cheese; - Pepperoni pepperoni; - Clams clam; - - abstract void prepare(); - - void bake() { - System.out.println("Bake for 25 minutes at 350"); - } - - void cut() { - System.out.println("Cutting the pizza into diagonal slices"); - } - - void box() { - System.out.println("Place pizza in official PizzaStore box"); - } - - void setName(String name) { - this.name = name; - } - - String getName() { - return name; - } - - public String toString() { - StringBuffer result = new StringBuffer(); - result.append("---- " + name + " ----\n"); - if (dough != null) { - result.append(dough); - result.append("\n"); - } - if (sauce != null) { - result.append(sauce); - result.append("\n"); - } - if (cheese != null) { - result.append(cheese); - result.append("\n"); - } - if (veggies != null) { - for (int i = 0; i < veggies.length; i++) { - result.append(veggies[i]); - if (i < veggies.length-1) { - result.append(", "); - } - } - result.append("\n"); - } - if (clam != null) { - result.append(clam); - result.append("\n"); - } - if (pepperoni != null) { - result.append(pepperoni); - result.append("\n"); - } - return result.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaIngredientFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaIngredientFactory.java deleted file mode 100755 index 5a21dad..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaIngredientFactory.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public interface PizzaIngredientFactory { - - public Dough createDough(); - public Sauce createSauce(); - public Cheese createCheese(); - public Veggies[] createVeggies(); - public Pepperoni createPepperoni(); - public Clams createClam(); - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaStore.java deleted file mode 100755 index 7221648..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaStore.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public abstract class PizzaStore { - - protected abstract Pizza createPizza(String item); - - public Pizza orderPizza(String type) { - Pizza pizza = createPizza(type); - System.out.println("--- Making a " + pizza.getName() + " ---"); - pizza.prepare(); - pizza.bake(); - pizza.cut(); - pizza.box(); - return pizza; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaTestDrive.java deleted file mode 100755 index ae3413c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PizzaTestDrive.java +++ /dev/null @@ -1,33 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class PizzaTestDrive { - - public static void main(String[] args) { - PizzaStore nyStore = new NYPizzaStore(); - PizzaStore chicagoStore = new ChicagoPizzaStore(); - - Pizza pizza = nyStore.orderPizza("cheese"); - System.out.println("Ethan ordered a " + pizza + "\n"); - - pizza = chicagoStore.orderPizza("cheese"); - System.out.println("Joel ordered a " + pizza + "\n"); - - pizza = nyStore.orderPizza("clam"); - System.out.println("Ethan ordered a " + pizza + "\n"); - - pizza = chicagoStore.orderPizza("clam"); - System.out.println("Joel ordered a " + pizza + "\n"); - - pizza = nyStore.orderPizza("pepperoni"); - System.out.println("Ethan ordered a " + pizza + "\n"); - - pizza = chicagoStore.orderPizza("pepperoni"); - System.out.println("Joel ordered a " + pizza + "\n"); - - pizza = nyStore.orderPizza("veggie"); - System.out.println("Ethan ordered a " + pizza + "\n"); - - pizza = chicagoStore.orderPizza("veggie"); - System.out.println("Joel ordered a " + pizza + "\n"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PlumTomatoSauce.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PlumTomatoSauce.java deleted file mode 100755 index b13a108..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/PlumTomatoSauce.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class PlumTomatoSauce implements Sauce { - public String toString() { - return "Tomato sauce with plum tomatoes"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/RedPepper.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/RedPepper.java deleted file mode 100755 index d893415..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/RedPepper.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class RedPepper implements Veggies { - - public String toString() { - return "Red Pepper"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ReggianoCheese.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ReggianoCheese.java deleted file mode 100755 index 987e653..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ReggianoCheese.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class ReggianoCheese implements Cheese { - - public String toString() { - return "Reggiano Cheese"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Sauce.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Sauce.java deleted file mode 100755 index 8506021..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Sauce.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public interface Sauce { - public String toString(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/SlicedPepperoni.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/SlicedPepperoni.java deleted file mode 100755 index 87932ed..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/SlicedPepperoni.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class SlicedPepperoni implements Pepperoni { - - public String toString() { - return "Sliced Pepperoni"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Spinach.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Spinach.java deleted file mode 100755 index 1489084..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Spinach.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class Spinach implements Veggies { - - public String toString() { - return "Spinach"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThickCrustDough.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThickCrustDough.java deleted file mode 100755 index 2f26c80..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThickCrustDough.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class ThickCrustDough implements Dough { - public String toString() { - return "ThickCrust style extra thick crust dough"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThinCrustDough.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThinCrustDough.java deleted file mode 100755 index 8993092..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/ThinCrustDough.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class ThinCrustDough implements Dough { - public String toString() { - return "Thin Crust Dough"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/VeggiePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/VeggiePizza.java deleted file mode 100755 index a8611c4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/VeggiePizza.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public class VeggiePizza extends Pizza { - PizzaIngredientFactory ingredientFactory; - - public VeggiePizza(PizzaIngredientFactory ingredientFactory) { - this.ingredientFactory = ingredientFactory; - } - - void prepare() { - System.out.println("Preparing " + name); - dough = ingredientFactory.createDough(); - sauce = ingredientFactory.createSauce(); - cheese = ingredientFactory.createCheese(); - veggies = ingredientFactory.createVeggies(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Veggies.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Veggies.java deleted file mode 100755 index 61c8b84..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzaaf/Veggies.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.factory.pizzaaf; - -public interface Veggies { - public String toString(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoPizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoPizzaStore.java deleted file mode 100755 index 197267b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoPizzaStore.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class ChicagoPizzaStore extends PizzaStore { - - Pizza createPizza(String item) { - if (item.equals("cheese")) { - return new ChicagoStyleCheesePizza(); - } else if (item.equals("veggie")) { - return new ChicagoStyleVeggiePizza(); - } else if (item.equals("clam")) { - return new ChicagoStyleClamPizza(); - } else if (item.equals("pepperoni")) { - return new ChicagoStylePepperoniPizza(); - } else return null; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleCheesePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleCheesePizza.java deleted file mode 100755 index bfacdd4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleCheesePizza.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class ChicagoStyleCheesePizza extends Pizza { - - public ChicagoStyleCheesePizza() { - name = "Chicago Style Deep Dish Cheese Pizza"; - dough = "Extra Thick Crust Dough"; - sauce = "Plum Tomato Sauce"; - - toppings.add("Shredded Mozzarella Cheese"); - } - - void cut() { - System.out.println("Cutting the pizza into square slices"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleClamPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleClamPizza.java deleted file mode 100755 index 43f6314..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleClamPizza.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class ChicagoStyleClamPizza extends Pizza { - public ChicagoStyleClamPizza() { - name = "Chicago Style Clam Pizza"; - dough = "Extra Thick Crust Dough"; - sauce = "Plum Tomato Sauce"; - - toppings.add("Shredded Mozzarella Cheese"); - toppings.add("Frozen Clams from Chesapeake Bay"); - } - - void cut() { - System.out.println("Cutting the pizza into square slices"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStylePepperoniPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStylePepperoniPizza.java deleted file mode 100755 index 5efc771..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStylePepperoniPizza.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class ChicagoStylePepperoniPizza extends Pizza { - public ChicagoStylePepperoniPizza() { - name = "Chicago Style Pepperoni Pizza"; - dough = "Extra Thick Crust Dough"; - sauce = "Plum Tomato Sauce"; - - toppings.add("Shredded Mozzarella Cheese"); - toppings.add("Black Olives"); - toppings.add("Spinach"); - toppings.add("Eggplant"); - toppings.add("Sliced Pepperoni"); - } - - void cut() { - System.out.println("Cutting the pizza into square slices"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleVeggiePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleVeggiePizza.java deleted file mode 100755 index f086d3e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/ChicagoStyleVeggiePizza.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class ChicagoStyleVeggiePizza extends Pizza { - public ChicagoStyleVeggiePizza() { - name = "Chicago Deep Dish Veggie Pizza"; - dough = "Extra Thick Crust Dough"; - sauce = "Plum Tomato Sauce"; - - toppings.add("Shredded Mozzarella Cheese"); - toppings.add("Black Olives"); - toppings.add("Spinach"); - toppings.add("Eggplant"); - } - - void cut() { - System.out.println("Cutting the pizza into square slices"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/DependentPizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/DependentPizzaStore.java deleted file mode 100755 index 9dbed2c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/DependentPizzaStore.java +++ /dev/null @@ -1,37 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class DependentPizzaStore { - - public Pizza createPizza(String style, String type) { - Pizza pizza = null; - if (style.equals("NY")) { - if (type.equals("cheese")) { - pizza = new NYStyleCheesePizza(); - } else if (type.equals("veggie")) { - pizza = new NYStyleVeggiePizza(); - } else if (type.equals("clam")) { - pizza = new NYStyleClamPizza(); - } else if (type.equals("pepperoni")) { - pizza = new NYStylePepperoniPizza(); - } - } else if (style.equals("Chicago")) { - if (type.equals("cheese")) { - pizza = new ChicagoStyleCheesePizza(); - } else if (type.equals("veggie")) { - pizza = new ChicagoStyleVeggiePizza(); - } else if (type.equals("clam")) { - pizza = new ChicagoStyleClamPizza(); - } else if (type.equals("pepperoni")) { - pizza = new ChicagoStylePepperoniPizza(); - } - } else { - System.out.println("Error: invalid type of pizza"); - return null; - } - pizza.prepare(); - pizza.bake(); - pizza.cut(); - pizza.box(); - return pizza; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYPizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYPizzaStore.java deleted file mode 100755 index 276de04..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYPizzaStore.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class NYPizzaStore extends PizzaStore { - - Pizza createPizza(String item) { - if (item.equals("cheese")) { - return new NYStyleCheesePizza(); - } else if (item.equals("veggie")) { - return new NYStyleVeggiePizza(); - } else if (item.equals("clam")) { - return new NYStyleClamPizza(); - } else if (item.equals("pepperoni")) { - return new NYStylePepperoniPizza(); - } else return null; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleCheesePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleCheesePizza.java deleted file mode 100755 index 8107096..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleCheesePizza.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class NYStyleCheesePizza extends Pizza { - - public NYStyleCheesePizza() { - name = "NY Style Sauce and Cheese Pizza"; - dough = "Thin Crust Dough"; - sauce = "Marinara Sauce"; - - toppings.add("Grated Reggiano Cheese"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleClamPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleClamPizza.java deleted file mode 100755 index d5037ce..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleClamPizza.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class NYStyleClamPizza extends Pizza { - - public NYStyleClamPizza() { - name = "NY Style Clam Pizza"; - dough = "Thin Crust Dough"; - sauce = "Marinara Sauce"; - - toppings.add("Grated Reggiano Cheese"); - toppings.add("Fresh Clams from Long Island Sound"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStylePepperoniPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStylePepperoniPizza.java deleted file mode 100755 index cbf1f88..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStylePepperoniPizza.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class NYStylePepperoniPizza extends Pizza { - - public NYStylePepperoniPizza() { - name = "NY Style Pepperoni Pizza"; - dough = "Thin Crust Dough"; - sauce = "Marinara Sauce"; - - toppings.add("Grated Reggiano Cheese"); - toppings.add("Sliced Pepperoni"); - toppings.add("Garlic"); - toppings.add("Onion"); - toppings.add("Mushrooms"); - toppings.add("Red Pepper"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleVeggiePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleVeggiePizza.java deleted file mode 100755 index ce10573..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/NYStyleVeggiePizza.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class NYStyleVeggiePizza extends Pizza { - - public NYStyleVeggiePizza() { - name = "NY Style Veggie Pizza"; - dough = "Thin Crust Dough"; - sauce = "Marinara Sauce"; - - toppings.add("Grated Reggiano Cheese"); - toppings.add("Garlic"); - toppings.add("Onion"); - toppings.add("Mushrooms"); - toppings.add("Red Pepper"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/Pizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/Pizza.java deleted file mode 100755 index 6f7cd3b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/Pizza.java +++ /dev/null @@ -1,50 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -import java.util.ArrayList; - -public abstract class Pizza { - String name; - String dough; - String sauce; - ArrayList toppings = new ArrayList(); - - void prepare() { - System.out.println("Prepare " + name); - System.out.println("Tossing dough..."); - System.out.println("Adding sauce..."); - System.out.println("Adding toppings: "); - for (String topping : toppings) { - System.out.println(" " + topping); - } - } - - void bake() { - System.out.println("Bake for 25 minutes at 350"); - } - - void cut() { - System.out.println("Cut the pizza into diagonal slices"); - } - - void box() { - System.out.println("Place pizza in official PizzaStore box"); - } - - public String getName() { - return name; - } - - public String toString() { - StringBuffer display = new StringBuffer(); - display.append("---- " + name + " ----\n"); - display.append(dough + "\n"); - display.append(sauce + "\n"); - for (String topping : toppings) { - display.append(topping + "\n"); - } - return display.toString(); - } -} - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaStore.java deleted file mode 100755 index 1b715b4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaStore.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public abstract class PizzaStore { - - abstract Pizza createPizza(String item); - - public Pizza orderPizza(String type) { - Pizza pizza = createPizza(type); - System.out.println("--- Making a " + pizza.getName() + " ---"); - pizza.prepare(); - pizza.bake(); - pizza.cut(); - pizza.box(); - return pizza; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaTestDrive.java deleted file mode 100755 index 13882c5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzafm/PizzaTestDrive.java +++ /dev/null @@ -1,33 +0,0 @@ -package headfirst.designpatterns.factory.pizzafm; - -public class PizzaTestDrive { - - public static void main(String[] args) { - PizzaStore nyStore = new NYPizzaStore(); - PizzaStore chicagoStore = new ChicagoPizzaStore(); - - Pizza pizza = nyStore.orderPizza("cheese"); - System.out.println("Ethan ordered a " + pizza.getName() + "\n"); - - pizza = chicagoStore.orderPizza("cheese"); - System.out.println("Joel ordered a " + pizza.getName() + "\n"); - - pizza = nyStore.orderPizza("clam"); - System.out.println("Ethan ordered a " + pizza.getName() + "\n"); - - pizza = chicagoStore.orderPizza("clam"); - System.out.println("Joel ordered a " + pizza.getName() + "\n"); - - pizza = nyStore.orderPizza("pepperoni"); - System.out.println("Ethan ordered a " + pizza.getName() + "\n"); - - pizza = chicagoStore.orderPizza("pepperoni"); - System.out.println("Joel ordered a " + pizza.getName() + "\n"); - - pizza = nyStore.orderPizza("veggie"); - System.out.println("Ethan ordered a " + pizza.getName() + "\n"); - - pizza = chicagoStore.orderPizza("veggie"); - System.out.println("Joel ordered a " + pizza.getName() + "\n"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/CheesePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/CheesePizza.java deleted file mode 100755 index c6cacbf..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/CheesePizza.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.factory.pizzas; - -public class CheesePizza extends Pizza { - public CheesePizza() { - name = "Cheese Pizza"; - dough = "Regular Crust"; - sauce = "Marinara Pizza Sauce"; - toppings.add("Fresh Mozzarella"); - toppings.add("Parmesan"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/ClamPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/ClamPizza.java deleted file mode 100755 index e132963..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/ClamPizza.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.factory.pizzas; - -public class ClamPizza extends Pizza { - public ClamPizza() { - name = "Clam Pizza"; - dough = "Thin crust"; - sauce = "White garlic sauce"; - toppings.add("Clams"); - toppings.add("Grated parmesan cheese"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PepperoniPizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PepperoniPizza.java deleted file mode 100755 index f01cc7d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PepperoniPizza.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.factory.pizzas; - -public class PepperoniPizza extends Pizza { - public PepperoniPizza() { - name = "Pepperoni Pizza"; - dough = "Crust"; - sauce = "Marinara sauce"; - toppings.add("Sliced Pepperoni"); - toppings.add("Sliced Onion"); - toppings.add("Grated parmesan cheese"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/Pizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/Pizza.java deleted file mode 100755 index 1fc931f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/Pizza.java +++ /dev/null @@ -1,43 +0,0 @@ -package headfirst.designpatterns.factory.pizzas; - -import java.util.*; - -abstract public class Pizza { - String name; - String dough; - String sauce; - List toppings = new ArrayList(); - - public String getName() { - return name; - } - - public void prepare() { - System.out.println("Preparing " + name); - } - - public void bake() { - System.out.println("Baking " + name); - } - - public void cut() { - System.out.println("Cutting " + name); - } - - public void box() { - System.out.println("Boxing " + name); - } - - public String toString() { - // code to display pizza name and ingredients - StringBuffer display = new StringBuffer(); - display.append("---- " + name + " ----\n"); - display.append(dough + "\n"); - display.append(sauce + "\n"); - for (String topping : toppings) { - display.append(topping + "\n"); - } - return display.toString(); - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaStore.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaStore.java deleted file mode 100755 index e36d757..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaStore.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.factory.pizzas; - -public class PizzaStore { - SimplePizzaFactory factory; - - public PizzaStore(SimplePizzaFactory factory) { - this.factory = factory; - } - - public Pizza orderPizza(String type) { - Pizza pizza; - - pizza = factory.createPizza(type); - - pizza.prepare(); - pizza.bake(); - pizza.cut(); - pizza.box(); - - return pizza; - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaTestDrive.java deleted file mode 100755 index 6cf4a96..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/PizzaTestDrive.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.factory.pizzas; - -public class PizzaTestDrive { - - public static void main(String[] args) { - SimplePizzaFactory factory = new SimplePizzaFactory(); - PizzaStore store = new PizzaStore(factory); - - Pizza pizza = store.orderPizza("cheese"); - System.out.println("We ordered a " + pizza.getName() + "\n"); - System.out.println(pizza); - - pizza = store.orderPizza("veggie"); - System.out.println("We ordered a " + pizza.getName() + "\n"); - System.out.println(pizza); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/SimplePizzaFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/SimplePizzaFactory.java deleted file mode 100755 index 291b3d3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/SimplePizzaFactory.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.factory.pizzas; - -public class SimplePizzaFactory { - - public Pizza createPizza(String type) { - Pizza pizza = null; - - if (type.equals("cheese")) { - pizza = new CheesePizza(); - } else if (type.equals("pepperoni")) { - pizza = new PepperoniPizza(); - } else if (type.equals("clam")) { - pizza = new ClamPizza(); - } else if (type.equals("veggie")) { - pizza = new VeggiePizza(); - } - return pizza; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/VeggiePizza.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/VeggiePizza.java deleted file mode 100755 index 0d2f799..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/factory/pizzas/VeggiePizza.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.factory.pizzas; - -public class VeggiePizza extends Pizza { - public VeggiePizza() { - name = "Veggie Pizza"; - dough = "Crust"; - sauce = "Marinara sauce"; - toppings.add("Shredded mozzarella"); - toppings.add("Grated parmesan"); - toppings.add("Diced onion"); - toppings.add("Sliced mushrooms"); - toppings.add("Sliced red pepper"); - toppings.add("Sliced black olives"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Client.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Client.java deleted file mode 100644 index 09500d2..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Client.java +++ /dev/null @@ -1,22 +0,0 @@ -package headfirst.designpatterns.flyweight; - -public class Client { - public static void main(String[] args) { - int[][] deciduousLocations = {{1, 1}, {33, 50}, {100, 90}}; - int[][] coniferLocations = {{10, 87}, {24, 76}, {2, 64}}; - TreeFactory treeFactory = new TreeFactory(); // creates the two flyweights - Tree d, c; - try { - d = treeFactory.getTree("deciduous"); - c = treeFactory.getTree("conifer"); - for (int[] location : deciduousLocations) { - d.display(location[0], location[1]); - } - for (int[] location : coniferLocations) { - c.display(location[0], location[1]); - } - } catch (Exception e) { - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/ConiferTree.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/ConiferTree.java deleted file mode 100644 index e2861ed..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/ConiferTree.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.flyweight; - -public class ConiferTree implements Tree { - // Complex trunk, branch, needle graphic data - public void display(int x, int y) { - System.out.println("Conifer tree is located at " + x + ", " + y); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/DeciduousTree.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/DeciduousTree.java deleted file mode 100644 index 4ac61c4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/DeciduousTree.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.flyweight; - -import java.time.*; - -public class DeciduousTree implements Tree { - // complex trunk, branch, leaf graphic data - public void display(int x, int y) { - System.out.println("Deciduous tree is located at " + x + ", " + y); - if (!this.isWithinRange(LocalDate.now())) { - System.out.println("The tree currently has no leaves"); - } - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Tree.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Tree.java deleted file mode 100644 index 8e42f65..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/Tree.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.flyweight; - -import java.time.*; - -public interface Tree { - public void display(int x, int y); - public default boolean isWithinRange(LocalDate aDate) { - Month month = aDate.getMonth(); - return (month.getValue() > 2) && (month.getValue() < 11); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/TreeFactory.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/TreeFactory.java deleted file mode 100644 index c158215..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/flyweight/TreeFactory.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.flyweight; - -public class TreeFactory { - Tree d, c = null; - public TreeFactory() { - this.d = new DeciduousTree(); - this.c = new ConiferTree(); - } - public Tree getTree(String type) throws Exception { - if (type.equals("deciduous")) { - return this.d; - } else if (type.equals("conifer")) { - return this.c; - } else { - throw new Exception("Invalid kind of tree"); - } - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/AlternatingDinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/AlternatingDinerMenuIterator.java deleted file mode 100755 index ef822cb..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/AlternatingDinerMenuIterator.java +++ /dev/null @@ -1,28 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -import java.util.Calendar; - -public class AlternatingDinerMenuIterator implements Iterator { - MenuItem[] list; - int position; - - public AlternatingDinerMenuIterator(MenuItem[] list) { - this.list = list; - position = Calendar.DAY_OF_WEEK % 2; - } - public MenuItem next() { - MenuItem menuItem = list[position]; - position = position + 2; - return menuItem; - } - public boolean hasNext() { - if (position >= list.length || list[position] == null) { - return false; - } else { - return true; - } - } - public String toString() { - return "Alternating Diner Menu Iterator"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayIterator.java deleted file mode 100755 index a9a5b20..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayIterator.java +++ /dev/null @@ -1,24 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -public class ArrayIterator implements Iterator { - MenuItem[] items; - int position = 0; - - public ArrayIterator(MenuItem[] items) { - this.items = items; - } - - public MenuItem next() { - MenuItem menuItem = items[position]; - position = position + 1; - return menuItem; - } - - public boolean hasNext() { - if (position >= items.length || items[position] == null) { - return false; - } else { - return true; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayListIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayListIterator.java deleted file mode 100755 index 02a802b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/ArrayListIterator.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -import java.util.ArrayList; - -public class ArrayListIterator implements Iterator { - ArrayList items; - int position = 0; - - public ArrayListIterator(ArrayList items) { - this.items = items; - } - - public MenuItem next() { - MenuItem item = items.get(position); - position = position + 1; - return item; - } - - public boolean hasNext() { - if (position >= items.size()) { - return false; - } else { - return true; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenu.java deleted file mode 100755 index ee87f4a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenu.java +++ /dev/null @@ -1,51 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -public class DinerMenu implements Menu { - static final int MAX_ITEMS = 6; - int numberOfItems = 0; - MenuItem[] menuItems; - - public DinerMenu() { - menuItems = new MenuItem[MAX_ITEMS]; - - addItem("Vegetarian BLT", - "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); - addItem("BLT", - "Bacon with lettuce & tomato on whole wheat", false, 2.99); - addItem("Soup of the day", - "Soup of the day, with a side of potato salad", false, 3.29); - addItem("Hotdog", - "A hot dog, with sauerkraut, relish, onions, topped with cheese", - false, 3.05); - addItem("Steamed Veggies and Brown Rice", - "Steamed vegetables over brown rice", true, 3.99); - addItem("Pasta", - "Spaghetti with Marinara Sauce, and a slice of sourdough bread", - true, 3.89); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - if (numberOfItems >= MAX_ITEMS) { - System.err.println("Sorry, menu is full! Can't add item to menu"); - } else { - menuItems[numberOfItems] = menuItem; - numberOfItems = numberOfItems + 1; - } - } - - public MenuItem[] getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return new DinerMenuIterator(menuItems); - // To test Alternating menu items, comment out above line, - // and uncomment the line below. - //return new AlternatingDinerMenuIterator(menuItems); - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenuIterator.java deleted file mode 100755 index 75a0e62..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/DinerMenuIterator.java +++ /dev/null @@ -1,34 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -public class DinerMenuIterator implements Iterator { - MenuItem[] items; - int position = 0; - - public DinerMenuIterator(MenuItem[] items) { - this.items = items; - } - - public MenuItem next() { - /* - MenuItem menuItem = items[position]; - position = position + 1; - return menuItem; - */ - - // or shorten to - return items[position++]; - } - - public boolean hasNext() { - /* - if (position >= items.length || items[position] == null) { - return false; - } else { - return true; - } - */ - - // or shorten to - return items.length > position; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Iterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Iterator.java deleted file mode 100755 index 0c9edd3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Iterator.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -public interface Iterator { - boolean hasNext(); - MenuItem next(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Menu.java deleted file mode 100755 index c1362b3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Menu.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -public interface Menu { - public Iterator createIterator(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuItem.java deleted file mode 100755 index b715a40..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuItem.java +++ /dev/null @@ -1,38 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -public class MenuItem { - String name; - String description; - boolean vegetarian; - double price; - - public MenuItem(String name, - String description, - boolean vegetarian, - double price) - { - this.name = name; - this.description = description; - this.vegetarian = vegetarian; - this.price = price; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public double getPrice() { - return price; - } - - public boolean isVegetarian() { - return vegetarian; - } - public String toString() { - return (name + ", $" + price + "\n " + description); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuTestDrive.java deleted file mode 100755 index c5a2ff1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/MenuTestDrive.java +++ /dev/null @@ -1,75 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -import java.util.*; - -public class MenuTestDrive { - public static void main(String args[]) { - Menu pancakeHouseMenu = new PancakeHouseMenu(); - Menu dinerMenu = new DinerMenu(); - - Waitress waitress = new Waitress(pancakeHouseMenu, dinerMenu); - - // With iterators - waitress.printMenu(); - - printMenus(); - } - - /* - * Without the Waitress, we need the code below... - */ - public static void printMenus() { - PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); - DinerMenu dinerMenu = new DinerMenu(); - - List breakfastItems = pancakeHouseMenu.getMenuItems(); - MenuItem[] lunchItems = dinerMenu.getMenuItems(); - - // print as Iterable - printMenu(breakfastItems); - printMenu(Arrays.asList(lunchItems)); - - // print with forEach - System.out.println("=== forEach ==="); - breakfastItems.forEach(item -> System.out.println(item)); - Arrays.asList(lunchItems).forEach(item -> System.out.println(item)); - System.out.println("=== forEach ==="); - - // Using enhanced for loop - System.out.println("USING ENHANCED FOR"); - for (MenuItem menuItem : breakfastItems) { - System.out.print(menuItem.getName()); - System.out.println("\t\t" + menuItem.getPrice()); - System.out.println("\t" + menuItem.getDescription()); - } - for (MenuItem menuItem : lunchItems) { - System.out.print(menuItem.getName()); - System.out.println("\t\t" + menuItem.getPrice()); - System.out.println("\t" + menuItem.getDescription()); - } - - // Exposing implementation - System.out.println("USING FOR LOOPS"); - for (int i = 0; i < breakfastItems.size(); i++) { - MenuItem menuItem = (MenuItem)breakfastItems.get(i); - System.out.print(menuItem.getName()); - System.out.println("\t\t" + menuItem.getPrice()); - System.out.println("\t" + menuItem.getDescription()); - } - - for (int i = 0; i < lunchItems.length; i++) { - MenuItem menuItem = lunchItems[i]; - System.out.print(menuItem.getName()); - System.out.println("\t\t" + menuItem.getPrice()); - System.out.println("\t" + menuItem.getDescription()); - } - } - - public static void printMenu(Iterable a) { - for (MenuItem menuItem : a) { - System.out.print(menuItem.getName()); - System.out.println("\t\t" + menuItem.getPrice()); - System.out.println("\t" + menuItem.getDescription()); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenu.java deleted file mode 100755 index db1be51..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenu.java +++ /dev/null @@ -1,53 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -import java.util.ArrayList; -import java.util.List; - -public class PancakeHouseMenu implements Menu { - List menuItems; - - public PancakeHouseMenu() { - menuItems = new ArrayList(); - - addItem("K&B's Pancake Breakfast", - "Pancakes with scrambled eggs and toast", - true, - 2.99); - - addItem("Regular Pancake Breakfast", - "Pancakes with fried eggs, sausage", - false, - 2.99); - - addItem("Blueberry Pancakes", - "Pancakes made with fresh blueberries", - true, - 3.49); - - addItem("Waffles", - "Waffles with your choice of blueberries or strawberries", - true, - 3.59); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - menuItems.add(menuItem); - } - - public List getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return new PancakeHouseMenuIterator(menuItems); - } - - public String toString() { - return "Objectville Pancake House Menu"; - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenuIterator.java deleted file mode 100755 index da749e2..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/PancakeHouseMenuIterator.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -import java.util.ArrayList; -import java.util.List; - -public class PancakeHouseMenuIterator implements Iterator { - List items; - int position = 0; - - public PancakeHouseMenuIterator(List items) { - this.items = items; - } - - public MenuItem next() { - /* - MenuItem item = items.get(position); - position = position + 1; - return item; - */ - // or shorten to: - return items.get(position++); - } - - public boolean hasNext() { - /* - if (position >= items.size()) { - return false; - } else { - return true; - } - */ - // or shorten to: - return items.size() > position; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Waitress.java deleted file mode 100755 index 4fd5b3f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermerger/Waitress.java +++ /dev/null @@ -1,72 +0,0 @@ -package headfirst.designpatterns.iterator.dinermerger; - -public class Waitress { - Menu pancakeHouseMenu; - Menu dinerMenu; - - public Waitress(Menu pancakeHouseMenu, Menu dinerMenu) { - this.pancakeHouseMenu = pancakeHouseMenu; - this.dinerMenu = dinerMenu; - } - - public void printMenu() { - Iterator pancakeIterator = pancakeHouseMenu.createIterator(); - Iterator dinerIterator = dinerMenu.createIterator(); - - System.out.println("MENU\n----\nBREAKFAST"); - printMenu(pancakeIterator); - System.out.println("\nLUNCH"); - printMenu(dinerIterator); - - } - - private void printMenu(Iterator iterator) { - while (iterator.hasNext()) { - MenuItem menuItem = iterator.next(); - System.out.print(menuItem.getName() + ", "); - System.out.print(menuItem.getPrice() + " -- "); - System.out.println(menuItem.getDescription()); - } - } - - public void printVegetarianMenu() { - printVegetarianMenu(pancakeHouseMenu.createIterator()); - printVegetarianMenu(dinerMenu.createIterator()); - } - - public boolean isItemVegetarian(String name) { - Iterator breakfastIterator = pancakeHouseMenu.createIterator(); - if (isVegetarian(name, breakfastIterator)) { - return true; - } - Iterator dinnerIterator = dinerMenu.createIterator(); - if (isVegetarian(name, dinnerIterator)) { - return true; - } - return false; - } - - - private void printVegetarianMenu(Iterator iterator) { - while (iterator.hasNext()) { - MenuItem menuItem = iterator.next(); - if (menuItem.isVegetarian()) { - System.out.print(menuItem.getName()); - System.out.println("\t\t" + menuItem.getPrice()); - System.out.println("\t" + menuItem.getDescription()); - } - } - } - - private boolean isVegetarian(String name, Iterator iterator) { - while (iterator.hasNext()) { - MenuItem menuItem = iterator.next(); - if (menuItem.getName().equals(name)) { - if (menuItem.isVegetarian()) { - return true; - } - } - } - return false; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/AlternatingDinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/AlternatingDinerMenuIterator.java deleted file mode 100755 index 1b78a51..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/AlternatingDinerMenuIterator.java +++ /dev/null @@ -1,37 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergercafe; - -import java.util.Iterator; -import java.util.Calendar; - -public class AlternatingDinerMenuIterator implements Iterator { - MenuItem[] items; - int position; - - public AlternatingDinerMenuIterator(MenuItem[] items) { - this.items = items; - position = Calendar.DAY_OF_WEEK % 2; - } - public MenuItem next() { - MenuItem menuItem = items[position]; - position = position + 2; - return menuItem; - } - public boolean hasNext() { - if (position >= items.length || items[position] == null) { - return false; - } else { - return true; - } - } - /* - * No longer needed as of Java 8 - * - * (non-Javadoc) - * @see java.util.Iterator#remove() - * - public void remove() { - throw new UnsupportedOperationException( - "Alternating Diner Menu Iterator does not support remove()"); - } - */ -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/CafeMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/CafeMenu.java deleted file mode 100755 index e3646cd..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/CafeMenu.java +++ /dev/null @@ -1,34 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergercafe; - -import java.util.*; - -public class CafeMenu implements Menu { - HashMap menuItems = new HashMap(); - - public CafeMenu() { - addItem("Veggie Burger and Air Fries", - "Veggie burger on a whole wheat bun, lettuce, tomato, and fries", - true, 3.99); - addItem("Soup of the day", - "A cup of the soup of the day, with a side salad", - false, 3.69); - addItem("Burrito", - "A large burrito, with whole pinto beans, salsa, guacamole", - true, 4.29); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - menuItems.put(name, menuItem); - } - - public Map getItems() { - return menuItems; - } - - public Iterator createIterator() { - return menuItems.values().iterator(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenu.java deleted file mode 100755 index 5199f49..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenu.java +++ /dev/null @@ -1,51 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergercafe; - -import java.util.Iterator; - -public class DinerMenu implements Menu { - static final int MAX_ITEMS = 6; - int numberOfItems = 0; - MenuItem[] menuItems; - - public DinerMenu() { - menuItems = new MenuItem[MAX_ITEMS]; - - addItem("Vegetarian BLT", - "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); - addItem("BLT", - "Bacon with lettuce & tomato on whole wheat", false, 2.99); - addItem("Soup of the day", - "Soup of the day, with a side of potato salad", false, 3.29); - addItem("Hotdog", - "A hot dog, with sauerkraut, relish, onions, topped with cheese", - false, 3.05); - addItem("Steamed Veggies and Brown Rice", - "A medly of steamed vegetables over brown rice", true, 3.99); - addItem("Pasta", - "Spaghetti with Marinara Sauce, and a slice of sourdough bread", - true, 3.89); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - if (numberOfItems >= MAX_ITEMS) { - System.err.println("Sorry, menu is full! Can't add item to menu"); - } else { - menuItems[numberOfItems] = menuItem; - numberOfItems = numberOfItems + 1; - } - } - - public MenuItem[] getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return new DinerMenuIterator(menuItems); - //return new AlternatingDinerMenuIterator(menuItems); - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenuIterator.java deleted file mode 100755 index 1f2f46d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/DinerMenuIterator.java +++ /dev/null @@ -1,40 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergercafe; - -import java.util.Iterator; - -public class DinerMenuIterator implements Iterator { - MenuItem[] list; - int position = 0; - - public DinerMenuIterator(MenuItem[] list) { - this.list = list; - } - - public MenuItem next() { - MenuItem menuItem = list[position]; - position = position + 1; - return menuItem; - } - - public boolean hasNext() { - if (position >= list.length || list[position] == null) { - return false; - } else { - return true; - } - } - - public void remove() { - if (position <= 0) { - throw new IllegalStateException - ("You can't remove an item until you've done at least one next()"); - } - if (list[position-1] != null) { - for (int i = position-1; i < (list.length-1); i++) { - list[i] = list[i+1]; - } - list[list.length-1] = null; - } - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Menu.java deleted file mode 100755 index 4218a43..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Menu.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergercafe; - -import java.util.Iterator; - -public interface Menu { - public Iterator createIterator(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuItem.java deleted file mode 100755 index 0e1dbf2..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuItem.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergercafe; - -public class MenuItem { - String name; - String description; - boolean vegetarian; - double price; - - public MenuItem(String name, - String description, - boolean vegetarian, - double price) - { - this.name = name; - this.description = description; - this.vegetarian = vegetarian; - this.price = price; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public double getPrice() { - return price; - } - - public boolean isVegetarian() { - return vegetarian; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuTestDrive.java deleted file mode 100755 index c19a811..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/MenuTestDrive.java +++ /dev/null @@ -1,29 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergercafe; - -public class MenuTestDrive { - public static void main(String args[]) { - PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); - DinerMenu dinerMenu = new DinerMenu(); - CafeMenu cafeMenu = new CafeMenu(); - - Waitress waitress = new Waitress(pancakeHouseMenu, dinerMenu, cafeMenu); - - waitress.printMenu(); - waitress.printVegetarianMenu(); - - System.out.println("\nCustomer asks, is the Hotdog vegetarian?"); - System.out.print("Waitress says: "); - if (waitress.isItemVegetarian("Hotdog")) { - System.out.println("Yes"); - } else { - System.out.println("No"); - } - System.out.println("\nCustomer asks, are the Waffles vegetarian?"); - System.out.print("Waitress says: "); - if (waitress.isItemVegetarian("Waffles")) { - System.out.println("Yes"); - } else { - System.out.println("No"); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/PancakeHouseMenu.java deleted file mode 100755 index 094fae5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/PancakeHouseMenu.java +++ /dev/null @@ -1,49 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergercafe; - -import java.util.ArrayList; -import java.util.Iterator; - -public class PancakeHouseMenu implements Menu { - ArrayList menuItems; - - public PancakeHouseMenu() { - menuItems = new ArrayList(); - - addItem("K&B's Pancake Breakfast", - "Pancakes with scrambled eggs and toast", - true, - 2.99); - - addItem("Regular Pancake Breakfast", - "Pancakes with fried eggs, sausage", - false, - 2.99); - - addItem("Blueberry Pancakes", - "Pancakes made with fresh blueberries and blueberry syrup", - true, - 3.49); - - addItem("Waffles", - "Waffles with your choice of blueberries or strawberries", - true, - 3.59); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - menuItems.add(menuItem); - } - - public ArrayList getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return menuItems.iterator(); - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Waitress.java deleted file mode 100755 index c04d08a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergercafe/Waitress.java +++ /dev/null @@ -1,85 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergercafe; - -import java.util.Iterator; - -public class Waitress { - Menu pancakeHouseMenu; - Menu dinerMenu; - Menu cafeMenu; - - public Waitress(Menu pancakeHouseMenu, Menu dinerMenu, Menu cafeMenu) { - this.pancakeHouseMenu = pancakeHouseMenu; - this.dinerMenu = dinerMenu; - this.cafeMenu = cafeMenu; - } - - public void printMenu() { - Iterator pancakeIterator = pancakeHouseMenu.createIterator(); - Iterator dinerIterator = dinerMenu.createIterator(); - Iterator cafeIterator = cafeMenu.createIterator(); - - System.out.println("MENU\n----\nBREAKFAST"); - printMenu(pancakeIterator); - System.out.println("\nLUNCH"); - printMenu(dinerIterator); - System.out.println("\nDINNER"); - printMenu(cafeIterator); - } - - private void printMenu(Iterator iterator) { - while (iterator.hasNext()) { - MenuItem menuItem = iterator.next(); - System.out.print(menuItem.getName() + ", "); - System.out.print(menuItem.getPrice() + " -- "); - System.out.println(menuItem.getDescription()); - } - } - - public void printVegetarianMenu() { - System.out.println("\nVEGETARIAN MENU\n---------------"); - printVegetarianMenu(pancakeHouseMenu.createIterator()); - printVegetarianMenu(dinerMenu.createIterator()); - printVegetarianMenu(cafeMenu.createIterator()); - } - - public boolean isItemVegetarian(String name) { - Iterator pancakeIterator = pancakeHouseMenu.createIterator(); - if (isVegetarian(name, pancakeIterator)) { - return true; - } - Iterator dinerIterator = dinerMenu.createIterator(); - if (isVegetarian(name, dinerIterator)) { - return true; - } - Iterator cafeIterator = cafeMenu.createIterator(); - if (isVegetarian(name, cafeIterator)) { - return true; - } - return false; - } - - - private void printVegetarianMenu(Iterator iterator) { - while (iterator.hasNext()) { - MenuItem menuItem = iterator.next(); - if (menuItem.isVegetarian()) { - System.out.print(menuItem.getName() + ", "); - System.out.print(menuItem.getPrice() + " -- "); - System.out.println(menuItem.getDescription()); - } - } - } - - private boolean isVegetarian(String name, Iterator iterator) { - while (iterator.hasNext()) { - MenuItem menuItem = iterator.next(); - if (menuItem.getName().equals(name)) { - if (menuItem.isVegetarian()) { - return true; - } - } - } - return false; - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/AlternatingDinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/AlternatingDinerMenuIterator.java deleted file mode 100755 index 2e69d99..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/AlternatingDinerMenuIterator.java +++ /dev/null @@ -1,30 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergeri; - -import java.util.Iterator; -import java.util.Calendar; - -public class AlternatingDinerMenuIterator implements Iterator { - MenuItem[] items; - int position; - - public AlternatingDinerMenuIterator(MenuItem[] items) { - this.items = items; - position = Calendar.DAY_OF_WEEK % 2; - } - public Object next() { - MenuItem menuItem = items[position]; - position = position + 2; - return menuItem; - } - public boolean hasNext() { - if (position >= items.length || items[position] == null) { - return false; - } else { - return true; - } - } - public void remove() { - throw new UnsupportedOperationException( - "Alternating Diner Menu Iterator does not support remove()"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenu.java deleted file mode 100755 index 13a8a82..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenu.java +++ /dev/null @@ -1,51 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergeri; - -import java.util.Iterator; - -public class DinerMenu implements Menu { - static final int MAX_ITEMS = 6; - int numberOfItems = 0; - MenuItem[] menuItems; - - public DinerMenu() { - menuItems = new MenuItem[MAX_ITEMS]; - - addItem("Vegetarian BLT", - "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); - addItem("BLT", - "Bacon with lettuce & tomato on whole wheat", false, 2.99); - addItem("Soup of the day", - "Soup of the day, with a side of potato salad", false, 3.29); - addItem("Hotdog", - "A hot dog, with saurkraut, relish, onions, topped with cheese", - false, 3.05); - addItem("Steamed Veggies and Brown Rice", - "Steamed vegetables over brown rice", true, 3.99); - addItem("Pasta", - "Spaghetti with Marinara Sauce, and a slice of sourdough bread", - true, 3.89); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - if (numberOfItems >= MAX_ITEMS) { - System.err.println("Sorry, menu is full! Can't add item to menu"); - } else { - menuItems[numberOfItems] = menuItem; - numberOfItems = numberOfItems + 1; - } - } - - public MenuItem[] getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return new DinerMenuIterator(menuItems); - //return new AlternatingDinerMenuIterator(menuItems); - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenuIterator.java deleted file mode 100755 index a4e88b1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/DinerMenuIterator.java +++ /dev/null @@ -1,40 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergeri; - -import java.util.Iterator; - -public class DinerMenuIterator implements Iterator { - MenuItem[] list; - int position = 0; - - public DinerMenuIterator(MenuItem[] list) { - this.list = list; - } - - public MenuItem next() { - MenuItem menuItem = list[position]; - position = position + 1; - return menuItem; - } - - public boolean hasNext() { - if (position >= list.length || list[position] == null) { - return false; - } else { - return true; - } - } - - public void remove() { - if (position <= 0) { - throw new IllegalStateException - ("You can't remove an item until you've done at least one next()"); - } - if (list[position-1] != null) { - for (int i = position-1; i < (list.length-1); i++) { - list[i] = list[i+1]; - } - list[list.length-1] = null; - } - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Menu.java deleted file mode 100755 index d1393e9..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Menu.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergeri; - -import java.util.Iterator; - -public interface Menu { - public Iterator createIterator(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuItem.java deleted file mode 100755 index bb23e90..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuItem.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergeri; - -public class MenuItem { - String name; - String description; - boolean vegetarian; - double price; - - public MenuItem(String name, - String description, - boolean vegetarian, - double price) - { - this.name = name; - this.description = description; - this.vegetarian = vegetarian; - this.price = price; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public double getPrice() { - return price; - } - - public boolean isVegetarian() { - return vegetarian; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuTestDrive.java deleted file mode 100755 index 8dbe7bb..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/MenuTestDrive.java +++ /dev/null @@ -1,30 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergeri; - -public class MenuTestDrive { - public static void main(String args[]) { - PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); - DinerMenu dinerMenu = new DinerMenu(); - Waitress waitress = new Waitress(pancakeHouseMenu, dinerMenu); - //waitress.printMenu(); - // -- added 12/30/2016 - waitress.printMenu(1); - // --- - //waitress.printVegetarianMenu(); - - System.out.println("\nCustomer asks, is the Hotdog vegetarian?"); - System.out.print("Waitress says: "); - if (waitress.isItemVegetarian("Hotdog")) { - System.out.println("Yes"); - } else { - System.out.println("No"); - } - System.out.println("\nCustomer asks, are the Waffles vegetarian?"); - System.out.print("Waitress says: "); - if (waitress.isItemVegetarian("Waffles")) { - System.out.println("Yes"); - } else { - System.out.println("No"); - } - - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/PancakeHouseMenu.java deleted file mode 100755 index 544cbb7..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/PancakeHouseMenu.java +++ /dev/null @@ -1,49 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergeri; - -import java.util.ArrayList; -import java.util.Iterator; - -public class PancakeHouseMenu implements Menu { - ArrayList menuItems; - - public PancakeHouseMenu() { - menuItems = new ArrayList(); - - addItem("K&B's Pancake Breakfast", - "Pancakes with scrambled eggs, and toast", - true, - 2.99); - - addItem("Regular Pancake Breakfast", - "Pancakes with fried eggs, sausage", - false, - 2.99); - - addItem("Blueberry Pancakes", - "Pancakes made with fresh blueberries, and blueberry syrup", - true, - 3.49); - - addItem("Waffles", - "Waffles, with your choice of blueberries or strawberries", - true, - 3.59); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - menuItems.add(menuItem); - } - - public ArrayList getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return menuItems.iterator(); - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Waitress.java deleted file mode 100755 index a645239..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/dinermergeri/Waitress.java +++ /dev/null @@ -1,97 +0,0 @@ -package headfirst.designpatterns.iterator.dinermergeri; - -import java.util.Iterator; -import java.util.ArrayList; - -public class Waitress { - Menu pancakeHouseMenu; - Menu dinerMenu; - - public Waitress(Menu pancakeHouseMenu, Menu dinerMenu) { - this.pancakeHouseMenu = pancakeHouseMenu; - this.dinerMenu = dinerMenu; - } - - // --- added 12/30/2016 - not in original code - public void printMenu(int withNewConstructs) { - ArrayList breakfastItems = ((PancakeHouseMenu) pancakeHouseMenu).getMenuItems(); - //pMenu.forEach(m -> printMenuItem(m)); - for (MenuItem m : breakfastItems) { - printMenuItem(m); - } - - MenuItem[] lunchItems = ((DinerMenu) dinerMenu).getMenuItems(); - for (MenuItem m : lunchItems) { - printMenuItem(m); - } - } - - public void printMenuItem(MenuItem menuItem) { - System.out.print(menuItem.getName() + ", "); - System.out.print(menuItem.getPrice() + " -- "); - System.out.println(menuItem.getDescription()); - } - // --- - - public void printMenu() { - Iterator pancakeIterator = pancakeHouseMenu.createIterator(); - Iterator dinerIterator = dinerMenu.createIterator(); - - System.out.println("MENU\n----\nBREAKFAST"); - printMenu(pancakeIterator); - System.out.println("\nLUNCH"); - printMenu(dinerIterator); - } - - private void printMenu(Iterator iterator) { - while (iterator.hasNext()) { - MenuItem menuItem = iterator.next(); - System.out.print(menuItem.getName() + ", "); - System.out.print(menuItem.getPrice() + " -- "); - System.out.println(menuItem.getDescription()); - } - } - - public void printVegetarianMenu() { - System.out.println("\nVEGETARIAN MENU\n----\nBREAKFAST"); - printVegetarianMenu(pancakeHouseMenu.createIterator()); - System.out.println("\nLUNCH"); - printVegetarianMenu(dinerMenu.createIterator()); - } - - public boolean isItemVegetarian(String name) { - Iterator pancakeIterator = pancakeHouseMenu.createIterator(); - if (isVegetarian(name, pancakeIterator)) { - return true; - } - Iterator dinerIterator = dinerMenu.createIterator(); - if (isVegetarian(name, dinerIterator)) { - return true; - } - return false; - } - - - private void printVegetarianMenu(Iterator iterator) { - while (iterator.hasNext()) { - MenuItem menuItem = iterator.next(); - if (menuItem.isVegetarian()) { - System.out.print(menuItem.getName()); - System.out.println("\t\t" + menuItem.getPrice()); - System.out.println("\t" + menuItem.getDescription()); - } - } - } - - private boolean isVegetarian(String name, Iterator iterator) { - while (iterator.hasNext()) { - MenuItem menuItem = iterator.next(); - if (menuItem.getName().equals(name)) { - if (menuItem.isVegetarian()) { - return true; - } - } - } - return false; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenu.java deleted file mode 100755 index 59a15a1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenu.java +++ /dev/null @@ -1,51 +0,0 @@ -package headfirst.designpatterns.iterator.implicit; - -import java.util.Iterator; - -public class DinerMenu implements Menu { - static final int MAX_ITEMS = 6; - int numberOfItems = 0; - MenuItem[] menuItems; - - public DinerMenu() { - menuItems = new MenuItem[MAX_ITEMS]; - - addItem("Vegetarian BLT", - "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); - addItem("BLT", - "Bacon with lettuce & tomato on whole wheat", false, 2.99); - addItem("Soup of the day", - "Soup of the day, with a side of potato salad", false, 3.29); - addItem("Hotdog", - "A hot dog, with saurkraut, relish, onions, topped with cheese", - false, 3.05); - addItem("Steamed Veggies and Brown Rice", - "Steamed vegetables over brown rice", true, 3.99); - addItem("Pasta", - "Spaghetti with Marinara Sauce, and a slice of sourdough bread", - true, 3.89); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - if (numberOfItems >= MAX_ITEMS) { - System.err.println("Sorry, menu is full! Can't add item to menu"); - } else { - menuItems[numberOfItems] = menuItem; - numberOfItems = numberOfItems + 1; - } - } - - public MenuItem[] getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return new DinerMenuIterator(menuItems); - //return new AlternatingDinerMenuIterator(menuItems); - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenuIterator.java deleted file mode 100755 index 062c0a8..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/DinerMenuIterator.java +++ /dev/null @@ -1,40 +0,0 @@ -package headfirst.designpatterns.iterator.implicit; - -import java.util.Iterator; - -public class DinerMenuIterator implements Iterator { - MenuItem[] list; - int position = 0; - - public DinerMenuIterator(MenuItem[] list) { - this.list = list; - } - - public MenuItem next() { - MenuItem menuItem = list[position]; - position = position + 1; - return menuItem; - } - - public boolean hasNext() { - if (position >= list.length || list[position] == null) { - return false; - } else { - return true; - } - } - - public void remove() { - if (position <= 0) { - throw new IllegalStateException - ("You can't remove an item until you've done at least one next()"); - } - if (list[position-1] != null) { - for (int i = position-1; i < (list.length-1); i++) { - list[i] = list[i+1]; - } - list[list.length-1] = null; - } - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Menu.java deleted file mode 100755 index 1973085..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Menu.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.iterator.implicit; - -import java.util.Iterator; - -public interface Menu { - public Iterator createIterator(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuItem.java deleted file mode 100755 index 9898f38..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuItem.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.iterator.implicit; - -public class MenuItem { - String name; - String description; - boolean vegetarian; - double price; - - public MenuItem(String name, - String description, - boolean vegetarian, - double price) - { - this.name = name; - this.description = description; - this.vegetarian = vegetarian; - this.price = price; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public double getPrice() { - return price; - } - - public boolean isVegetarian() { - return vegetarian; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuTestDrive.java deleted file mode 100755 index 4d6841d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/MenuTestDrive.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.iterator.implicit; - -public class MenuTestDrive { - public static void main(String args[]) { - PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); - DinerMenu dinerMenu = new DinerMenu(); - Waitress waitress = new Waitress(pancakeHouseMenu, dinerMenu); - // Use implicit iteration - waitress.printMenu(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/PancakeHouseMenu.java deleted file mode 100755 index 86e2ae7..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/PancakeHouseMenu.java +++ /dev/null @@ -1,49 +0,0 @@ -package headfirst.designpatterns.iterator.implicit; - -import java.util.ArrayList; -import java.util.Iterator; - -public class PancakeHouseMenu implements Menu { - ArrayList menuItems; - - public PancakeHouseMenu() { - menuItems = new ArrayList(); - - addItem("K&B's Pancake Breakfast", - "Pancakes with scrambled eggs, and toast", - true, - 2.99); - - addItem("Regular Pancake Breakfast", - "Pancakes with fried eggs, sausage", - false, - 2.99); - - addItem("Blueberry Pancakes", - "Pancakes made with fresh blueberries, and blueberry syrup", - true, - 3.49); - - addItem("Waffles", - "Waffles, with your choice of blueberries or strawberries", - true, - 3.59); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - menuItems.add(menuItem); - } - - public ArrayList getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return menuItems.iterator(); - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Waitress.java deleted file mode 100755 index 7af1779..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/implicit/Waitress.java +++ /dev/null @@ -1,34 +0,0 @@ -package headfirst.designpatterns.iterator.implicit; - -import java.util.Iterator; -import java.util.ArrayList; -import java.util.List; - -public class Waitress { - Menu pancakeHouseMenu; - Menu dinerMenu; - - public Waitress(Menu pancakeHouseMenu, Menu dinerMenu) { - this.pancakeHouseMenu = pancakeHouseMenu; - this.dinerMenu = dinerMenu; - } - - // implicit iteration - public void printMenu() { - List breakfastItems = ((PancakeHouseMenu) pancakeHouseMenu).getMenuItems(); - for (MenuItem m : breakfastItems) { - printMenuItem(m); - } - - MenuItem[] lunchItems = ((DinerMenu) dinerMenu).getMenuItems(); - for (MenuItem m : lunchItems) { - printMenuItem(m); - } - } - - public void printMenuItem(MenuItem menuItem) { - System.out.print(menuItem.getName() + ", "); - System.out.print(menuItem.getPrice() + " -- "); - System.out.println(menuItem.getDescription()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenu.java deleted file mode 100755 index 42e7d60..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenu.java +++ /dev/null @@ -1,51 +0,0 @@ -package headfirst.designpatterns.iterator.transition; - -import java.util.Iterator; - -public class DinerMenu implements Menu { - static final int MAX_ITEMS = 6; - int numberOfItems = 0; - MenuItem[] menuItems; - - public DinerMenu() { - menuItems = new MenuItem[MAX_ITEMS]; - - addItem("Vegetarian BLT", - "(Fakin') Bacon with lettuce & tomato on whole wheat", true, 2.99); - addItem("BLT", - "Bacon with lettuce & tomato on whole wheat", false, 2.99); - addItem("Soup of the day", - "Soup of the day, with a side of potato salad", false, 3.29); - addItem("Hotdog", - "A hot dog, with sauerkraut, relish, onions, topped with cheese", - false, 3.05); - addItem("Steamed Veggies and Brown Rice", - "Steamed vegetables over brown rice", true, 3.99); - addItem("Pasta", - "Spaghetti with Marinara Sauce, and a slice of sourdough bread", - true, 3.89); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - if (numberOfItems >= MAX_ITEMS) { - System.err.println("Sorry, menu is full! Can't add item to menu"); - } else { - menuItems[numberOfItems] = menuItem; - numberOfItems = numberOfItems + 1; - } - } - - public MenuItem[] getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return new DinerMenuIterator(menuItems); - //return new AlternatingDinerMenuIterator(menuItems); - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenuIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenuIterator.java deleted file mode 100755 index 009e5e6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/DinerMenuIterator.java +++ /dev/null @@ -1,40 +0,0 @@ -package headfirst.designpatterns.iterator.transition; - -import java.util.Iterator; - -public class DinerMenuIterator implements Iterator { - MenuItem[] list; - int position = 0; - - public DinerMenuIterator(MenuItem[] list) { - this.list = list; - } - - public MenuItem next() { - MenuItem menuItem = list[position]; - position = position + 1; - return menuItem; - } - - public boolean hasNext() { - if (position >= list.length || list[position] == null) { - return false; - } else { - return true; - } - } - - public void remove() { - if (position <= 0) { - throw new IllegalStateException - ("You can't remove an item until you've done at least one next()"); - } - if (list[position-1] != null) { - for (int i = position-1; i < (list.length-1); i++) { - list[i] = list[i+1]; - } - list[list.length-1] = null; - } - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Menu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Menu.java deleted file mode 100755 index 7b8af28..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Menu.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.iterator.transition; - -import java.util.Iterator; - -public interface Menu { - public Iterator createIterator(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuItem.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuItem.java deleted file mode 100755 index cf38d31..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuItem.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.iterator.transition; - -public class MenuItem { - String name; - String description; - boolean vegetarian; - double price; - - public MenuItem(String name, - String description, - boolean vegetarian, - double price) - { - this.name = name; - this.description = description; - this.vegetarian = vegetarian; - this.price = price; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public double getPrice() { - return price; - } - - public boolean isVegetarian() { - return vegetarian; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuTestDrive.java deleted file mode 100755 index 678536e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/MenuTestDrive.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.iterator.transition; -import java.util.ArrayList; - -public class MenuTestDrive { - public static void main(String args[]) { - PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); - DinerMenu dinerMenu = new DinerMenu(); - ArrayList menus = new ArrayList(); - menus.add(pancakeHouseMenu); - menus.add(dinerMenu); - Waitress waitress = new Waitress(menus); - waitress.printMenu(); - - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/PancakeHouseMenu.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/PancakeHouseMenu.java deleted file mode 100755 index bddb9d3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/PancakeHouseMenu.java +++ /dev/null @@ -1,49 +0,0 @@ -package headfirst.designpatterns.iterator.transition; - -import java.util.ArrayList; -import java.util.Iterator; - -public class PancakeHouseMenu implements Menu { - ArrayList menuItems; - - public PancakeHouseMenu() { - menuItems = new ArrayList(); - - addItem("K&B's Pancake Breakfast", - "Pancakes with scrambled eggs and toast", - true, - 2.99); - - addItem("Regular Pancake Breakfast", - "Pancakes with fried eggs, sausage", - false, - 2.99); - - addItem("Blueberry Pancakes", - "Pancakes made with fresh blueberries and blueberry syrup", - true, - 3.49); - - addItem("Waffles", - "Waffles with your choice of blueberries or strawberries", - true, - 3.59); - } - - public void addItem(String name, String description, - boolean vegetarian, double price) - { - MenuItem menuItem = new MenuItem(name, description, vegetarian, price); - menuItems.add(menuItem); - } - - public ArrayList getMenuItems() { - return menuItems; - } - - public Iterator createIterator() { - return menuItems.iterator(); - } - - // other menu methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Waitress.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Waitress.java deleted file mode 100755 index 2d35dde..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterator/transition/Waitress.java +++ /dev/null @@ -1,29 +0,0 @@ -package headfirst.designpatterns.iterator.transition; -import java.util.*; - - -public class Waitress { - ArrayList menus; - - - public Waitress(ArrayList menus) { - this.menus = menus; - } - - public void printMenu() { - Iterator menuIterator = menus.iterator(); - while(menuIterator.hasNext()) { - Menu menu = (Menu)menuIterator.next(); - printMenu(menu.createIterator()); - } - } - - void printMenu(Iterator iterator) { - while (iterator.hasNext()) { - MenuItem menuItem = (MenuItem)iterator.next(); - System.out.print(menuItem.getName() + ", "); - System.out.print(menuItem.getPrice() + " -- "); - System.out.println(menuItem.getDescription()); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EI.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EI.java deleted file mode 100755 index 8e02835..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EI.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.iterenum; - -import java.util.*; - -public class EI { - public static void main (String args[]) { - Vector v = new Vector(Arrays.asList(args)); - - System.out.println("Using enumeration with Vector"); - Enumeration enumeration = v.elements(); - while (enumeration.hasMoreElements()) { - System.out.println(enumeration.nextElement()); - } - - System.out.println("Using iterator with Vector"); - Iterator iterator = v.iterator(); - while (iterator.hasNext()) { - System.out.println(iterator.next()); - } - - System.out.println("Using for/in with array of Strings"); - for (String color : args) { - System.out.println(color); - } - - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIterator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIterator.java deleted file mode 100755 index c4721cc..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIterator.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.iterenum; - -import java.util.*; - -public class EnumerationIterator implements Iterator { - Enumeration enumeration; - - public EnumerationIterator(Enumeration enumeration) { - this.enumeration = enumeration; - } - - public boolean hasNext() { - return enumeration.hasMoreElements(); - } - - public Object next() { - return enumeration.nextElement(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIteratorTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIteratorTestDrive.java deleted file mode 100755 index 10e572f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/EnumerationIteratorTestDrive.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.iterenum; - -import java.util.*; - -public class EnumerationIteratorTestDrive { - public static void main (String args[]) { - Vector v = new Vector(Arrays.asList(args)); - Iterator iterator = new EnumerationIterator(v.elements()); - while (iterator.hasNext()) { - System.out.println(iterator.next()); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumeration.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumeration.java deleted file mode 100755 index 49ea038..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumeration.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.iterenum; - -import java.util.*; - -public class IteratorEnumeration implements Enumeration { - Iterator iterator; - - public IteratorEnumeration(Iterator iterator) { - this.iterator = iterator; - } - - public boolean hasMoreElements() { - return iterator.hasNext(); - } - - public Object nextElement() { - return iterator.next(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumerationTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumerationTestDrive.java deleted file mode 100755 index 74a3538..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/iterenum/IteratorEnumerationTestDrive.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.iterenum; - -import java.util.*; - -public class IteratorEnumerationTestDrive { - public static void main (String args[]) { - ArrayList l = new ArrayList(Arrays.asList(args)); - Enumeration enumeration = new IteratorEnumeration(l.iterator()); - while (enumeration.hasMoreElements()) { - System.out.println(enumeration.nextElement()); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Example.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Example.java deleted file mode 100755 index deda165..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Example.java +++ /dev/null @@ -1,14 +0,0 @@ -package headfirst.designpatterns.observer.simple; - -public class Example { - - public static void main(String[] args) { - SimpleSubject simpleSubject = new SimpleSubject(); - - SimpleObserver simpleObserver = new SimpleObserver(simpleSubject); - - simpleSubject.setValue(80); - - simpleSubject.removeObserver(simpleObserver); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Observer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Observer.java deleted file mode 100755 index 8e88a86..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Observer.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.observer.simple; - -public interface Observer { - public void update(int value); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleObserver.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleObserver.java deleted file mode 100755 index 90c7055..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleObserver.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.observer.simple; - -public class SimpleObserver implements Observer { - private int value; - private Subject simpleSubject; - - public SimpleObserver(Subject simpleSubject) { - this.simpleSubject = simpleSubject; - simpleSubject.registerObserver(this); - } - - public void update(int value) { - this.value = value; - display(); - } - - public void display() { - System.out.println("Value: " + value); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleSubject.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleSubject.java deleted file mode 100644 index ef55b27..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/SimpleSubject.java +++ /dev/null @@ -1,31 +0,0 @@ -package headfirst.designpatterns.observer.simple; - -import java.util.*; - -public class SimpleSubject implements Subject { - private List observers; - private int value = 0; - - public SimpleSubject() { - observers = new ArrayList(); - } - - public void registerObserver(Observer o) { - observers.add(o); - } - - public void removeObserver(Observer o) { - observers.remove(o); - } - - public void notifyObservers() { - for (Observer observer : observers) { - observer.update(value); - } - } - - public void setValue(int value) { - this.value = value; - notifyObservers(); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Subject.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Subject.java deleted file mode 100755 index ac33a79..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simple/Subject.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.observer.simple; - -public interface Subject { - public void registerObserver(Observer o); - public void removeObserver(Observer o); - public void notifyObservers(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/Example.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/Example.java deleted file mode 100755 index c94dd5e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/Example.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.observer.simpleobservable; - -public class Example { - - public static void main(String[] args) { - SimpleSubject simpleSubject = new SimpleSubject(); - - SimpleObserver simpleObserver = new SimpleObserver(simpleSubject); - - simpleSubject.setValue(80); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleObserver.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleObserver.java deleted file mode 100755 index 97da993..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleObserver.java +++ /dev/null @@ -1,30 +0,0 @@ -package headfirst.designpatterns.observer.simpleobservable; - -import java.util.Observable; -import java.util.Observer; - -public class SimpleObserver implements Observer { - private int value; - private Observable observable; - - public SimpleObserver(Observable observable) { - this.observable = observable; - observable.addObserver((Observer) this); - } - - public void display() { - System.out.println("Value: " + value); - } - - @Override - public void update(Observable o, Object arg) { - System.out.println(arg); - this.value = (int) arg; - display(); - if (o instanceof SimpleSubject) { - SimpleSubject simpleSubject = (SimpleSubject)o; - this.value = simpleSubject.getValue(); - display(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleSubject.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleSubject.java deleted file mode 100644 index 7462c2d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/simpleobservable/SimpleSubject.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.observer.simpleobservable; - -import java.util.Observable; - -public class SimpleSubject extends Observable { - private int value = 0; - - public SimpleSubject() { } - - public void setValue(int value) { - this.value = value; - setChanged(); - notifyObservers(value); - } - - public int getValue() { - return this.value; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/swing/SwingObserverExample.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/swing/SwingObserverExample.java deleted file mode 100755 index 930bdf1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/swing/SwingObserverExample.java +++ /dev/null @@ -1,55 +0,0 @@ -package headfirst.designpatterns.observer.swing; - -import java.awt.*; -import javax.swing.*; - -public class SwingObserverExample { - JFrame frame; - - public static void main(String[] args) { - SwingObserverExample example = new SwingObserverExample(); - example.go(); - } - - public void go() { - frame = new JFrame(); - - JButton button = new JButton("Should I do it?"); - - // Without lambdas - //button.addActionListener(new AngelListener()); - //button.addActionListener(new DevilListener()); - - // With lambdas - button.addActionListener(event -> - System.out.println("Don't do it, you might regret it!") - ); - button.addActionListener(event -> - System.out.println("Come on, do it!") - ); - frame.getContentPane().add(BorderLayout.CENTER, button); - - // Set frame properties - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.getContentPane().add(BorderLayout.CENTER, button); - frame.setSize(300,300); - frame.setVisible(true); - } - - /* - * Remove these two inner classes to use lambda expressions instead. - * - class AngelListener implements ActionListener { - public void actionPerformed(ActionEvent event) { - System.out.println("Don't do it, you might regret it!"); - } - } - - class DevilListener implements ActionListener { - public void actionPerformed(ActionEvent event) { - System.out.println("Come on, do it!"); - } - } - */ - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/CurrentConditionsDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/CurrentConditionsDisplay.java deleted file mode 100755 index 3ca8c23..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/CurrentConditionsDisplay.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.observer.weather; - -public class CurrentConditionsDisplay implements Observer, DisplayElement { - private float temperature; - private float humidity; - private WeatherData weatherData; - - public CurrentConditionsDisplay(WeatherData weatherData) { - this.weatherData = weatherData; - weatherData.registerObserver(this); - } - - public void update(float temperature, float humidity, float pressure) { - this.temperature = temperature; - this.humidity = humidity; - display(); - } - - public void display() { - System.out.println("Current conditions: " + temperature - + "F degrees and " + humidity + "% humidity"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/DisplayElement.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/DisplayElement.java deleted file mode 100755 index dd62b65..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/DisplayElement.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.observer.weather; - -public interface DisplayElement { - public void display(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/ForecastDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/ForecastDisplay.java deleted file mode 100755 index 3523692..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/ForecastDisplay.java +++ /dev/null @@ -1,30 +0,0 @@ -package headfirst.designpatterns.observer.weather; - -public class ForecastDisplay implements Observer, DisplayElement { - private float currentPressure = 29.92f; - private float lastPressure; - private WeatherData weatherData; - - public ForecastDisplay(WeatherData weatherData) { - this.weatherData = weatherData; - weatherData.registerObserver(this); - } - - public void update(float temp, float humidity, float pressure) { - lastPressure = currentPressure; - currentPressure = pressure; - - display(); - } - - public void display() { - System.out.print("Forecast: "); - if (currentPressure > lastPressure) { - System.out.println("Improving weather on the way!"); - } else if (currentPressure == lastPressure) { - System.out.println("More of the same"); - } else if (currentPressure < lastPressure) { - System.out.println("Watch out for cooler, rainy weather"); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/HeatIndexDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/HeatIndexDisplay.java deleted file mode 100755 index ac98db3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/HeatIndexDisplay.java +++ /dev/null @@ -1,32 +0,0 @@ -package headfirst.designpatterns.observer.weather; - -public class HeatIndexDisplay implements Observer, DisplayElement { - float heatIndex = 0.0f; - private WeatherData weatherData; - - public HeatIndexDisplay(WeatherData weatherData) { - this.weatherData = weatherData; - weatherData.registerObserver(this); - } - - public void update(float t, float rh, float pressure) { - heatIndex = computeHeatIndex(t, rh); - display(); - } - - private float computeHeatIndex(float t, float rh) { - float index = (float)((16.923 + (0.185212 * t) + (5.37941 * rh) - (0.100254 * t * rh) - + (0.00941695 * (t * t)) + (0.00728898 * (rh * rh)) - + (0.000345372 * (t * t * rh)) - (0.000814971 * (t * rh * rh)) + - (0.0000102102 * (t * t * rh * rh)) - (0.000038646 * (t * t * t)) + (0.0000291583 * - (rh * rh * rh)) + (0.00000142721 * (t * t * t * rh)) + - (0.000000197483 * (t * rh * rh * rh)) - (0.0000000218429 * (t * t * t * rh * rh)) + - 0.000000000843296 * (t * t * rh * rh * rh)) - - (0.0000000000481975 * (t * t * t * rh * rh * rh))); - return index; - } - - public void display() { - System.out.println("Heat index is " + heatIndex); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Observer.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Observer.java deleted file mode 100755 index e9a67e3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Observer.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.observer.weather; - -public interface Observer { - public void update(float temp, float humidity, float pressure); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/StatisticsDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/StatisticsDisplay.java deleted file mode 100755 index 96f2d76..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/StatisticsDisplay.java +++ /dev/null @@ -1,34 +0,0 @@ -package headfirst.designpatterns.observer.weather; - -public class StatisticsDisplay implements Observer, DisplayElement { - private float maxTemp = 0.0f; - private float minTemp = 200; - private float tempSum= 0.0f; - private int numReadings; - private WeatherData weatherData; - - public StatisticsDisplay(WeatherData weatherData) { - this.weatherData = weatherData; - weatherData.registerObserver(this); - } - - public void update(float temp, float humidity, float pressure) { - tempSum += temp; - numReadings++; - - if (temp > maxTemp) { - maxTemp = temp; - } - - if (temp < minTemp) { - minTemp = temp; - } - - display(); - } - - public void display() { - System.out.println("Avg/Max/Min temperature = " + (tempSum / numReadings) - + "/" + maxTemp + "/" + minTemp); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Subject.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Subject.java deleted file mode 100755 index ab06ddd..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/Subject.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.observer.weather; - -public interface Subject { - public void registerObserver(Observer o); - public void removeObserver(Observer o); - public void notifyObservers(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherData.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherData.java deleted file mode 100755 index f291846..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherData.java +++ /dev/null @@ -1,52 +0,0 @@ -package headfirst.designpatterns.observer.weather; - -import java.util.*; - -public class WeatherData implements Subject { - private List observers; - private float temperature; - private float humidity; - private float pressure; - - public WeatherData() { - observers = new ArrayList(); - } - - public void registerObserver(Observer o) { - observers.add(o); - } - - public void removeObserver(Observer o) { - observers.remove(o); - } - - public void notifyObservers() { - for (Observer observer : observers) { - observer.update(temperature, humidity, pressure); - } - } - - public void measurementsChanged() { - notifyObservers(); - } - - public void setMeasurements(float temperature, float humidity, float pressure) { - this.temperature = temperature; - this.humidity = humidity; - this.pressure = pressure; - measurementsChanged(); - } - - public float getTemperature() { - return temperature; - } - - public float getHumidity() { - return humidity; - } - - public float getPressure() { - return pressure; - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStation.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStation.java deleted file mode 100755 index d53f0a6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStation.java +++ /dev/null @@ -1,20 +0,0 @@ -package headfirst.designpatterns.observer.weather; - -public class WeatherStation { - - public static void main(String[] args) { - WeatherData weatherData = new WeatherData(); - - CurrentConditionsDisplay currentDisplay = - new CurrentConditionsDisplay(weatherData); - StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData); - ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData); - - weatherData.setMeasurements(80, 65, 30.4f); - weatherData.setMeasurements(82, 70, 29.2f); - weatherData.setMeasurements(78, 90, 29.2f); - - weatherData.removeObserver(forecastDisplay); - weatherData.setMeasurements(62, 90, 28.1f); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStationHeatIndex.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStationHeatIndex.java deleted file mode 100755 index eb84f3a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weather/WeatherStationHeatIndex.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.observer.weather; - -public class WeatherStationHeatIndex { - - public static void main(String[] args) { - WeatherData weatherData = new WeatherData(); - CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(weatherData); - StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData); - ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData); - HeatIndexDisplay heatIndexDisplay = new HeatIndexDisplay(weatherData); - - weatherData.setMeasurements(80, 65, 30.4f); - weatherData.setMeasurements(82, 70, 29.2f); - weatherData.setMeasurements(78, 90, 29.2f); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/CurrentConditionsDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/CurrentConditionsDisplay.java deleted file mode 100755 index d08c57c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/CurrentConditionsDisplay.java +++ /dev/null @@ -1,29 +0,0 @@ -package headfirst.designpatterns.observer.weatherobservable; - -import java.util.Observable; -import java.util.Observer; - -public class CurrentConditionsDisplay implements Observer, DisplayElement { - Observable observable; - private float temperature; - private float humidity; - - public CurrentConditionsDisplay(Observable observable) { - this.observable = observable; - observable.addObserver(this); - } - - public void update(Observable obs, Object arg) { - if (obs instanceof WeatherData) { - WeatherData weatherData = (WeatherData)obs; - this.temperature = weatherData.getTemperature(); - this.humidity = weatherData.getHumidity(); - display(); - } - } - - public void display() { - System.out.println("Current conditions: " + temperature - + "F degrees and " + humidity + "% humidity"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/DisplayElement.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/DisplayElement.java deleted file mode 100755 index dc5d083..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/DisplayElement.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.observer.weatherobservable; - -public interface DisplayElement { - public void display(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/ForecastDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/ForecastDisplay.java deleted file mode 100755 index 6eb1f4b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/ForecastDisplay.java +++ /dev/null @@ -1,33 +0,0 @@ -package headfirst.designpatterns.observer.weatherobservable; - -import java.util.Observable; -import java.util.Observer; - -public class ForecastDisplay implements Observer, DisplayElement { - private float currentPressure = 29.92f; - private float lastPressure; - - public ForecastDisplay(Observable observable) { - observable.addObserver(this); - } - - public void update(Observable observable, Object arg) { - if (observable instanceof WeatherData) { - WeatherData weatherData = (WeatherData)observable; - lastPressure = currentPressure; - currentPressure = weatherData.getPressure(); - display(); - } - } - - public void display() { - System.out.print("Forecast: "); - if (currentPressure > lastPressure) { - System.out.println("Improving weather on the way!"); - } else if (currentPressure == lastPressure) { - System.out.println("More of the same"); - } else if (currentPressure < lastPressure) { - System.out.println("Watch out for cooler, rainy weather"); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/HeatIndexDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/HeatIndexDisplay.java deleted file mode 100755 index 2e43d1d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/HeatIndexDisplay.java +++ /dev/null @@ -1,42 +0,0 @@ -package headfirst.designpatterns.observer.weatherobservable; - -import java.util.Observable; -import java.util.Observer; - -public class HeatIndexDisplay implements Observer, DisplayElement { - float heatIndex = 0.0f; - - public HeatIndexDisplay(Observable observable) { - observable.addObserver(this); - } - - public void update(Observable observable, Object arg) { - if (observable instanceof WeatherData) { - WeatherData weatherData = (WeatherData)observable; - float t = weatherData.getTemperature(); - float rh = weatherData.getHumidity(); - heatIndex = (float) - ( - (16.923 + (0.185212 * t)) + - (5.37941 * rh) - - (0.100254 * t * rh) + - (0.00941695 * (t * t)) + - (0.00728898 * (rh * rh)) + - (0.000345372 * (t * t * rh)) - - (0.000814971 * (t * rh * rh)) + - (0.0000102102 * (t * t * rh * rh)) - - (0.000038646 * (t * t * t)) + - (0.0000291583 * (rh * rh * rh)) + - (0.00000142721 * (t * t * t * rh)) + - (0.000000197483 * (t * rh * rh * rh)) - - (0.0000000218429 * (t * t * t * rh * rh)) + - (0.000000000843296 * (t * t * rh * rh * rh)) - - (0.0000000000481975 * (t * t * t * rh * rh * rh))); - display(); - } - } - - public void display() { - System.out.println("Heat index is " + heatIndex); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/StatisticsDisplay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/StatisticsDisplay.java deleted file mode 100755 index 216fc6c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/StatisticsDisplay.java +++ /dev/null @@ -1,39 +0,0 @@ -package headfirst.designpatterns.observer.weatherobservable; - -import java.util.Observable; -import java.util.Observer; - -public class StatisticsDisplay implements Observer, DisplayElement { - private float maxTemp = 0.0f; - private float minTemp = 200; - private float tempSum= 0.0f; - private int numReadings; - - public StatisticsDisplay(Observable observable) { - observable.addObserver(this); - } - - public void update(Observable observable, Object arg) { - if (observable instanceof WeatherData) { - WeatherData weatherData = (WeatherData)observable; - float temp = weatherData.getTemperature(); - tempSum += temp; - numReadings++; - - if (temp > maxTemp) { - maxTemp = temp; - } - - if (temp < minTemp) { - minTemp = temp; - } - - display(); - } - } - - public void display() { - System.out.println("Avg/Max/Min temperature = " + (tempSum / numReadings) - + "/" + maxTemp + "/" + minTemp); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherData.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherData.java deleted file mode 100755 index 569a50e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherData.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.observer.weatherobservable; - -import java.util.Observable; - -public class WeatherData extends Observable { - private float temperature; - private float humidity; - private float pressure; - - public WeatherData() { } - - public void measurementsChanged() { - setChanged(); - notifyObservers(); - } - - public void setMeasurements(float temperature, float humidity, float pressure) { - this.temperature = temperature; - this.humidity = humidity; - this.pressure = pressure; - measurementsChanged(); - } - - public float getTemperature() { - return temperature; - } - - public float getHumidity() { - return humidity; - } - - public float getPressure() { - return pressure; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStation.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStation.java deleted file mode 100755 index ad82428..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStation.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.observer.weatherobservable; - -import java.util.Observable; - -public class WeatherStation { - - public static void main(String[] args) { - WeatherData weatherData = new WeatherData(); - - CurrentConditionsDisplay currentConditions = new CurrentConditionsDisplay(weatherData); - StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData); - ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData); - - weatherData.setMeasurements(80, 65, 30.4f); - weatherData.setMeasurements(82, 70, 29.2f); - weatherData.setMeasurements(78, 90, 29.2f); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStationHeatIndex.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStationHeatIndex.java deleted file mode 100755 index 9262264..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/observer/weatherobservable/WeatherStationHeatIndex.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.observer.weatherobservable; - -public class WeatherStationHeatIndex { - - public static void main(String[] args) { - WeatherData weatherData = new WeatherData(); - CurrentConditionsDisplay currentConditions = new CurrentConditionsDisplay(weatherData); - StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherData); - ForecastDisplay forecastDisplay = new ForecastDisplay(weatherData); - HeatIndexDisplay heatIndexDisplay = new HeatIndexDisplay(weatherData); - - weatherData.setMeasurements(80, 65, 30.4f); - weatherData.setMeasurements(82, 70, 29.2f); - weatherData.setMeasurements(78, 90, 29.2f); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Client.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Client.java deleted file mode 100644 index 6fbf316..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Client.java +++ /dev/null @@ -1,25 +0,0 @@ -package headfirst.designpatterns.prototype; - -public class Client { - public static void main(String[] args) { - Prototype p1 = new ConcretePrototype1(); - Prototype p2 = new ConcretePrototype2(); - - // ... later ... - operation(p1); - operation(p2); - } - - public static Prototype operation(Prototype p) { - // This code doesn't know or care what the concrete type of p is - Prototype pCopy = null; - try { - pCopy = p.copy(); - // do something useful with pCopy - System.out.println("Operating with pCopy!"); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); - } - return pCopy; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Dragon.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Dragon.java deleted file mode 100644 index 94ace77..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Dragon.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.prototype; - -public class Dragon extends Monster { - public Dragon(String name, boolean hasWings) { - super(name); - this.hasWings = hasWings; - this.canBreatheFire = true; - } - // Each concrete monster could determine how best to clone itself - public Monster copy() throws CloneNotSupportedException { - return (Monster)this.clone(); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Drakon.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Drakon.java deleted file mode 100644 index de18482..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Drakon.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.prototype; - -public class Drakon extends Monster { - public Drakon(String name, int numHeads, boolean canBreatheFire) { - super(name); - this.numHeads = numHeads; - this.canBreatheFire = canBreatheFire; - } - public void spitPoison() { - System.out.println(this.name + " spits poison"); - } - // Each concrete monster could determine how best to clone itself - public Monster copy() throws CloneNotSupportedException { - return (Monster)this.clone(); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Monster.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Monster.java deleted file mode 100644 index 000d7c4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/Monster.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.prototype; - -public abstract class Monster implements Cloneable { - boolean eatsChildren = true; - boolean hasWings = false; - int numHeads = 1; - boolean canBreatheFire = false; - String name; - public Monster(String name) { - this.name = name; - } - public void spitPoison() { } // default is do nothing - public void setName(String name) { - this.name = name; - } - - public abstract Monster copy() throws CloneNotSupportedException; - - public String toString() { - StringBuffer s = new StringBuffer("I'm a monster named " + this.name + " with " + this.numHeads + " head(s). "); - if (this.canBreatheFire) { s.append("I can breathe fire. "); } - if (this.eatsChildren) { s.append("I eat children. "); } - if (this.hasWings) { s.append("I have wings. "); } - return s.toString(); - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/monsters.html b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/monsters.html deleted file mode 100644 index d44506f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/prototype/monsters.html +++ /dev/null @@ -1,50 +0,0 @@ - - - -Monsters - - - - - - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachine.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachine.java deleted file mode 100755 index 2392271..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachine.java +++ /dev/null @@ -1,108 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; - -import java.rmi.*; -import java.rmi.server.*; - -public class GumballMachine - extends UnicastRemoteObject implements GumballMachineRemote -{ - private static final long serialVersionUID = 2L; - State soldOutState; - State noQuarterState; - State hasQuarterState; - State soldState; - State winnerState; - - State state = soldOutState; - int count = 0; - String location; - - public GumballMachine(String location, int numberGumballs) throws RemoteException { - soldOutState = new SoldOutState(this); - noQuarterState = new NoQuarterState(this); - hasQuarterState = new HasQuarterState(this); - soldState = new SoldState(this); - winnerState = new WinnerState(this); - - this.count = numberGumballs; - if (numberGumballs > 0) { - state = noQuarterState; - } - this.location = location; - } - - - public void insertQuarter() { - state.insertQuarter(); - } - - public void ejectQuarter() { - state.ejectQuarter(); - } - - public void turnCrank() { - state.turnCrank(); - state.dispense(); - } - - void setState(State state) { - this.state = state; - } - - void releaseBall() { - System.out.println("A gumball comes rolling out the slot..."); - if (count != 0) { - count = count - 1; - } - } - - public void refill(int count) { - this.count = count; - state = noQuarterState; - } - - public int getCount() { - return count; - } - - public State getState() { - return state; - } - - public String getLocation() { - return location; - } - - public State getSoldOutState() { - return soldOutState; - } - - public State getNoQuarterState() { - return noQuarterState; - } - - public State getHasQuarterState() { - return hasQuarterState; - } - - public State getSoldState() { - return soldState; - } - - public State getWinnerState() { - return winnerState; - } - - public String toString() { - StringBuffer result = new StringBuffer(); - result.append("\nMighty Gumball, Inc."); - result.append("\nJava-enabled Standing Gumball Model #2014"); - result.append("\nInventory: " + count + " gumball"); - if (count != 1) { - result.append("s"); - } - result.append("\n"); - result.append("Machine is " + state + "\n"); - return result.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineRemote.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineRemote.java deleted file mode 100755 index d88cb61..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineRemote.java +++ /dev/null @@ -1,9 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; - -import java.rmi.*; - -public interface GumballMachineRemote extends Remote { - public int getCount() throws RemoteException; - public String getLocation() throws RemoteException; - public State getState() throws RemoteException; -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineTestDrive.java deleted file mode 100755 index a4a8963..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMachineTestDrive.java +++ /dev/null @@ -1,25 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; -import java.rmi.*; - -public class GumballMachineTestDrive { - - public static void main(String[] args) { - GumballMachineRemote gumballMachine = null; - int count; - - if (args.length < 2) { - System.out.println("GumballMachine "); - System.exit(1); - } - - try { - count = Integer.parseInt(args[1]); - - gumballMachine = - new GumballMachine(args[0], count); - Naming.rebind("//" + args[0] + "/gumballmachine", gumballMachine); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitor.java deleted file mode 100755 index ecc39bf..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitor.java +++ /dev/null @@ -1,21 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; - -import java.rmi.*; - -public class GumballMonitor { - GumballMachineRemote machine; - - public GumballMonitor(GumballMachineRemote machine) { - this.machine = machine; - } - - public void report() { - try { - System.out.println("Gumball Machine: " + machine.getLocation()); - System.out.println("Current inventory: " + machine.getCount() + " gumballs"); - System.out.println("Current state: " + machine.getState()); - } catch (RemoteException e) { - e.printStackTrace(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitorTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitorTestDrive.java deleted file mode 100755 index 2bd6293..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/GumballMonitorTestDrive.java +++ /dev/null @@ -1,36 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; - -import java.rmi.*; - -public class GumballMonitorTestDrive { - - public static void main(String[] args) { - String[] location = {"rmi://santafe.mightygumball.com/gumballmachine", - "rmi://boulder.mightygumball.com/gumballmachine", - "rmi://austin.mightygumball.com/gumballmachine"}; - - if (args.length >= 0) - { - location = new String[1]; - location[0] = "rmi://" + args[0] + "/gumballmachine"; - } - - GumballMonitor[] monitor = new GumballMonitor[location.length]; - - - for (int i=0;i < location.length; i++) { - try { - GumballMachineRemote machine = - (GumballMachineRemote) Naming.lookup(location[i]); - monitor[i] = new GumballMonitor(machine); - System.out.println(monitor[i]); - } catch (Exception e) { - e.printStackTrace(); - } - } - - for (int i=0; i < monitor.length; i++) { - monitor[i].report(); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/HasQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/HasQuarterState.java deleted file mode 100755 index da2f3ec..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/HasQuarterState.java +++ /dev/null @@ -1,40 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; - -import java.util.Random; - -public class HasQuarterState implements State { - private static final long serialVersionUID = 2L; - Random randomWinner = new Random(System.currentTimeMillis()); - transient GumballMachine gumballMachine; - - public HasQuarterState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You can't insert another quarter"); - } - - public void ejectQuarter() { - System.out.println("Quarter returned"); - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } - - public void turnCrank() { - System.out.println("You turned..."); - int winner = randomWinner.nextInt(10); - if (winner == 0) { - gumballMachine.setState(gumballMachine.getWinnerState()); - } else { - gumballMachine.setState(gumballMachine.getSoldState()); - } - } - - public void dispense() { - System.out.println("No gumball dispensed"); - } - - public String toString() { - return "waiting for turn of crank"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/NoQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/NoQuarterState.java deleted file mode 100755 index 8a7b86b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/NoQuarterState.java +++ /dev/null @@ -1,31 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; - -public class NoQuarterState implements State { - private static final long serialVersionUID = 2L; - transient GumballMachine gumballMachine; - - public NoQuarterState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You inserted a quarter"); - gumballMachine.setState(gumballMachine.getHasQuarterState()); - } - - public void ejectQuarter() { - System.out.println("You haven't inserted a quarter"); - } - - public void turnCrank() { - System.out.println("You turned, but there's no quarter"); - } - - public void dispense() { - System.out.println("You need to pay first"); - } - - public String toString() { - return "waiting for quarter"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/README.md b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/README.md deleted file mode 100644 index 3441f20..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Gumball Machine with Proxy Pattern - -To get code running on localhost: - -1. Change directories to the same level with headfirst/ folder in bin/ - -2. Run rmiregistry in background: -rmiregistry & - -3. Run: -java headfirst/designpatterns/proxy/gumball/GumballMachineTestDrive localhost 300 - -4. In a different window, run: -java headfirst/designpatterns/proxy/gumball/GumballMonitorTestDrive localhost - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldOutState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldOutState.java deleted file mode 100755 index 09f7423..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldOutState.java +++ /dev/null @@ -1,30 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; - -public class SoldOutState implements State { - private static final long serialVersionUID = 2L; - transient GumballMachine gumballMachine; - - public SoldOutState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You can't insert a quarter, the machine is sold out"); - } - - public void ejectQuarter() { - System.out.println("You can't eject, you haven't inserted a quarter yet"); - } - - public void turnCrank() { - System.out.println("You turned, but there are no gumballs"); - } - - public void dispense() { - System.out.println("No gumball dispensed"); - } - - public String toString() { - return "sold out"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldState.java deleted file mode 100755 index 5c235f1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/SoldState.java +++ /dev/null @@ -1,36 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; - -public class SoldState implements State { - private static final long serialVersionUID = 2L; - transient GumballMachine gumballMachine; - - public SoldState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("Please wait, we're already giving you a gumball"); - } - - public void ejectQuarter() { - System.out.println("Sorry, you already turned the crank"); - } - - public void turnCrank() { - System.out.println("Turning twice doesn't get you another gumball!"); - } - - public void dispense() { - gumballMachine.releaseBall(); - if (gumballMachine.getCount() > 0) { - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } else { - System.out.println("Oops, out of gumballs!"); - gumballMachine.setState(gumballMachine.getSoldOutState()); - } - } - - public String toString() { - return "dispensing a gumball"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/State.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/State.java deleted file mode 100755 index 638e900..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/State.java +++ /dev/null @@ -1,10 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; - -import java.io.*; - -public interface State extends Serializable { - public void insertQuarter(); - public void ejectQuarter(); - public void turnCrank(); - public void dispense(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/WinnerState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/WinnerState.java deleted file mode 100755 index 49c52c4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumball/WinnerState.java +++ /dev/null @@ -1,42 +0,0 @@ -package headfirst.designpatterns.proxy.gumball; - -public class WinnerState implements State { - private static final long serialVersionUID = 2L; - transient GumballMachine gumballMachine; - - public WinnerState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("Please wait, we're already giving you a Gumball"); - } - - public void ejectQuarter() { - System.out.println("Please wait, we're already giving you a Gumball"); - } - - public void turnCrank() { - System.out.println("Turning again doesn't get you another gumball!"); - } - - public void dispense() { - System.out.println("YOU'RE A WINNER! You get two gumballs for your quarter"); - gumballMachine.releaseBall(); - if (gumballMachine.getCount() == 0) { - gumballMachine.setState(gumballMachine.getSoldOutState()); - } else { - gumballMachine.releaseBall(); - if (gumballMachine.getCount() > 0) { - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } else { - System.out.println("Oops, out of gumballs!"); - gumballMachine.setState(gumballMachine.getSoldOutState()); - } - } - } - - public String toString() { - return "despensing two gumballs for your quarter, because YOU'RE A WINNER!"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachine.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachine.java deleted file mode 100755 index b8ee840..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachine.java +++ /dev/null @@ -1,101 +0,0 @@ -package headfirst.designpatterns.proxy.gumballmonitor; - -public class GumballMachine { - State soldOutState; - State noQuarterState; - State hasQuarterState; - State soldState; - State winnerState; - - State state = soldOutState; - int count = 0; - String location; - - public GumballMachine(String location, int count) { - soldOutState = new SoldOutState(this); - noQuarterState = new NoQuarterState(this); - hasQuarterState = new HasQuarterState(this); - soldState = new SoldState(this); - winnerState = new WinnerState(this); - - this.count = count; - if (count > 0) { - state = noQuarterState; - } - this.location = location; - } - - public void insertQuarter() { - state.insertQuarter(); - } - - public void ejectQuarter() { - state.ejectQuarter(); - } - - public void turnCrank() { - state.turnCrank(); - state.dispense(); - } - - void setState(State state) { - this.state = state; - } - - void releaseBall() { - System.out.println("A gumball comes rolling out the slot..."); - if (count != 0) { - count = count - 1; - } - } - - public int getCount() { - return count; - } - - public void refill(int count) { - this.count = count; - state = noQuarterState; - } - - public State getState() { - return state; - } - - public String getLocation() { - return location; - } - - public State getSoldOutState() { - return soldOutState; - } - - public State getNoQuarterState() { - return noQuarterState; - } - - public State getHasQuarterState() { - return hasQuarterState; - } - - public State getSoldState() { - return soldState; - } - - public State getWinnerState() { - return winnerState; - } - - public String toString() { - StringBuffer result = new StringBuffer(); - result.append("\nMighty Gumball, Inc."); - result.append("\nJava-enabled Standing Gumball Model #2004"); - result.append("\nInventory: " + count + " gumball"); - if (count != 1) { - result.append("s"); - } - result.append("\n"); - result.append("Machine is " + state + "\n"); - return result.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachineTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachineTestDrive.java deleted file mode 100755 index 70eba44..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMachineTestDrive.java +++ /dev/null @@ -1,63 +0,0 @@ -package headfirst.designpatterns.proxy.gumballmonitor; - -public class GumballMachineTestDrive { - - public static void main(String[] args) { - int count = 0; - - if (args.length < 2) { - System.out.println("GumballMachine "); - System.exit(1); - } - - try { - count = Integer.parseInt(args[1]); - } catch (Exception e) { - e.printStackTrace(); - System.exit(1); - } - GumballMachine gumballMachine = new GumballMachine(args[0], count); - - GumballMonitor monitor = new GumballMonitor(gumballMachine); - - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - monitor.report(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMonitor.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMonitor.java deleted file mode 100755 index 6a8619c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/GumballMonitor.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.proxy.gumballmonitor; - -public class GumballMonitor { - GumballMachine machine; - - public GumballMonitor(GumballMachine machine) { - this.machine = machine; - } - - public void report() { - System.out.println("Gumball Machine: " + machine.getLocation()); - System.out.println("Current inventory: " + machine.getCount() + " gumballs"); - System.out.println("Current state: " + machine.getState()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/HasQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/HasQuarterState.java deleted file mode 100755 index 65af16e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/HasQuarterState.java +++ /dev/null @@ -1,41 +0,0 @@ -package headfirst.designpatterns.proxy.gumballmonitor; - - -import java.util.Random; - -public class HasQuarterState implements State { - private static final long serialVersionUID = 2L; - Random randomWinner = new Random(System.currentTimeMillis()); - GumballMachine gumballMachine; - - public HasQuarterState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You can't insert another quarter"); - } - - public void ejectQuarter() { - System.out.println("Quarter returned"); - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } - - public void turnCrank() { - System.out.println("You turned..."); - int winner = randomWinner.nextInt(10); - if (winner == 0) { - gumballMachine.setState(gumballMachine.getWinnerState()); - } else { - gumballMachine.setState(gumballMachine.getSoldState()); - } - } - - public void dispense() { - System.out.println("No gumball dispensed"); - } - - public String toString() { - return "waiting for turn of crank"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/NoQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/NoQuarterState.java deleted file mode 100755 index 4578fee..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/NoQuarterState.java +++ /dev/null @@ -1,31 +0,0 @@ -package headfirst.designpatterns.proxy.gumballmonitor; - -public class NoQuarterState implements State { - private static final long serialVersionUID = 2L; - GumballMachine gumballMachine; - - public NoQuarterState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You inserted a quarter"); - gumballMachine.setState(gumballMachine.getHasQuarterState()); - } - - public void ejectQuarter() { - System.out.println("You haven't inserted a quarter"); - } - - public void turnCrank() { - System.out.println("You turned, but there's no quarter"); - } - - public void dispense() { - System.out.println("You need to pay first"); - } - - public String toString() { - return "waiting for quarter"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldOutState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldOutState.java deleted file mode 100755 index 9e2f8c4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldOutState.java +++ /dev/null @@ -1,30 +0,0 @@ -package headfirst.designpatterns.proxy.gumballmonitor; - -public class SoldOutState implements State { - private static final long serialVersionUID = 2L; - GumballMachine gumballMachine; - - public SoldOutState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You can't insert a quarter, the machine is sold out"); - } - - public void ejectQuarter() { - System.out.println("You can't eject, you haven't inserted a quarter yet"); - } - - public void turnCrank() { - System.out.println("You turned, but there are no gumballs"); - } - - public void dispense() { - System.out.println("No gumball dispensed"); - } - - public String toString() { - return "sold out"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldState.java deleted file mode 100755 index fd64b9b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/SoldState.java +++ /dev/null @@ -1,40 +0,0 @@ -package headfirst.designpatterns.proxy.gumballmonitor; - -public class SoldState implements State { - private static final long serialVersionUID = 2L; - GumballMachine gumballMachine; - - public SoldState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("Please wait, we're already giving you a gumball"); - } - - public void ejectQuarter() { - System.out.println("Sorry, you already turned the crank"); - } - - public void turnCrank() { - System.out.println("Turning twice doesn't get you another gumball!"); - } - - public void dispense() { - gumballMachine.releaseBall(); - try { - if (gumballMachine.getCount() > 0) { - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } else { - System.out.println("Oops, out of gumballs!"); - gumballMachine.setState(gumballMachine.getSoldOutState()); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public String toString() { - return "dispensing a gumball"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/State.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/State.java deleted file mode 100755 index 6a4a927..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/State.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.proxy.gumballmonitor; - -import java.io.*; - -public interface State extends Serializable { - - public void insertQuarter(); - public void ejectQuarter(); - public void turnCrank(); - public void dispense(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/WinnerState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/WinnerState.java deleted file mode 100755 index ac26172..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/gumballmonitor/WinnerState.java +++ /dev/null @@ -1,46 +0,0 @@ -package headfirst.designpatterns.proxy.gumballmonitor; - -public class WinnerState implements State { - private static final long serialVersionUID = 2L; - GumballMachine gumballMachine; - - public WinnerState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("Please wait, we're already giving you a Gumball"); - } - - public void ejectQuarter() { - System.out.println("Please wait, we're already giving you a Gumball"); - } - - public void turnCrank() { - System.out.println("Turning again doesn't get you another gumball!"); - } - - public void dispense() { - System.out.println("YOU'RE A WINNER! You get two gumballs for your quarter"); - try { - gumballMachine.releaseBall(); - if (gumballMachine.getCount() == 0) { - gumballMachine.setState(gumballMachine.getSoldOutState()); - } else { - gumballMachine.releaseBall(); - if (gumballMachine.getCount() > 0) { - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } else { - System.out.println("Oops, out of gumballs!"); - gumballMachine.setState(gumballMachine.getSoldOutState()); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public String toString() { - return "despensing two gumballs for your quarter, because YOU'RE A WINNER!"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/MatchMakingTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/MatchMakingTestDrive.java deleted file mode 100755 index 5e8f46d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/MatchMakingTestDrive.java +++ /dev/null @@ -1,76 +0,0 @@ -package headfirst.designpatterns.proxy.javaproxy; - -import java.lang.reflect.*; -import java.util.*; - -public class MatchMakingTestDrive { - HashMap datingDB = new HashMap(); - - public static void main(String[] args) { - MatchMakingTestDrive test = new MatchMakingTestDrive(); - test.drive(); - } - - public MatchMakingTestDrive() { - initializeDatabase(); - } - - public void drive() { - Person joe = getPersonFromDatabase("Joe Javabean"); - Person ownerProxy = getOwnerProxy(joe); - System.out.println("Name is " + ownerProxy.getName()); - ownerProxy.setInterests("bowling, Go"); - System.out.println("Interests set from owner proxy"); - try { - ownerProxy.setGeekRating(10); - } catch (Exception e) { - System.out.println("Can't set rating from owner proxy"); - } - System.out.println("Rating is " + ownerProxy.getGeekRating()); - - Person nonOwnerProxy = getNonOwnerProxy(joe); - System.out.println("Name is " + nonOwnerProxy.getName()); - try { - nonOwnerProxy.setInterests("bowling, Go"); - } catch (Exception e) { - System.out.println("Can't set interests from non owner proxy"); - } - nonOwnerProxy.setGeekRating(3); - System.out.println("Rating set from non owner proxy"); - System.out.println("Rating is " + nonOwnerProxy.getGeekRating()); - } - - Person getOwnerProxy(Person person) { - - return (Person) Proxy.newProxyInstance( - person.getClass().getClassLoader(), - person.getClass().getInterfaces(), - new OwnerInvocationHandler(person)); - } - - Person getNonOwnerProxy(Person person) { - - return (Person) Proxy.newProxyInstance( - person.getClass().getClassLoader(), - person.getClass().getInterfaces(), - new NonOwnerInvocationHandler(person)); - } - - Person getPersonFromDatabase(String name) { - return (Person)datingDB.get(name); - } - - void initializeDatabase() { - Person joe = new PersonImpl(); - joe.setName("Joe Javabean"); - joe.setInterests("cars, computers, music"); - joe.setGeekRating(7); - datingDB.put(joe.getName(), joe); - - Person kelly = new PersonImpl(); - kelly.setName("Kelly Klosure"); - kelly.setInterests("ebay, movies, music"); - kelly.setGeekRating(6); - datingDB.put(kelly.getName(), kelly); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/NonOwnerInvocationHandler.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/NonOwnerInvocationHandler.java deleted file mode 100755 index 4b10150..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/NonOwnerInvocationHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package headfirst.designpatterns.proxy.javaproxy; - -import java.lang.reflect.*; - -public class NonOwnerInvocationHandler implements InvocationHandler { - Person person; - - public NonOwnerInvocationHandler(Person person) { - this.person = person; - } - - public Object invoke(Object proxy, Method method, Object[] args) - throws IllegalAccessException { - - try { - if (method.getName().startsWith("get")) { - return method.invoke(person, args); - } else if (method.getName().equals("setGeekRating")) { - return method.invoke(person, args); - } else if (method.getName().startsWith("set")) { - throw new IllegalAccessException(); - } - } catch (InvocationTargetException e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/OwnerInvocationHandler.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/OwnerInvocationHandler.java deleted file mode 100755 index ced2307..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/OwnerInvocationHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package headfirst.designpatterns.proxy.javaproxy; - -import java.lang.reflect.*; - -public class OwnerInvocationHandler implements InvocationHandler { - Person person; - - public OwnerInvocationHandler(Person person) { - this.person = person; - } - - public Object invoke(Object proxy, Method method, Object[] args) - throws IllegalAccessException { - - try { - if (method.getName().startsWith("get")) { - return method.invoke(person, args); - } else if (method.getName().equals("setGeekRating")) { - throw new IllegalAccessException(); - } else if (method.getName().startsWith("set")) { - return method.invoke(person, args); - } - } catch (InvocationTargetException e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/Person.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/Person.java deleted file mode 100755 index 7de0a07..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/Person.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.proxy.javaproxy; - -public interface Person { - - String getName(); - String getGender(); - String getInterests(); - int getGeekRating(); - - void setName(String name); - void setGender(String gender); - void setInterests(String interests); - void setGeekRating(int rating); - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/PersonImpl.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/PersonImpl.java deleted file mode 100755 index e8a13ed..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/javaproxy/PersonImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -package headfirst.designpatterns.proxy.javaproxy; - -public class PersonImpl implements Person { - String name; - String gender; - String interests; - int rating; - int ratingCount = 0; - - public String getName() { - return name; - } - - public String getGender() { - return gender; - } - - public String getInterests() { - return interests; - } - - public int getGeekRating() { - if (ratingCount == 0) return 0; - return (rating/ratingCount); - } - - - public void setName(String name) { - this.name = name; - } - - public void setGender(String gender) { - this.gender = gender; - } - - public void setInterests(String interests) { - this.interests = interests; - } - - public void setGeekRating(int rating) { - this.rating += rating; - ratingCount++; - } - -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageComponent.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageComponent.java deleted file mode 100755 index f1b4209..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageComponent.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.proxy.virtualproxy; - -import java.awt.*; -import javax.swing.*; - -class ImageComponent extends JComponent { - private static final long serialVersionUID = 1L; - private Icon icon; - - public ImageComponent(Icon icon) { - this.icon = icon; - } - - public void setIcon(Icon icon) { - this.icon = icon; - } - - public void paintComponent(Graphics g) { - super.paintComponent(g); - int w = icon.getIconWidth(); - int h = icon.getIconHeight(); - int x = (800 - w)/2; - int y = (600 - h)/2; - icon.paintIcon(this, g, x, y); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxy.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxy.java deleted file mode 100755 index 41fb03d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxy.java +++ /dev/null @@ -1,67 +0,0 @@ -package headfirst.designpatterns.proxy.virtualproxy; - -import java.net.*; -import java.awt.*; -import javax.swing.*; - -class ImageProxy implements Icon { - volatile ImageIcon imageIcon; - final URL imageURL; - Thread retrievalThread; - boolean retrieving = false; - - public ImageProxy(URL url) { imageURL = url; } - - public int getIconWidth() { - if (imageIcon != null) { - return imageIcon.getIconWidth(); - } else { - return 800; - } - } - - public int getIconHeight() { - if (imageIcon != null) { - return imageIcon.getIconHeight(); - } else { - return 600; - } - } - - synchronized void setImageIcon(ImageIcon imageIcon) { - this.imageIcon = imageIcon; - } - - public void paintIcon(final Component c, Graphics g, int x, int y) { - if (imageIcon != null) { - imageIcon.paintIcon(c, g, x, y); - } else { - g.drawString("Loading album cover, please wait...", x+300, y+190); - if (!retrieving) { - retrieving = true; - - retrievalThread = new Thread(new Runnable() { - public void run() { - try { - setImageIcon(new ImageIcon(imageURL, "Album Cover")); - c.repaint(); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - - retrievalThread = new Thread(() -> { - try { - setImageIcon(new ImageIcon(imageURL, "Album Cover")); - c.repaint(); - } catch (Exception e) { - e.printStackTrace(); - } - }); - retrievalThread.start(); - - } - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxyTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxyTestDrive.java deleted file mode 100755 index 81bb68a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/proxy/virtualproxy/ImageProxyTestDrive.java +++ /dev/null @@ -1,61 +0,0 @@ -package headfirst.designpatterns.proxy.virtualproxy; - -import java.net.*; -import javax.swing.*; -import java.util.*; - -public class ImageProxyTestDrive { - ImageComponent imageComponent; - JFrame frame = new JFrame("Album Cover Viewer"); - JMenuBar menuBar; - JMenu menu; - Hashtable albums = new Hashtable(); - - public static void main (String[] args) throws Exception { - ImageProxyTestDrive testDrive = new ImageProxyTestDrive(); - } - - public ImageProxyTestDrive() throws Exception { - albums.put("Buddha Bar","http://images.amazon.com/images/P/B00009XBYK.01.LZZZZZZZ.jpg"); - albums.put("Ima","http://images.amazon.com/images/P/B000005IRM.01.LZZZZZZZ.jpg"); - albums.put("Karma","http://images.amazon.com/images/P/B000005DCB.01.LZZZZZZZ.gif"); - albums.put("MCMXC a.D.","http://images.amazon.com/images/P/B000002URV.01.LZZZZZZZ.jpg"); - albums.put("Northern Exposure","http://images.amazon.com/images/P/B000003SFN.01.LZZZZZZZ.jpg"); - albums.put("Selected Ambient Works, Vol. 2","http://images.amazon.com/images/P/B000002MNZ.01.LZZZZZZZ.jpg"); - - URL initialURL = new URL((String)albums.get("Selected Ambient Works, Vol. 2")); - menuBar = new JMenuBar(); - menu = new JMenu("Favorite Albums"); - menuBar.add(menu); - frame.setJMenuBar(menuBar); - - for (Enumeration e = albums.keys(); e.hasMoreElements();) { - String name = (String)e.nextElement(); - JMenuItem menuItem = new JMenuItem(name); - menu.add(menuItem); - menuItem.addActionListener(event -> { - imageComponent.setIcon(new ImageProxy(getAlbumUrl(event.getActionCommand()))); - frame.repaint(); - }); - } - - // set up frame and menus - - Icon icon = new ImageProxy(initialURL); - imageComponent = new ImageComponent(icon); - frame.getContentPane().add(imageComponent); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.setSize(800,600); - frame.setVisible(true); - - } - - URL getAlbumUrl(String name) { - try { - return new URL((String)albums.get(name)); - } catch (MalformedURLException e) { - e.printStackTrace(); - return null; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateBoiler.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateBoiler.java deleted file mode 100755 index c68e65b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateBoiler.java +++ /dev/null @@ -1,51 +0,0 @@ -package headfirst.designpatterns.singleton.chocolate; - -public class ChocolateBoiler { - private boolean empty; - private boolean boiled; - private static ChocolateBoiler uniqueInstance; - - private ChocolateBoiler() { - empty = true; - boiled = false; - } - - public static ChocolateBoiler getInstance() { - if (uniqueInstance == null) { - System.out.println("Creating unique instance of Chocolate Boiler"); - uniqueInstance = new ChocolateBoiler(); - } - System.out.println("Returning instance of Chocolate Boiler"); - return uniqueInstance; - } - - public void fill() { - if (isEmpty()) { - empty = false; - boiled = false; - // fill the boiler with a milk/chocolate mixture - } - } - - public void drain() { - if (!isEmpty() && isBoiled()) { - // drain the boiled milk and chocolate - empty = true; - } - } - - public void boil() { - if (!isEmpty() && !isBoiled()) { - // bring the contents to a boil - boiled = true; - } - } - - public boolean isEmpty() { - return empty; - } - - public boolean isBoiled() { - return boiled; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateController.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateController.java deleted file mode 100755 index c5830b8..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/chocolate/ChocolateController.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.singleton.chocolate; - -public class ChocolateController { - public static void main(String args[]) { - ChocolateBoiler boiler = ChocolateBoiler.getInstance(); - boiler.fill(); - boiler.boil(); - boiler.drain(); - - // will return the existing instance - ChocolateBoiler boiler2 = ChocolateBoiler.getInstance(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/Singleton.java deleted file mode 100755 index 075e8c8..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/Singleton.java +++ /dev/null @@ -1,21 +0,0 @@ -package headfirst.designpatterns.singleton.classic; - -// NOTE: This is not thread safe! - -public class Singleton { - private static Singleton uniqueInstance; - - private Singleton() {} - - public static Singleton getInstance() { - if (uniqueInstance == null) { - uniqueInstance = new Singleton(); - } - return uniqueInstance; - } - - // other useful methods here - public String getDescription() { - return "I'm a classic Singleton!"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/SingletonClient.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/SingletonClient.java deleted file mode 100755 index b88c188..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/classic/SingletonClient.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.singleton.classic; - -public class SingletonClient { - public static void main(String[] args) { - Singleton singleton = Singleton.getInstance(); - System.out.println(singleton.getDescription()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/Singleton.java deleted file mode 100755 index 0c42339..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/Singleton.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.singleton.dcl; - -// -// Danger! This implementation of Singleton not -// guaranteed to work prior to Java 5 -// - -public class Singleton { - private volatile static Singleton uniqueInstance; - - private Singleton() {} - - public static Singleton getInstance() { - if (uniqueInstance == null) { - synchronized (Singleton.class) { - if (uniqueInstance == null) { - uniqueInstance = new Singleton(); - } - } - } - return uniqueInstance; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/SingletonClient.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/SingletonClient.java deleted file mode 100755 index 99e3c89..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/dcl/SingletonClient.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.singleton.dcl; - -public class SingletonClient { - public static void main(String[] args) { - Singleton singleton = Singleton.getInstance(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/Singleton.java deleted file mode 100755 index c416fd3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/Singleton.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.singleton.enumS; - -public enum Singleton { - UNIQUE_INSTANCE; - - // other useful fields here - - // other useful methods here - public String getDescription() { - return "I'm a thread safe Singleton!"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/SingletonClient.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/SingletonClient.java deleted file mode 100755 index ba364fc..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/enumS/SingletonClient.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.singleton.enumS; - -public class SingletonClient { - public static void main(String[] args) { - Singleton singleton = Singleton.UNIQUE_INSTANCE; - System.out.println(singleton.getDescription()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/Singleton.java deleted file mode 100755 index 6b721ff..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/Singleton.java +++ /dev/null @@ -1,16 +0,0 @@ -package headfirst.designpatterns.singleton.stat; - -public class Singleton { - private static Singleton uniqueInstance = new Singleton(); - - private Singleton() {} - - public static Singleton getInstance() { - return uniqueInstance; - } - - // other useful methods here - public String getDescription() { - return "I'm a statically initialized Singleton!"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/SingletonClient.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/SingletonClient.java deleted file mode 100755 index caa1249..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/stat/SingletonClient.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.singleton.stat; - -public class SingletonClient { - public static void main(String[] args) { - Singleton singleton = Singleton.getInstance(); - System.out.println(singleton.getDescription()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/CoolerSingleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/CoolerSingleton.java deleted file mode 100755 index 0716bfe..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/CoolerSingleton.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.singleton.subclass; - -public class CoolerSingleton extends Singleton { - // useful instance variables here - protected static Singleton uniqueInstance; - - private CoolerSingleton() { - super(); - } - - // useful methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/HotterSingleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/HotterSingleton.java deleted file mode 100755 index c2144be..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/HotterSingleton.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.singleton.subclass; - -public class HotterSingleton extends Singleton { - // useful instance variables here - - private HotterSingleton() { - super(); - } - - // useful methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/Singleton.java deleted file mode 100755 index 0feca08..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/Singleton.java +++ /dev/null @@ -1,18 +0,0 @@ -package headfirst.designpatterns.singleton.subclass; - -public class Singleton { - protected static Singleton uniqueInstance; - - // other useful instance variables here - - protected Singleton() {} - - public static synchronized Singleton getInstance() { - if (uniqueInstance == null) { - uniqueInstance = new Singleton(); - } - return uniqueInstance; - } - - // other useful methods here -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/SingletonTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/SingletonTestDrive.java deleted file mode 100755 index ce9683c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/subclass/SingletonTestDrive.java +++ /dev/null @@ -1,10 +0,0 @@ -package headfirst.designpatterns.singleton.subclass; - -public class SingletonTestDrive { - public static void main(String[] args) { - Singleton foo = CoolerSingleton.getInstance(); - Singleton bar = HotterSingleton.getInstance(); - System.out.println(foo); - System.out.println(bar); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/Singleton.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/Singleton.java deleted file mode 100755 index 2ac413c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/Singleton.java +++ /dev/null @@ -1,21 +0,0 @@ -package headfirst.designpatterns.singleton.threadsafe; - -public class Singleton { - private static Singleton uniqueInstance; - - // other useful instance variables here - - private Singleton() {} - - public static synchronized Singleton getInstance() { - if (uniqueInstance == null) { - uniqueInstance = new Singleton(); - } - return uniqueInstance; - } - - // other useful methods here - public String getDescription() { - return "I'm a thread safe Singleton!"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/SingletonClient.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/SingletonClient.java deleted file mode 100755 index 8dc84b3..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/singleton/threadsafe/SingletonClient.java +++ /dev/null @@ -1,8 +0,0 @@ -package headfirst.designpatterns.singleton.threadsafe; - -public class SingletonClient { - public static void main(String[] args) { - Singleton singleton = Singleton.getInstance(); - System.out.println(singleton.getDescription()); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachine.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachine.java deleted file mode 100755 index 4312eaf..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachine.java +++ /dev/null @@ -1,107 +0,0 @@ -package headfirst.designpatterns.state.gumball; - -public class GumballMachine { - - final static int SOLD_OUT = 0; - final static int NO_QUARTER = 1; - final static int HAS_QUARTER = 2; - final static int SOLD = 3; - - int state = SOLD_OUT; - int count = 0; - - public GumballMachine(int count) { - this.count = count; - if (count > 0) { - state = NO_QUARTER; - } - } - - public void insertQuarter() { - if (state == HAS_QUARTER) { - System.out.println("You can't insert another quarter"); - } else if (state == NO_QUARTER) { - state = HAS_QUARTER; - System.out.println("You inserted a quarter"); - } else if (state == SOLD_OUT) { - System.out.println("You can't insert a quarter, the machine is sold out"); - } else if (state == SOLD) { - System.out.println("Please wait, we're already giving you a gumball"); - } - } - - public void ejectQuarter() { - if (state == HAS_QUARTER) { - System.out.println("Quarter returned"); - state = NO_QUARTER; - } else if (state == NO_QUARTER) { - System.out.println("You haven't inserted a quarter"); - } else if (state == SOLD) { - System.out.println("Sorry, you already turned the crank"); - } else if (state == SOLD_OUT) { - System.out.println("You can't eject, you haven't inserted a quarter yet"); - } - } - - public void turnCrank() { - if (state == SOLD) { - System.out.println("Turning twice doesn't get you another gumball!"); - } else if (state == NO_QUARTER) { - System.out.println("You turned but there's no quarter"); - } else if (state == SOLD_OUT) { - System.out.println("You turned, but there are no gumballs"); - } else if (state == HAS_QUARTER) { - System.out.println("You turned..."); - state = SOLD; - dispense(); - } - } - - private void dispense() { - if (state == SOLD) { - System.out.println("A gumball comes rolling out the slot"); - count = count - 1; - if (count == 0) { - System.out.println("Oops, out of gumballs!"); - state = SOLD_OUT; - } else { - state = NO_QUARTER; - } - } else if (state == NO_QUARTER) { - System.out.println("You need to pay first"); - } else if (state == SOLD_OUT) { - System.out.println("No gumball dispensed"); - } else if (state == HAS_QUARTER) { - System.out.println("No gumball dispensed"); - } - } - - public void refill(int numGumBalls) { - this.count = numGumBalls; - state = NO_QUARTER; - } - - public String toString() { - StringBuffer result = new StringBuffer(); - result.append("\nMighty Gumball, Inc."); - result.append("\nJava-enabled Standing Gumball Model #2004\n"); - result.append("Inventory: " + count + " gumball"); - if (count != 1) { - result.append("s"); - } - result.append("\nMachine is "); - if (state == SOLD_OUT) { - result.append("sold out"); - } else if (state == NO_QUARTER) { - result.append("waiting for quarter"); - } else if (state == HAS_QUARTER) { - result.append("waiting for turn of crank"); - } else if (state == SOLD) { - result.append("delivering a gumball"); - } - result.append("\n"); - return result.toString(); - } -} - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachineTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachineTestDrive.java deleted file mode 100755 index 6f3d2db..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumball/GumballMachineTestDrive.java +++ /dev/null @@ -1,39 +0,0 @@ -package headfirst.designpatterns.state.gumball; - -public class GumballMachineTestDrive { - - public static void main(String[] args) { - GumballMachine gumballMachine = new GumballMachine(5); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.ejectQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.ejectQuarter(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachine.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachine.java deleted file mode 100755 index 9650c29..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachine.java +++ /dev/null @@ -1,92 +0,0 @@ -package headfirst.designpatterns.state.gumballstate; - -public class GumballMachine { - - State soldOutState; - State noQuarterState; - State hasQuarterState; - State soldState; - - State state; - int count = 0; - - public GumballMachine(int numberGumballs) { - soldOutState = new SoldOutState(this); - noQuarterState = new NoQuarterState(this); - hasQuarterState = new HasQuarterState(this); - soldState = new SoldState(this); - - this.count = numberGumballs; - if (numberGumballs > 0) { - state = noQuarterState; - } else { - state = soldOutState; - } - } - - public void insertQuarter() { - state.insertQuarter(); - } - - public void ejectQuarter() { - state.ejectQuarter(); - } - - public void turnCrank() { - state.turnCrank(); - state.dispense(); - } - - void releaseBall() { - System.out.println("A gumball comes rolling out the slot..."); - if (count > 0) { - count = count - 1; - } - } - - int getCount() { - return count; - } - - void refill(int count) { - this.count += count; - System.out.println("The gumball machine was just refilled; its new count is: " + this.count); - state.refill(); - } - - void setState(State state) { - this.state = state; - } - public State getState() { - return state; - } - - public State getSoldOutState() { - return soldOutState; - } - - public State getNoQuarterState() { - return noQuarterState; - } - - public State getHasQuarterState() { - return hasQuarterState; - } - - public State getSoldState() { - return soldState; - } - - public String toString() { - StringBuffer result = new StringBuffer(); - result.append("\nMighty Gumball, Inc."); - result.append("\nJava-enabled Standing Gumball Model #2004"); - result.append("\nInventory: " + count + " gumball"); - if (count != 1) { - result.append("s"); - } - result.append("\n"); - result.append("Machine is " + state + "\n"); - return result.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachineTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachineTestDrive.java deleted file mode 100755 index 5ced78b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/GumballMachineTestDrive.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.state.gumballstate; - -public class GumballMachineTestDrive { - - public static void main(String[] args) { - GumballMachine gumballMachine = new GumballMachine(2); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - gumballMachine.refill(5); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/HasQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/HasQuarterState.java deleted file mode 100755 index 6e9fb11..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/HasQuarterState.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.state.gumballstate; - -//import java.util.Random; - -public class HasQuarterState implements State { - GumballMachine gumballMachine; - - public HasQuarterState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You can't insert another quarter"); - } - - public void ejectQuarter() { - System.out.println("Quarter returned"); - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } - - public void turnCrank() { - System.out.println("You turned..."); - gumballMachine.setState(gumballMachine.getSoldState()); - } - - public void dispense() { - System.out.println("No gumball dispensed"); - } - - public void refill() { } - - public String toString() { - return "waiting for turn of crank"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/NoQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/NoQuarterState.java deleted file mode 100755 index d8c889b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/NoQuarterState.java +++ /dev/null @@ -1,32 +0,0 @@ -package headfirst.designpatterns.state.gumballstate; - -public class NoQuarterState implements State { - GumballMachine gumballMachine; - - public NoQuarterState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You inserted a quarter"); - gumballMachine.setState(gumballMachine.getHasQuarterState()); - } - - public void ejectQuarter() { - System.out.println("You haven't inserted a quarter"); - } - - public void turnCrank() { - System.out.println("You turned, but there's no quarter"); - } - - public void dispense() { - System.out.println("You need to pay first"); - } - - public void refill() { } - - public String toString() { - return "waiting for quarter"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldOutState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldOutState.java deleted file mode 100755 index d3818f6..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldOutState.java +++ /dev/null @@ -1,33 +0,0 @@ -package headfirst.designpatterns.state.gumballstate; - -public class SoldOutState implements State { - GumballMachine gumballMachine; - - public SoldOutState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You can't insert a quarter, the machine is sold out"); - } - - public void ejectQuarter() { - System.out.println("You can't eject, you haven't inserted a quarter yet"); - } - - public void turnCrank() { - System.out.println("You turned, but there are no gumballs"); - } - - public void dispense() { - System.out.println("No gumball dispensed"); - } - - public void refill() { - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } - - public String toString() { - return "sold out"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldState.java deleted file mode 100755 index 3b1499a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/SoldState.java +++ /dev/null @@ -1,40 +0,0 @@ -package headfirst.designpatterns.state.gumballstate; - -public class SoldState implements State { - - GumballMachine gumballMachine; - - public SoldState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("Please wait, we're already giving you a gumball"); - } - - public void ejectQuarter() { - System.out.println("Sorry, you already turned the crank"); - } - - public void turnCrank() { - System.out.println("Turning twice doesn't get you another gumball!"); - } - - public void dispense() { - gumballMachine.releaseBall(); - if (gumballMachine.getCount() > 0) { - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } else { - System.out.println("Oops, out of gumballs!"); - gumballMachine.setState(gumballMachine.getSoldOutState()); - } - } - - public void refill() { } - - public String toString() { - return "dispensing a gumball"; - } -} - - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/State.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/State.java deleted file mode 100755 index 58796df..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstate/State.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.state.gumballstate; - -public interface State { - - public void insertQuarter(); - public void ejectQuarter(); - public void turnCrank(); - public void dispense(); - - public void refill(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachine.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachine.java deleted file mode 100755 index 499027c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachine.java +++ /dev/null @@ -1,97 +0,0 @@ -package headfirst.designpatterns.state.gumballstatewinner; - -public class GumballMachine { - - State soldOutState; - State noQuarterState; - State hasQuarterState; - State soldState; - State winnerState; - - State state = soldOutState; - int count = 0; - - public GumballMachine(int numberGumballs) { - soldOutState = new SoldOutState(this); - noQuarterState = new NoQuarterState(this); - hasQuarterState = new HasQuarterState(this); - soldState = new SoldState(this); - winnerState = new WinnerState(this); - - this.count = numberGumballs; - if (numberGumballs > 0) { - state = noQuarterState; - } - } - - public void insertQuarter() { - state.insertQuarter(); - } - - public void ejectQuarter() { - state.ejectQuarter(); - } - - public void turnCrank() { - state.turnCrank(); - state.dispense(); - } - - void setState(State state) { - this.state = state; - } - - void releaseBall() { - System.out.println("A gumball comes rolling out the slot..."); - if (count > 0) { - count = count - 1; - } - } - - int getCount() { - return count; - } - - void refill(int count) { - this.count += count; - System.out.println("The gumball machine was just refilled; its new count is: " + this.count); - state.refill(); - } - - public State getState() { - return state; - } - - public State getSoldOutState() { - return soldOutState; - } - - public State getNoQuarterState() { - return noQuarterState; - } - - public State getHasQuarterState() { - return hasQuarterState; - } - - public State getSoldState() { - return soldState; - } - - public State getWinnerState() { - return winnerState; - } - - public String toString() { - StringBuffer result = new StringBuffer(); - result.append("\nMighty Gumball, Inc."); - result.append("\nJava-enabled Standing Gumball Model #2004"); - result.append("\nInventory: " + count + " gumball"); - if (count != 1) { - result.append("s"); - } - result.append("\n"); - result.append("Machine is " + state + "\n"); - return result.toString(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachineTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachineTestDrive.java deleted file mode 100755 index 6e43755..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/GumballMachineTestDrive.java +++ /dev/null @@ -1,46 +0,0 @@ -package headfirst.designpatterns.state.gumballstatewinner; - -public class GumballMachineTestDrive { - - public static void main(String[] args) { - GumballMachine gumballMachine = - new GumballMachine(10); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - gumballMachine.insertQuarter(); - gumballMachine.turnCrank(); - - System.out.println(gumballMachine); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/HasQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/HasQuarterState.java deleted file mode 100755 index efaabd4..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/HasQuarterState.java +++ /dev/null @@ -1,41 +0,0 @@ -package headfirst.designpatterns.state.gumballstatewinner; - -import java.util.Random; - -public class HasQuarterState implements State { - Random randomWinner = new Random(System.currentTimeMillis()); - GumballMachine gumballMachine; - - public HasQuarterState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You can't insert another quarter"); - } - - public void ejectQuarter() { - System.out.println("Quarter returned"); - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } - - public void turnCrank() { - System.out.println("You turned..."); - int winner = randomWinner.nextInt(10); - if ((winner == 0) && (gumballMachine.getCount() > 1)) { - gumballMachine.setState(gumballMachine.getWinnerState()); - } else { - gumballMachine.setState(gumballMachine.getSoldState()); - } - } - - public void dispense() { - System.out.println("No gumball dispensed"); - } - - public void refill() { } - - public String toString() { - return "waiting for turn of crank"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/NoQuarterState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/NoQuarterState.java deleted file mode 100755 index 448c4d0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/NoQuarterState.java +++ /dev/null @@ -1,32 +0,0 @@ -package headfirst.designpatterns.state.gumballstatewinner; - -public class NoQuarterState implements State { - GumballMachine gumballMachine; - - public NoQuarterState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You inserted a quarter"); - gumballMachine.setState(gumballMachine.getHasQuarterState()); - } - - public void ejectQuarter() { - System.out.println("You haven't inserted a quarter"); - } - - public void turnCrank() { - System.out.println("You turned, but there's no quarter"); - } - - public void dispense() { - System.out.println("You need to pay first"); - } - - public void refill() { } - - public String toString() { - return "waiting for quarter"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldOutState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldOutState.java deleted file mode 100755 index 9fdfd23..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldOutState.java +++ /dev/null @@ -1,33 +0,0 @@ -package headfirst.designpatterns.state.gumballstatewinner; - -public class SoldOutState implements State { - GumballMachine gumballMachine; - - public SoldOutState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("You can't insert a quarter, the machine is sold out"); - } - - public void ejectQuarter() { - System.out.println("You can't eject, you haven't inserted a quarter yet"); - } - - public void turnCrank() { - System.out.println("You turned, but there are no gumballs"); - } - - public void dispense() { - System.out.println("No gumball dispensed"); - } - - public void refill() { - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } - - public String toString() { - return "sold out"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldState.java deleted file mode 100755 index 4d816b5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/SoldState.java +++ /dev/null @@ -1,37 +0,0 @@ -package headfirst.designpatterns.state.gumballstatewinner; - -public class SoldState implements State { - GumballMachine gumballMachine; - - public SoldState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("Please wait, we're already giving you a gumball"); - } - - public void ejectQuarter() { - System.out.println("Sorry, you already turned the crank"); - } - - public void turnCrank() { - System.out.println("Turning twice doesn't get you another gumball!"); - } - - public void dispense() { - gumballMachine.releaseBall(); - if (gumballMachine.getCount() > 0) { - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } else { - System.out.println("Oops, out of gumballs!"); - gumballMachine.setState(gumballMachine.getSoldOutState()); - } - } - - public void refill() { } - - public String toString() { - return "dispensing a gumball"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/State.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/State.java deleted file mode 100755 index eaee8e5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/State.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.state.gumballstatewinner; - -public interface State { - - public void insertQuarter(); - public void ejectQuarter(); - public void turnCrank(); - public void dispense(); - - public void refill(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/WinnerState.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/WinnerState.java deleted file mode 100755 index 1f84d09..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/state/gumballstatewinner/WinnerState.java +++ /dev/null @@ -1,43 +0,0 @@ -package headfirst.designpatterns.state.gumballstatewinner; - -public class WinnerState implements State { - GumballMachine gumballMachine; - - public WinnerState(GumballMachine gumballMachine) { - this.gumballMachine = gumballMachine; - } - - public void insertQuarter() { - System.out.println("Please wait, we're already giving you a Gumball"); - } - - public void ejectQuarter() { - System.out.println("Please wait, we're already giving you a Gumball"); - } - - public void turnCrank() { - System.out.println("Turning again doesn't get you another gumball!"); - } - - public void dispense() { - gumballMachine.releaseBall(); - if (gumballMachine.getCount() == 0) { - gumballMachine.setState(gumballMachine.getSoldOutState()); - } else { - gumballMachine.releaseBall(); - System.out.println("YOU'RE A WINNER! You got two gumballs for your quarter"); - if (gumballMachine.getCount() > 0) { - gumballMachine.setState(gumballMachine.getNoQuarterState()); - } else { - System.out.println("Oops, out of gumballs!"); - gumballMachine.setState(gumballMachine.getSoldOutState()); - } - } - } - - public void refill() { } - - public String toString() { - return "despensing two gumballs for your quarter, because YOU'RE A WINNER!"; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/AnimalTest.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/AnimalTest.java deleted file mode 100644 index b74481c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/AnimalTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package headfirst.designpatterns.strategy; - -import java.util.ArrayList; - -public class AnimalTest { - - public static void main(String[] args) { - AnimalTest at = new AnimalTest(); - at.makeSomeAnimals(); - } - public void makeSomeAnimals() { - Animal dog = new Dog(); - Animal cat = new Cat(); - // treat dogs and cats as their supertype, Animal - ArrayList animals = new ArrayList(); - animals.add(dog); - animals.add(cat); - animals.forEach(Animal::makeSound); // can call makeSound on any Animal - } - - public abstract class Animal { - abstract void makeSound(); - } - public class Dog extends Animal { - void makeSound() { - bark(); - } - void bark() { - System.out.println("Woof"); - } - } - public class Cat extends Animal { - void makeSound() { - meow(); - } - void meow() { - System.out.println("Meow"); - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/DecoyDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/DecoyDuck.java deleted file mode 100755 index a02c64a..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/DecoyDuck.java +++ /dev/null @@ -1,11 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class DecoyDuck extends Duck { - public DecoyDuck() { - setFlyBehavior(new FlyNoWay()); - setQuackBehavior(new MuteQuack()); - } - public void display() { - System.out.println("I'm a duck Decoy"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Duck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Duck.java deleted file mode 100755 index 8535201..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Duck.java +++ /dev/null @@ -1,31 +0,0 @@ -package headfirst.designpatterns.strategy; - -public abstract class Duck { - FlyBehavior flyBehavior; - QuackBehavior quackBehavior; - - public Duck() { - } - - public void setFlyBehavior(FlyBehavior fb) { - flyBehavior = fb; - } - - public void setQuackBehavior(QuackBehavior qb) { - quackBehavior = qb; - } - - abstract void display(); - - public void performFly() { - flyBehavior.fly(); - } - - public void performQuack() { - quackBehavior.quack(); - } - - public void swim() { - System.out.println("All ducks float, even decoys!"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FakeQuack.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FakeQuack.java deleted file mode 100755 index 13dd018..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FakeQuack.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class FakeQuack implements QuackBehavior { - public void quack() { - System.out.println("Qwak"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyBehavior.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyBehavior.java deleted file mode 100755 index c1c337b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyBehavior.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.strategy; - -public interface FlyBehavior { - public void fly(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyNoWay.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyNoWay.java deleted file mode 100755 index dd2bec0..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyNoWay.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class FlyNoWay implements FlyBehavior { - public void fly() { - System.out.println("I can't fly"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyRocketPowered.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyRocketPowered.java deleted file mode 100755 index 40d862e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyRocketPowered.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class FlyRocketPowered implements FlyBehavior { - public void fly() { - System.out.println("I'm flying with a rocket"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyWithWings.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyWithWings.java deleted file mode 100755 index ddc1374..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/FlyWithWings.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class FlyWithWings implements FlyBehavior { - public void fly() { - System.out.println("I'm flying!!"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MallardDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MallardDuck.java deleted file mode 100755 index a58383c..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MallardDuck.java +++ /dev/null @@ -1,15 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class MallardDuck extends Duck { - - public MallardDuck() { - - quackBehavior = new Quack(); - flyBehavior = new FlyWithWings(); - - } - - public void display() { - System.out.println("I'm a real Mallard duck"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator.java deleted file mode 100755 index f13e8cc..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class MiniDuckSimulator { - - public static void main(String[] args) { - - MallardDuck mallard = new MallardDuck(); - FlyBehavior cantFly = () -> System.out.println("I can't fly"); - QuackBehavior squeak = () -> System.out.println("Squeak"); - RubberDuck rubberDuckie = new RubberDuck(cantFly, squeak); - DecoyDuck decoy = new DecoyDuck(); - - Duck model = new ModelDuck(); - - mallard.performQuack(); - rubberDuckie.performQuack(); - decoy.performQuack(); - - model.performFly(); - model.setFlyBehavior(new FlyRocketPowered()); - model.performFly(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator1.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator1.java deleted file mode 100755 index 4f8b0c1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MiniDuckSimulator1.java +++ /dev/null @@ -1,17 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class MiniDuckSimulator1 { - - public static void main(String[] args) { - - Duck mallard = new MallardDuck(); - mallard.performQuack(); - mallard.performFly(); - - Duck model = new ModelDuck(); - model.performFly(); - model.setFlyBehavior(new FlyRocketPowered()); - model.performFly(); - - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/ModelDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/ModelDuck.java deleted file mode 100755 index f27c30e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/ModelDuck.java +++ /dev/null @@ -1,12 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class ModelDuck extends Duck { - public ModelDuck() { - flyBehavior = new FlyNoWay(); - quackBehavior = new Quack(); - } - - public void display() { - System.out.println("I'm a model duck"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MuteQuack.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MuteQuack.java deleted file mode 100755 index 485e721..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/MuteQuack.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class MuteQuack implements QuackBehavior { - public void quack() { - System.out.println("<< Silence >>"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Quack.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Quack.java deleted file mode 100755 index b96c3c1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Quack.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class Quack implements QuackBehavior { - public void quack() { - System.out.println("Quack"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/QuackBehavior.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/QuackBehavior.java deleted file mode 100755 index 91ce5fa..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/QuackBehavior.java +++ /dev/null @@ -1,5 +0,0 @@ -package headfirst.designpatterns.strategy; - -public interface QuackBehavior { - public void quack(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RedHeadDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RedHeadDuck.java deleted file mode 100755 index ceb65da..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RedHeadDuck.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class RedHeadDuck extends Duck { - - public RedHeadDuck() { - flyBehavior = new FlyWithWings(); - quackBehavior = new Quack(); - } - - public void display() { - System.out.println("I'm a real Red Headed duck"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RubberDuck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RubberDuck.java deleted file mode 100755 index 4c4df51..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/RubberDuck.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class RubberDuck extends Duck { - - public RubberDuck() { - flyBehavior = new FlyNoWay(); - //quackBehavior = new Squeak(); - quackBehavior = () -> System.out.println("Squeak"); - } - - public RubberDuck(FlyBehavior flyBehavior, QuackBehavior quackBehavior) { - this.flyBehavior = flyBehavior; - this.quackBehavior = quackBehavior; - } - - public void display() { - System.out.println("I'm a rubber duckie"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Squeak.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Squeak.java deleted file mode 100755 index 8751abd..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/Squeak.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy; - -public class Squeak implements QuackBehavior { - public void quack() { - System.out.println("Squeak"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/BasicCameraApp.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/BasicCameraApp.java deleted file mode 100755 index 260b086..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/BasicCameraApp.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy.challenge; - -public class BasicCameraApp extends PhoneCameraApp { - public void edit() { - System.out.println("Basic editing features"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/CameraPlusApp.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/CameraPlusApp.java deleted file mode 100755 index 998e2de..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/CameraPlusApp.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy.challenge; - -public class CameraPlusApp extends PhoneCameraApp { - public void edit() { - System.out.println("Extra snazzy photo editing features"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Email.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Email.java deleted file mode 100755 index f0b88c1..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Email.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy.challenge; - -public class Email implements ShareStrategy { - public void share() { - System.out.println("I'm emailing the photo"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhoneCameraApp.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhoneCameraApp.java deleted file mode 100755 index ef47d54..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhoneCameraApp.java +++ /dev/null @@ -1,19 +0,0 @@ -package headfirst.designpatterns.strategy.challenge; - -public abstract class PhoneCameraApp { - ShareStrategy shareStrategy; - - public void setShareStrategy(ShareStrategy shareStrategy) { - this.shareStrategy = shareStrategy; - } - public void share() { - shareStrategy.share(); - } - public void take() { - System.out.println("Taking the photo"); - } - public void save() { - System.out.println("Saving the photo"); - } - public abstract void edit(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhotoWithPhone.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhotoWithPhone.java deleted file mode 100755 index 8056cbc..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/PhotoWithPhone.java +++ /dev/null @@ -1,29 +0,0 @@ -package headfirst.designpatterns.strategy.challenge; - -import java.util.Scanner; - -public class PhotoWithPhone { - - public static void main(String[] args) { - - PhoneCameraApp cameraApp = new BasicCameraApp(); - String share = getSharing(); - switch (share) { - case("t"): cameraApp.setShareStrategy(new Txt()); break; - case("e"): cameraApp.setShareStrategy(new Email()); break; - case("s"): cameraApp.setShareStrategy(new Social()); break; - default: cameraApp.setShareStrategy(new Txt()); - } - cameraApp.take(); - cameraApp.edit(); - cameraApp.save(); - cameraApp.share(); - } - public static String getSharing() { - Scanner scanner = new Scanner(System.in); - System.out.println("Share with txt (t), email (e), or social media (s)?"); - String appName = scanner.next(); - scanner.close(); - return appName; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/ShareStrategy.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/ShareStrategy.java deleted file mode 100755 index 0b644e5..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/ShareStrategy.java +++ /dev/null @@ -1,6 +0,0 @@ -package headfirst.designpatterns.strategy.challenge; - -@FunctionalInterface -public interface ShareStrategy { - public void share(); -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Social.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Social.java deleted file mode 100755 index 9fd5375..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Social.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy.challenge; - -public class Social implements ShareStrategy { - public void share() { - System.out.println("I'm posting the photo on social media"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Txt.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Txt.java deleted file mode 100755 index 6ca108b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/strategy/challenge/Txt.java +++ /dev/null @@ -1,7 +0,0 @@ -package headfirst.designpatterns.strategy.challenge; - -public class Txt implements ShareStrategy { - public void share() { - System.out.println("I'm txting the photo"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/AppletSource.txt b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/AppletSource.txt deleted file mode 100755 index 347e221..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/AppletSource.txt +++ /dev/null @@ -1,102 +0,0 @@ -package java.applet; - -import java.awt.*; -import java.awt.image.ColorModel; -import java.net.URL; -import java.net.MalformedURLException; -import java.util.Hashtable; -import java.util.Locale; - -public class Applet extends Panel { - transient private AppletStub stub; - public final void setStub(AppletStub stub) { - this.stub = (AppletStub)stub; - } - public boolean isActive() { - if (stub != null) { - return stub.isActive(); - } else { // If stub field not filled in, applet never active - return false; - } - } - public URL getDocumentBase() { - return stub.getDocumentBase(); - } - public URL getCodeBase() { - return stub.getCodeBase(); - } - public String getParameter(String name) { - return stub.getParameter(name); - } - public AppletContext getAppletContext() { - return stub.getAppletContext(); - } - public void resize(int width, int height) { - Dimension d = size(); - if ((d.width != width) || (d.height != height)) { - super.resize(width, height); - if (stub != null) { - stub.appletResize(width, height); - } - } - } - public void resize(Dimension d) { - resize(d.width, d.height); - } - public void showStatus(String msg) { - getAppletContext().showStatus(msg); - } - public Image getImage(URL url) { - return getAppletContext().getImage(url); - } - public Image getImage(URL url, String name) { - try { - return getImage(new URL(url, name)); - } catch (MalformedURLException e) { - return null; - } - } - public AudioClip getAudioClip(URL url) { - return getAppletContext().getAudioClip(url); - } - public AudioClip getAudioClip(URL url, String name) { - try { - return getAudioClip(new URL(url, name)); - } catch (MalformedURLException e) { - return null; - } - } - public String getAppletInfo() { - return null; - } - public Locale getLocale() { - Locale locale = super.getLocale(); - if (locale == null) { - return Locale.getDefault(); - } - return locale; - } - public String[][] getParameterInfo() { - return null; - public void play(URL url) { - AudioClip clip = getAudioClip(url); - if (clip != null) { - clip.play(); - } - } - public void play(URL url, String name) { - AudioClip clip = getAudioClip(url, name); - if (clip != null) { - clip.play(); - } - } - public void init() { - } - public void start() { - } - public void stop() { - } - public void destroy() { -} -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/MyApplet.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/MyApplet.java deleted file mode 100755 index 8f5c834..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/applet/MyApplet.java +++ /dev/null @@ -1,34 +0,0 @@ -package headfirst.designpatterns.templatemethod.applet; - -import java.applet.Applet; -import java.awt.Graphics; - -public class MyApplet extends Applet { - private static final long serialVersionUID = 2L; - String message; - - public void init() { - message = "Hello World, I'm alive!"; - repaint(); - } - - public void start() { - message = "Now I'm starting up..."; - repaint(); - } - - public void stop() { - message = "Oh, now I'm being stopped..."; - repaint(); - } - - public void destroy() { - message = "Goodbye, cruel world"; - repaint(); - } - - public void paint(Graphics g) { - g.drawString(message, 5, 15); - } -} - diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/BeverageTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/BeverageTestDrive.java deleted file mode 100755 index 16edaa9..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/BeverageTestDrive.java +++ /dev/null @@ -1,25 +0,0 @@ -package headfirst.designpatterns.templatemethod.barista; - -public class BeverageTestDrive { - public static void main(String[] args) { - - Tea tea = new Tea(); - Coffee coffee = new Coffee(); - - System.out.println("\nMaking tea..."); - tea.prepareRecipe(); - - System.out.println("\nMaking coffee..."); - coffee.prepareRecipe(); - - - TeaWithHook teaHook = new TeaWithHook(); - CoffeeWithHook coffeeHook = new CoffeeWithHook(); - - System.out.println("\nMaking tea..."); - teaHook.prepareRecipe(); - - System.out.println("\nMaking coffee..."); - coffeeHook.prepareRecipe(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverage.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverage.java deleted file mode 100755 index d0a978f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverage.java +++ /dev/null @@ -1,23 +0,0 @@ -package headfirst.designpatterns.templatemethod.barista; - -public abstract class CaffeineBeverage { - - final void prepareRecipe() { - boilWater(); - brew(); - pourInCup(); - addCondiments(); - } - - abstract void brew(); - - abstract void addCondiments(); - - void boilWater() { - System.out.println("Boiling water"); - } - - void pourInCup() { - System.out.println("Pouring into cup"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverageWithHook.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverageWithHook.java deleted file mode 100755 index 2199d78..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CaffeineBeverageWithHook.java +++ /dev/null @@ -1,29 +0,0 @@ -package headfirst.designpatterns.templatemethod.barista; - -public abstract class CaffeineBeverageWithHook { - - final void prepareRecipe() { - boilWater(); - brew(); - pourInCup(); - if (customerWantsCondiments()) { - addCondiments(); - } - } - - abstract void brew(); - - abstract void addCondiments(); - - void boilWater() { - System.out.println("Boiling water"); - } - - void pourInCup() { - System.out.println("Pouring into cup"); - } - - boolean customerWantsCondiments() { - return true; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Coffee.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Coffee.java deleted file mode 100755 index 0f8058b..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Coffee.java +++ /dev/null @@ -1,10 +0,0 @@ -package headfirst.designpatterns.templatemethod.barista; - -public class Coffee extends CaffeineBeverage { - public void brew() { - System.out.println("Dripping Coffee through filter"); - } - public void addCondiments() { - System.out.println("Adding Sugar and Milk"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CoffeeWithHook.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CoffeeWithHook.java deleted file mode 100755 index 7a10e54..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/CoffeeWithHook.java +++ /dev/null @@ -1,42 +0,0 @@ -package headfirst.designpatterns.templatemethod.barista; - -import java.io.*; - -public class CoffeeWithHook extends CaffeineBeverageWithHook { - - public void brew() { - System.out.println("Dripping Coffee through filter"); - } - - public void addCondiments() { - System.out.println("Adding Sugar and Milk"); - } - - public boolean customerWantsCondiments() { - - String answer = getUserInput(); - - if (answer.toLowerCase().startsWith("y")) { - return true; - } else { - return false; - } - } - - private String getUserInput() { - String answer = null; - - System.out.print("Would you like milk and sugar with your coffee (y/n)? "); - - BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); - try { - answer = in.readLine(); - } catch (IOException ioe) { - System.err.println("IO error trying to read your answer"); - } - if (answer == null) { - return "no"; - } - return answer; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Tea.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Tea.java deleted file mode 100755 index b60d91f..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/Tea.java +++ /dev/null @@ -1,10 +0,0 @@ -package headfirst.designpatterns.templatemethod.barista; - -public class Tea extends CaffeineBeverage { - public void brew() { - System.out.println("Steeping the tea"); - } - public void addCondiments() { - System.out.println("Adding Lemon"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/TeaWithHook.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/TeaWithHook.java deleted file mode 100755 index c65cdff..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/barista/TeaWithHook.java +++ /dev/null @@ -1,43 +0,0 @@ -package headfirst.designpatterns.templatemethod.barista; - -import java.io.*; - -public class TeaWithHook extends CaffeineBeverageWithHook { - - public void brew() { - System.out.println("Steeping the tea"); - } - - public void addCondiments() { - System.out.println("Adding Lemon"); - } - - public boolean customerWantsCondiments() { - - String answer = getUserInput(); - - if (answer.toLowerCase().startsWith("y")) { - return true; - } else { - return false; - } - } - - private String getUserInput() { - // get the user's response - String answer = null; - - System.out.print("Would you like lemon with your tea (y/n)? "); - - BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); - try { - answer = in.readLine(); - } catch (IOException ioe) { - System.err.println("IO error trying to read your answer"); - } - if (answer == null) { - return "no"; - } - return answer; - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/frame/MyFrame.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/frame/MyFrame.java deleted file mode 100755 index 13c440d..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/frame/MyFrame.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.templatemethod.frame; - -import java.awt.*; -import javax.swing.*; - -public class MyFrame extends JFrame { - private static final long serialVersionUID = 2L; - - public MyFrame(String title) { - super(title); - this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - this.setSize(300,300); - this.setVisible(true); - } - - public void paint(Graphics graphics) { - super.paint(graphics); - String msg = "I rule!!"; - graphics.drawString(msg, 100, 100); - } - - public static void main(String[] args) { - MyFrame myFrame = new MyFrame("Head First Design Patterns"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyListTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyListTestDrive.java deleted file mode 100644 index 4af8555..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyListTestDrive.java +++ /dev/null @@ -1,26 +0,0 @@ -package headfirst.designpatterns.templatemethod.list; - -import java.util.List; - -public class MyListTestDrive { - - public static void main(String[] args) { - String[] ducks = { "Mallard Duck", "Redhead Duck", "Rubber Duck", "Decoy Duck"}; - MyStringList ducksList = new MyStringList(ducks); - for (int i = 0; i < ducksList.size(); i++) { - System.out.println(ducksList.get(i)); - } - String oldDuck = ducksList.set(3, "Donald Duck"); - System.out.println("Replacing " + oldDuck); - System.out.println("New List:"); - for (int i = 0; i < ducksList.size(); i++) { - System.out.println(ducksList.get(i)); - } - // Now the real test... subList() - List ducksSubList = ducksList.subList(2, 3); - System.out.println("Created a sub list of ducks, with size: " + ducksSubList.size()); - for (int i = 0; i < ducksSubList.size(); i++) { - System.out.println(ducksSubList.get(i)); - } - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyStringList.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyStringList.java deleted file mode 100644 index 769ae24..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/list/MyStringList.java +++ /dev/null @@ -1,35 +0,0 @@ -package headfirst.designpatterns.templatemethod.list; - -import java.util.AbstractList; - -// AbstractList provides a skeletal implementation of the List interface -// to minimize the effort required to implement this interface backed by -// a "random access" data store (such as an array). - -// To implement an unmodifiable list, the programmer needs only to extend -// this class and provide implementations for the get(int) and size() methods. -// get(int index) is an abstract method in AbstractList -// size() is an abstract method in AbstractCollection -// subList(int fromIndex, int toIndex) returns a view of the portion of this list -// between the specified fromIndex, inclusive, and toIndex, exclusive. - -public class MyStringList extends AbstractList { - private String[] myList; - MyStringList(String[] strings) { - myList = strings; - } - @Override - public String get(int index) { - return myList[index]; - } - @Override - public String set(int index, String item) { - String oldString = myList[index]; - myList[index] = item; - return oldString; - } - @Override - public int size() { - return myList.length; - } -} \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Barista.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Barista.java deleted file mode 100755 index 7e5655e..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Barista.java +++ /dev/null @@ -1,13 +0,0 @@ -package headfirst.designpatterns.templatemethod.simplebarista; - -public class Barista { - - public static void main(String[] args) { - Tea tea = new Tea(); - Coffee coffee = new Coffee(); - System.out.println("Making tea..."); - tea.prepareRecipe(); - System.out.println("Making coffee..."); - coffee.prepareRecipe(); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Coffee.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Coffee.java deleted file mode 100755 index 7ee8d65..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Coffee.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.templatemethod.simplebarista; - -public class Coffee { - - void prepareRecipe() { - boilWater(); - brewCoffeeGrinds(); - pourInCup(); - addSugarAndMilk(); - } - - public void boilWater() { - System.out.println("Boiling water"); - } - - public void brewCoffeeGrinds() { - System.out.println("Dripping Coffee through filter"); - } - - public void pourInCup() { - System.out.println("Pouring into cup"); - } - - public void addSugarAndMilk() { - System.out.println("Adding Sugar and Milk"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Tea.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Tea.java deleted file mode 100755 index c0b8624..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/simplebarista/Tea.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.templatemethod.simplebarista; - -public class Tea { - - void prepareRecipe() { - boilWater(); - steepTeaBag(); - pourInCup(); - addLemon(); - } - - public void boilWater() { - System.out.println("Boiling water"); - } - - public void steepTeaBag() { - System.out.println("Steeping the tea"); - } - - public void addLemon() { - System.out.println("Adding Lemon"); - } - - public void pourInCup() { - System.out.println("Pouring into cup"); - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/Duck.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/Duck.java deleted file mode 100755 index 227c7ac..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/Duck.java +++ /dev/null @@ -1,27 +0,0 @@ -package headfirst.designpatterns.templatemethod.sort; - -public class Duck implements Comparable { - String name; - int weight; - - public Duck(String name, int weight) { - this.name = name; - this.weight = weight; - } - - public String toString() { - return name + " weighs " + weight; - } - - public int compareTo(Duck otherDuck) { - - - if (this.weight < otherDuck.weight) { - return -1; - } else if (this.weight == otherDuck.weight) { - return 0; - } else { // this.weight > otherDuck.weight - return 1; - } - } -} diff --git a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/DuckSortTestDrive.java b/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/DuckSortTestDrive.java deleted file mode 100755 index 2142eba..0000000 --- a/Head-First-Design-Patterns-master/src/headfirst/designpatterns/templatemethod/sort/DuckSortTestDrive.java +++ /dev/null @@ -1,31 +0,0 @@ -package headfirst.designpatterns.templatemethod.sort; - -import java.util.Arrays; - -public class DuckSortTestDrive { - - public static void main(String[] args) { - Duck[] ducks = { - new Duck("Daffy", 8), - new Duck("Dewey", 2), - new Duck("Howard", 7), - new Duck("Louie", 2), - new Duck("Donald", 10), - new Duck("Huey", 2) - }; - - System.out.println("Before sorting:"); - display(ducks); - - Arrays.sort(ducks); - - System.out.println("\nAfter sorting:"); - display(ducks); - } - - public static void display(Duck[] ducks) { - for (Duck d : ducks) { - System.out.println(d); - } - } -} diff --git a/Head-First-Design-Patterns-master/test.txt b/Head-First-Design-Patterns-master/test.txt deleted file mode 100644 index 7563cb4..0000000 --- a/Head-First-Design-Patterns-master/test.txt +++ /dev/null @@ -1 +0,0 @@ -I know the Decorator Pattern and HOW it's used in the JAVA.IO package. \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/testOut.txt b/Head-First-Design-Patterns-master/testOut.txt deleted file mode 100644 index 7563cb4..0000000 --- a/Head-First-Design-Patterns-master/testOut.txt +++ /dev/null @@ -1 +0,0 @@ -I know the Decorator Pattern and HOW it's used in the JAVA.IO package. \ No newline at end of file diff --git a/Head-First-Design-Patterns-master/zipInput.zip b/Head-First-Design-Patterns-master/zipInput.zip deleted file mode 100644 index 9d6ec8aa237c58a0e42ae3d10c21b106277d936f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 632 zcmWIWW@Zs#-~hs-6?0t}kN_`(07FJeM!XMqRbPle4Z!?mDLKe|(W(gcgk))*)mnWGR?3VrmGU*aB)(aO zEOC%tEvvin=7zJ8A2ON_|E%I=;5hPo)(3IsTiciE+PXT{1v$JnU2T-O{D)Ci8KYED zOZb$jc5k@P_3YU6#doQR_}+yD+<#=}iY=bbQZKkzbBp%*ShgvlmyG6d->hHev$9Hk z)x!Si4`=+JF!zU;eSkMRNB8qqCT2zkhBPJyh5&eIZYkh#MhZ+|_zEzTq!yRJ0#fvJ zew>OQXAmeLKZl$+cUnJOCs033 zL)XtY@WdHr?XN{V#aBLm3D@xOIp^o&f0Y?%H9N<|pV!n~fwsB Date: Thu, 26 Dec 2024 14:22:06 +0100 Subject: [PATCH 34/37] WIP: Result Design Pattern --- README.md | 1 + extra_result/readme.md | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 extra_result/readme.md diff --git a/README.md b/README.md index 72f6a7a..68ecc9a 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ I have added examples of pattern usage in the Python standard library and pypi - - [ ] Proxy - [ ] [Model View Controller (MVC)](chapter12_compound) - [ ] [Manager](chapter14_leftover) _(Bonus Pattern)_ +- [ ] [Result](extra_result) _(Bonus Pattern)_ ## Sample Code : Java diff --git a/extra_result/readme.md b/extra_result/readme.md new file mode 100644 index 0000000..afa66e5 --- /dev/null +++ b/extra_result/readme.md @@ -0,0 +1,23 @@ +# Result Design Pattern + +> **Result Pattern**: _(Bonus pattern not in the book)_ Defines an object representing +> both the +> status and the output of an operation. + +A result object is a container for the result of an operation, which can be either a +success or a failure, together with the output of the operation. The result pattern +is a fundamental part of the Rust programming language. + +### Class Diagram + +```mermaid +classDiagram + class Result { + status: bool + output: Any + } +``` + +People often say you should use exceptions - "Easier to Ask Forgiveness than Permission" over guard clauses - "Look Before You Leap" but what about the Result design pattern - returning an object which explicitly states whether the operation succeeded (as used in Rust)? + +The requests library is often cited as a quintessentially pythonic library - the response object in requests (representing a HTTP response) is essentially a Result object. The raise_for_status() method lets you use it with the EAFP philosophy. From df01c9313407f8698949f4d0b8d2bdebb0aac89f Mon Sep 17 00:00:00 2001 From: dancergraham Date: Thu, 26 Dec 2024 19:49:08 +0100 Subject: [PATCH 35/37] =?UTF-8?q?Example=20of=20the=20result=20design=20pa?= =?UTF-8?q?ttern=20in=20python=20=F0=9F=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extra_result/broken_config.json | 2 + extra_result/company_config.json | 4 ++ extra_result/filereader.py | 77 ++++++++++++++++++++++++++++++++ extra_result/readme.md | 7 +++ extra_result/user_config.json | 4 ++ 5 files changed, 94 insertions(+) create mode 100644 extra_result/broken_config.json create mode 100644 extra_result/company_config.json create mode 100644 extra_result/filereader.py create mode 100644 extra_result/user_config.json diff --git a/extra_result/broken_config.json b/extra_result/broken_config.json new file mode 100644 index 0000000..d9df176 --- /dev/null +++ b/extra_result/broken_config.json @@ -0,0 +1,2 @@ +{ + "broken file" diff --git a/extra_result/company_config.json b/extra_result/company_config.json new file mode 100644 index 0000000..fbfefb3 --- /dev/null +++ b/extra_result/company_config.json @@ -0,0 +1,4 @@ +{ + "home_directory": "/usr/local/", + "company_name": "Wickedly Smart" +} \ No newline at end of file diff --git a/extra_result/filereader.py b/extra_result/filereader.py new file mode 100644 index 0000000..52d8993 --- /dev/null +++ b/extra_result/filereader.py @@ -0,0 +1,77 @@ +import json + + +class JsonResult: + """ + Represents the outcome of reading/parsing a JSON file: + - success: A boolean indicating if the operation succeeded. + - data: Holds the successfully parsed JSON as a dictionary, if any. + - error: An error message if the operation failed. + """ + + def __init__(self, success, data=None, error=None): + self.success = success + self.data = data + self.error = error + + def __repr__(self): + if self.success: + return f"JsonResult(success=True, data={self.data})" + return f"JsonResult(success=False, error='{self.error}')" + + +def read_json_file(file_path): + """ + Attempts to open and parse a JSON file, returning a JsonResult object. + - If successful, contains the parsed data as a Python dictionary. + - If the file is missing or invalid JSON, it returns a failure with an error message. + """ + try: + with open(file_path, 'r', encoding='utf-8') as file: + contents = file.read() + parsed_data = json.loads(contents) + return JsonResult(success=True, data=parsed_data) + except FileNotFoundError: + return JsonResult(success=False, error=f"File '{file_path}' not found.") + except json.JSONDecodeError: + return JsonResult(success=False, error=f"File '{file_path}' contains invalid JSON.") + except Exception as e: + return JsonResult(success=False, error=str(e)) + + +def file_result_simulator(): + result_company = read_json_file("company_config.json") + if result_company.success: + print("[Company Config - Success]") + print("Parsed data:", result_company.data) + else: + print("[Company Config - Error]") + print("Issue:", result_company.error) + + result_user = read_json_file("user_config.json") + if result_user.success: + print("[User Config - Success]") + print("Parsed data:", result_user.data) + else: + print("[User Config - Error]") + print("Issue:", result_user.error) + + result_broken = read_json_file("broken_config.json") + if result_broken.success: + print("[User Config - Success]") + print("Parsed data:", result_broken.data) + else: + print("[Broken Config - Error]") + print("Issue:", result_broken.error) + + result_missing = read_json_file("missing_config.json") + if result_missing.success: + print("[Missing Config - Success]") + print("Parsed data:", result_missing.data) + else: + print("[Missing Config - Error]") + print("Issue:", result_missing.error) + + +if __name__ == "__main__": + file_result_simulator() diff --git a/extra_result/readme.md b/extra_result/readme.md index afa66e5..ef296dd 100644 --- a/extra_result/readme.md +++ b/extra_result/readme.md @@ -18,6 +18,13 @@ classDiagram } ``` +## Running the code + +```bash +python filereader.py +``` + + People often say you should use exceptions - "Easier to Ask Forgiveness than Permission" over guard clauses - "Look Before You Leap" but what about the Result design pattern - returning an object which explicitly states whether the operation succeeded (as used in Rust)? The requests library is often cited as a quintessentially pythonic library - the response object in requests (representing a HTTP response) is essentially a Result object. The raise_for_status() method lets you use it with the EAFP philosophy. diff --git a/extra_result/user_config.json b/extra_result/user_config.json new file mode 100644 index 0000000..5397d4e --- /dev/null +++ b/extra_result/user_config.json @@ -0,0 +1,4 @@ +{ + "home_directory": "/usr/local/my_files/", + "environment": "development" +} \ No newline at end of file From 396ae7bbdd376a735c1282346db1289d23f9c09f Mon Sep 17 00:00:00 2001 From: dancergraham Date: Thu, 26 Dec 2024 21:52:31 +0100 Subject: [PATCH 36/37] =?UTF-8?q?Update=20readme=20=F0=9F=93=96=20and=20ad?= =?UTF-8?q?d=20links=20=F0=9F=94=97=F0=9F=94=97=F0=9F=94=97=F0=9F=94=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extra_result/readme.md | 48 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/extra_result/readme.md b/extra_result/readme.md index ef296dd..562050a 100644 --- a/extra_result/readme.md +++ b/extra_result/readme.md @@ -6,7 +6,7 @@ A result object is a container for the result of an operation, which can be either a success or a failure, together with the output of the operation. The result pattern -is a fundamental part of the Rust programming language. +is a fundamental part of the Rust programming language in the form of the [Result enum][rust_result]. ### Class Diagram @@ -18,13 +18,51 @@ classDiagram } ``` -## Running the code +## Example + +The filereader example uses the Result pattern to handle common errors reading and +parsing json files. It puts all file reading and parsing logic into a single +function, which returns a Result object. The calling code can check the status without +needing to understand the details of the error. + +In this case we have correct files, a missing file and a bad file. All can be handled with the same +approach, in this case using the LBYL philosophy. + +### Running the code ```bash -python filereader.py + python filereader.py ``` +## Discussion + +People often say that +in Python you should use exceptions - "Easier to Ask Forgiveness than Permission" (EAFP) +over guard clauses - "Look Before You Leap" (LBYL), +but the **Result design pattern** - returning an object which explicitly +states whether the operation succeeded is a useful alternative where error handling is required and +can be compatible with both approaches. + +## Use in Python + +The asyncio [Future object][asyncio_future] can be seen as a result object - it +represents the result of an asynchronous operation but rather than a success or failure it is either done or not done. +Confusingly it contains a `.result` attribute which is the output of the operation, +but is not the same as the Result object in the Result pattern. + +The [requests library][requests] is often cited as a quintessentially +pythonic library - its [response object][response] (representing +the [HTTP response][http_response]) is essentially a **Result** object. +The [`raise_for_status()`][raise_for_status] method lets you easily use it with the EAFP philosophy. + +[rust_result]: https://doc.rust-lang.org/std/result/enum.Result.html + +[asyncio_future]: https://docs.python.org/3/library/asyncio-future.html#future-object + +[raise_for_status]: https://docs.python-requests.org/en/latest/api/#requests.Response.raise_for_status + +[requests]: https://docs.python-requests.org/en/latest/index.html -People often say you should use exceptions - "Easier to Ask Forgiveness than Permission" over guard clauses - "Look Before You Leap" but what about the Result design pattern - returning an object which explicitly states whether the operation succeeded (as used in Rust)? +[response]: https://docs.python-requests.org/en/latest/api/#requests.Response -The requests library is often cited as a quintessentially pythonic library - the response object in requests (representing a HTTP response) is essentially a Result object. The raise_for_status() method lets you use it with the EAFP philosophy. +[http_response]: https://developer.mozilla.org/en-US/docs/Web/API/Response \ No newline at end of file From 593c21e19af75d08b09163af8f97c1f7c777034e Mon Sep 17 00:00:00 2001 From: Graham Knapp <32717635+dancergraham@users.noreply.github.com> Date: Sat, 25 Jan 2025 15:27:07 +0100 Subject: [PATCH 37/37] fix:url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 68ecc9a..461aa0a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Head First Design Patterns python code -Head First Design Patterns Second EditionExample code from [Head First Design Patterns second edition](https://www.wickedlysmart.com/head-first-design-patterns/) translated to python to help me understand and memorise the patterns. +Head First Design Patterns Second EditionExample code from [Head First Design Patterns second edition](https://wickedlysmart.com/head-first-design-patterns/) translated to python to help me understand and memorise the patterns. I have added examples of pattern usage in the Python standard library and pypi - I am starting to see patterns everywhere!