├── $images
├── image-20200424003341569.png
└── image-20200424224740588.png
├── .idea
├── .gitignore
├── DesignPattern.iml
├── misc.xml
├── modules.xml
└── vcs.xml
├── 09_Strategy_Pattern.md
├── 10_Adapter_Pattern.md
├── 11_Template_Method_Pattern.md
├── 12_Factory_Method_Pattern.assets
└── image-20200402143300826.png
├── 12_Factory_Method_Pattern.md
├── 13_Singleton_Pattern.md
├── 14_Prototype_Pattern.md
├── 15_Builder_Pattern.md
├── 16_Abstract_Factory_Pattern.md
├── 17_Bridge_Pattern.md
├── 18_Composite_Pattern.md
├── 19_Decorator_Pattern.md
├── 20_Visitor_Pattern.md
├── 21_Chain_of_Responsibility.assets
└── image-20200420191016043.png
├── 21_Chain_of_Responsibility.md
├── 22_Facade.assets
└── image-20200421144251830.png
├── 22_Facade_Pattern.md
├── 23_Observer_Pattern.md
├── 24_Mediator_Pattern.md
├── 25_State_Pattern.md
├── 26_Memento_Pattern.md
├── 27_Flyweight_Pattern.md
├── 28_Proxy_Pattern.md
├── 29_Command_Pattern.md
├── DesignPattern
├── .classpath
├── .idea
│ ├── .gitignore
│ ├── misc.xml
│ ├── modules.xml
│ ├── uiDesigner.xml
│ └── vcs.xml
├── .project
├── DesignPattern.iml
├── out
│ └── production
│ │ └── DesignPattern
│ │ ├── .gitignore
│ │ ├── com
│ │ ├── AbstractFactoryPattern
│ │ │ ├── Main.class
│ │ │ ├── Sam
│ │ │ │ ├── SamBody.class
│ │ │ │ ├── SamFactory.class
│ │ │ │ └── SamWheel.class
│ │ │ ├── abst
│ │ │ │ ├── BikeFactory.class
│ │ │ │ ├── Body.class
│ │ │ │ └── Wheel.class
│ │ │ └── gt
│ │ │ │ ├── GtBikeFactory.class
│ │ │ │ ├── GtBody.class
│ │ │ │ └── GtWheel.class
│ │ ├── AbstractFactoryPattern02
│ │ │ ├── Main.class
│ │ │ ├── abst
│ │ │ │ ├── Button.class
│ │ │ │ ├── GuiFac.class
│ │ │ │ └── TextArea.class
│ │ │ └── concrete
│ │ │ │ ├── FactoryInstance.class
│ │ │ │ ├── LinuxButton.class
│ │ │ │ ├── LinuxGuiFac.class
│ │ │ │ └── LinuxTextArea.class
│ │ ├── AdapterPattern
│ │ │ ├── Adapter.class
│ │ │ ├── AdapterImpl.class
│ │ │ ├── Application.class
│ │ │ └── Math.class
│ │ ├── AggredationRelation
│ │ │ ├── CPU.class
│ │ │ ├── Computer.class
│ │ │ ├── MainBoard.class
│ │ │ ├── Memory.class
│ │ │ └── PowerSupply.class
│ │ ├── BridgePattern
│ │ │ ├── DefaultMorseCodeFunction.class
│ │ │ ├── Main.class
│ │ │ ├── MorseCode.class
│ │ │ ├── MorseCodeFunction.class
│ │ │ ├── PrintMorseCode.class
│ │ │ └── SoundMorseCodeFunction.class
│ │ ├── BuilderPattern
│ │ │ ├── BluePrint.class
│ │ │ ├── Computer.class
│ │ │ ├── ComputerFactory.class
│ │ │ ├── LgGramBlueprint.class
│ │ │ └── Main.class
│ │ ├── BuilderPattern02
│ │ │ ├── Computer.class
│ │ │ ├── ComputerBuilder.class
│ │ │ └── Main.class
│ │ ├── ChainofResponsibility
│ │ │ ├── Application.class
│ │ │ ├── Calculator.class
│ │ │ ├── PlusCalculator.class
│ │ │ ├── Request.class
│ │ │ └── SubCalculator.class
│ │ ├── CompositePattern
│ │ │ ├── Component.class
│ │ │ ├── File.class
│ │ │ ├── Folder.class
│ │ │ └── Main.class
│ │ ├── CompositionRelation
│ │ │ ├── CPU.class
│ │ │ ├── Club.class
│ │ │ ├── Computer.class
│ │ │ ├── Main.class
│ │ │ ├── MainBoard.class
│ │ │ ├── Memory.class
│ │ │ ├── PowerSupply.class
│ │ │ └── Student.class
│ │ ├── DecoratorPattern
│ │ │ ├── Display.class
│ │ │ ├── DisplayDecorator.class
│ │ │ ├── LaneDecorator.class
│ │ │ ├── RoadDisplay.class
│ │ │ ├── RoadMain.class
│ │ │ └── TrafficDecorator.class
│ │ ├── DeepShallow
│ │ │ ├── Age.class
│ │ │ ├── Cat.class
│ │ │ └── Main.class
│ │ ├── FacadePattern
│ │ │ ├── Application.class
│ │ │ ├── Facade.class
│ │ │ ├── HelpSystem01.class
│ │ │ └── HelpSystem02.class
│ │ ├── FactoryMethodPattern
│ │ │ ├── Application.class
│ │ │ ├── DefaultItem.class
│ │ │ ├── DefaultItemCreator.class
│ │ │ └── jw
│ │ │ │ ├── Creator.class
│ │ │ │ └── Item.class
│ │ ├── ObserverPattern
│ │ │ ├── Button$OnClickListener.class
│ │ │ ├── Button.class
│ │ │ ├── Main$1.class
│ │ │ └── Main.class
│ │ ├── PrototypePattern
│ │ │ ├── Circle.class
│ │ │ ├── Main.class
│ │ │ └── Shape.class
│ │ ├── SingletonPattern
│ │ │ ├── Main.class
│ │ │ └── SystemSpeak.class
│ │ ├── StatePattern
│ │ │ ├── Light.class
│ │ │ ├── LightMain.class
│ │ │ ├── OFF.class
│ │ │ ├── ON.class
│ │ │ └── State.class
│ │ ├── StrategyPattern
│ │ │ ├── AObj.class
│ │ │ ├── Ainterface.class
│ │ │ ├── GameCharacter.class
│ │ │ ├── Knife.class
│ │ │ ├── Main.class
│ │ │ ├── StrategyPatternCode.class
│ │ │ ├── Sword.class
│ │ │ └── Weapon.class
│ │ └── TemplateMethodPattern
│ │ │ ├── AbstConnectHelper.class
│ │ │ ├── Application.class
│ │ │ └── ConcreteConnectHelper.class
│ │ └── out
│ │ └── production
│ │ └── DesignPattern
│ │ ├── .idea
│ │ ├── .gitignore
│ │ ├── misc.xml
│ │ ├── modules.xml
│ │ ├── src.iml
│ │ └── vcs.xml
│ │ └── DesignPattern.iml
└── src
│ ├── .idea
│ ├── .gitignore
│ ├── misc.xml
│ ├── modules.xml
│ ├── src.iml
│ └── vcs.xml
│ ├── DesignPattern.iml
│ ├── com
│ ├── AbstractFactoryPattern
│ │ ├── Main.java
│ │ ├── Sam
│ │ │ ├── SamBody.java
│ │ │ ├── SamFactory.java
│ │ │ └── SamWheel.java
│ │ ├── abst
│ │ │ ├── BikeFactory.java
│ │ │ ├── Body.java
│ │ │ └── Wheel.java
│ │ └── gt
│ │ │ ├── GtBikeFactory.java
│ │ │ ├── GtBody.java
│ │ │ └── GtWheel.java
│ ├── AbstractFactoryPattern02
│ │ ├── Main.java
│ │ ├── abst
│ │ │ ├── Button.java
│ │ │ ├── GuiFac.java
│ │ │ └── TextArea.java
│ │ └── concrete
│ │ │ └── FactoryInstance.java
│ ├── AdapterPattern
│ │ ├── Adapter.java
│ │ ├── AdapterImpl.java
│ │ ├── Application.java
│ │ └── Math.java
│ ├── AggredationRelation
│ │ ├── CPU.java
│ │ ├── Computer.java
│ │ ├── MainBoard.java
│ │ ├── Memory.java
│ │ └── PowerSupply.java
│ ├── BridgePattern
│ │ ├── DefaultMorseCodeFunction.java
│ │ ├── Main.java
│ │ ├── MorseCode.java
│ │ ├── MorseCodeFunction.java
│ │ ├── PrintMorseCode.java
│ │ └── SoundMorseCodeFunction.java
│ ├── BuilderPattern
│ │ ├── BluePrint.java
│ │ ├── Computer.java
│ │ ├── ComputerFactory.java
│ │ ├── LgGramBlueprint.java
│ │ └── Main.java
│ ├── BuilderPattern02
│ │ ├── Computer.java
│ │ ├── ComputerBuilder.java
│ │ └── Main.java
│ ├── ChainofResponsibility
│ │ ├── Application.java
│ │ ├── Calculator.java
│ │ ├── PlusCalculator.java
│ │ ├── Request.java
│ │ └── SubCalculator.java
│ ├── CommandPattern
│ │ ├── Command.java
│ │ └── Main.java
│ ├── CompositePattern
│ │ ├── Component.java
│ │ ├── File.java
│ │ ├── Folder.java
│ │ └── Main.java
│ ├── CompositionRelation
│ │ ├── CPU.java
│ │ ├── Club.java
│ │ ├── Computer.java
│ │ ├── Main.java
│ │ ├── MainBoard.java
│ │ ├── Memory.java
│ │ ├── PowerSupply.java
│ │ └── Student.java
│ ├── DecoratorPattern
│ │ ├── Display.java
│ │ ├── DisplayDecorator.java
│ │ ├── LaneDecorator.java
│ │ ├── RoadDisplay.java
│ │ ├── RoadMain.java
│ │ └── TrafficDecorator.java
│ ├── DeepShallow
│ │ ├── Age.java
│ │ ├── Cat.java
│ │ └── Main.java
│ ├── FacadePattern
│ │ ├── Application.java
│ │ ├── Facade.java
│ │ ├── HelpSystem01.java
│ │ └── HelpSystem02.java
│ ├── FactoryMethodPattern
│ │ ├── Application.java
│ │ ├── DefaultItem.java
│ │ ├── DefaultItemCreator.java
│ │ └── jw
│ │ │ ├── Creator.java
│ │ │ └── Item.java
│ ├── FlyweightPattern
│ │ ├── FlyWeight.java
│ │ ├── FlyWeightFactory.java
│ │ └── Main.java
│ ├── MediatorPattern
│ │ ├── Application.java
│ │ ├── ChatColleague.java
│ │ ├── ChatMediator.java
│ │ ├── Colleague.java
│ │ ├── Mediator.java
│ │ └── newfile.cld
│ ├── MementoPattern
│ │ ├── Application.java
│ │ ├── Memento.java
│ │ └── Originator.java
│ ├── ObserverPattern
│ │ ├── Button.java
│ │ └── Main.java
│ ├── PrototypePattern
│ │ ├── Circle.java
│ │ ├── Main.java
│ │ └── Shape.java
│ ├── ProxyPattern
│ │ ├── Main.java
│ │ ├── Proxy.java
│ │ ├── RealSubject.java
│ │ ├── Subject.java
│ │ └── newfile.cld
│ ├── SingletonPattern
│ │ ├── Main.java
│ │ └── SystemSpeak.java
│ ├── StatePattern
│ │ ├── Light.java
│ │ ├── LightMain.java
│ │ ├── OFF.java
│ │ ├── ON.java
│ │ └── State.java
│ ├── StrategyPattern
│ │ ├── AObj.java
│ │ ├── Ainterface.java
│ │ ├── GameCharacter.java
│ │ ├── Knife.java
│ │ ├── Main.java
│ │ ├── StrategyPatternCode.java
│ │ ├── Sword.java
│ │ └── Weapon.java
│ └── TemplateMethodPattern
│ │ ├── AbstConnectHelper.java
│ │ ├── Application.java
│ │ └── ConcreteConnectHelper.java
│ └── out
│ └── production
│ └── DesignPattern
│ ├── .idea
│ ├── .gitignore
│ ├── misc.xml
│ ├── modules.xml
│ ├── src.iml
│ └── vcs.xml
│ ├── DesignPattern.iml
│ └── com
│ ├── AbstractFactoryPattern
│ ├── Main.class
│ ├── Sam
│ │ ├── SamBody.class
│ │ ├── SamFactory.class
│ │ └── SamWheel.class
│ ├── abst
│ │ ├── BikeFactory.class
│ │ ├── Body.class
│ │ └── Wheel.class
│ └── gt
│ │ ├── GtBikeFactory.class
│ │ ├── GtBody.class
│ │ └── GtWheel.class
│ ├── AbstractFactoryPattern02
│ ├── Main.class
│ ├── abst
│ │ ├── Button.class
│ │ ├── GuiFac.class
│ │ └── TextArea.class
│ └── concrete
│ │ ├── FactoryInstance.class
│ │ ├── LinuxButton.class
│ │ ├── LinuxGuiFac.class
│ │ └── LinuxTextArea.class
│ ├── AdapterPattern
│ ├── Adapter.class
│ ├── AdapterImpl.class
│ ├── Application.class
│ └── Math.class
│ ├── AggredationRelation
│ ├── CPU.class
│ ├── Computer.class
│ ├── MainBoard.class
│ ├── Memory.class
│ └── PowerSupply.class
│ ├── BridgePattern
│ ├── DefaultMorseCodeFunction.class
│ ├── Main.class
│ ├── MorseCode.class
│ ├── MorseCodeFunction.class
│ ├── PrintMorseCode.class
│ └── SoundMorseCodeFunction.class
│ ├── BuilderPattern
│ ├── BluePrint.class
│ ├── Computer.class
│ ├── ComputerFactory.class
│ ├── LgGramBlueprint.class
│ └── Main.class
│ ├── BuilderPattern02
│ ├── Computer.class
│ ├── ComputerBuilder.class
│ └── Main.class
│ ├── ChainofResponsibility
│ ├── Application.class
│ ├── Calculator.class
│ ├── PlusCalculator.class
│ ├── Request.class
│ └── SubCalculator.class
│ ├── CompositePattern
│ ├── Component.class
│ ├── File.class
│ ├── Folder.class
│ └── Main.class
│ ├── CompositionRelation
│ ├── CPU.class
│ ├── Club.class
│ ├── Computer.class
│ ├── Main.class
│ ├── MainBoard.class
│ ├── Memory.class
│ ├── PowerSupply.class
│ └── Student.class
│ ├── DecoratorPattern
│ ├── Display.class
│ ├── DisplayDecorator.class
│ ├── LaneDecorator.class
│ ├── RoadDisplay.class
│ ├── RoadMain.class
│ └── TrafficDecorator.class
│ ├── DeepShallow
│ ├── Age.class
│ ├── Cat.class
│ └── Main.class
│ ├── FacadePattern
│ ├── Application.class
│ ├── Facade.class
│ ├── HelpSystem01.class
│ └── HelpSystem02.class
│ ├── FactoryMethodPattern
│ ├── Application.class
│ ├── DefaultItem.class
│ ├── DefaultItemCreator.class
│ └── jw
│ │ ├── Creator.class
│ │ └── Item.class
│ ├── ObserverPattern
│ ├── Button$OnClickListener.class
│ ├── Button.class
│ ├── Main$1.class
│ └── Main.class
│ ├── PrototypePattern
│ ├── Circle.class
│ ├── Main.class
│ └── Shape.class
│ ├── SingletonPattern
│ ├── Main.class
│ └── SystemSpeak.class
│ ├── StatePattern
│ ├── Light.class
│ ├── LightMain.class
│ ├── OFF.class
│ ├── ON.class
│ └── State.class
│ ├── StrategyPattern
│ ├── AObj.class
│ ├── Ainterface.class
│ ├── GameCharacter.class
│ ├── Knife.class
│ ├── Main.class
│ ├── StrategyPatternCode.class
│ ├── Sword.class
│ └── Weapon.class
│ └── TemplateMethodPattern
│ ├── AbstConnectHelper.class
│ ├── Application.class
│ └── ConcreteConnectHelper.class
├── README.md
└── images
├── image-20200606094534489.png
├── image-20200619211247976.png
├── image-20200619224840069.png
└── image-20200621204841037.png
/$images/image-20200424003341569.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/$images/image-20200424003341569.png
--------------------------------------------------------------------------------
/$images/image-20200424224740588.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/$images/image-20200424224740588.png
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /workspace.xml
3 |
--------------------------------------------------------------------------------
/.idea/DesignPattern.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/09_Strategy_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | # 스트래티지 패턴 (Strategy Pattern)
6 |
7 | 여러 알고리즘을 하나의 *추상적인 접근점*을 만들어 접근점에서 서로 *교환 가능*하도록 하는 패턴
8 |
9 | 매개변수랑 관련된 것 -> 이 매개변수는 그 최상위 인터페이스를 상속한 클래스 일 것
10 |
11 | 즉, `interface`를 만들고 교환 가능하도록 하는 패턴
12 |
13 |
14 |
15 | > 인터페이스
16 |
17 | 두 객체간을 연결해주는 접점
18 |
19 | **기능에 대한 *선언과 구현 분리***
20 |
21 | **기능의*사용 통로***
22 |
23 |
24 |
25 | *Ainterface.java*
26 |
27 | ```java
28 | package com.StrategyPattern;
29 |
30 | public interface Ainterface {
31 | // 1) 기능에 대한 선언
32 | public void funcA();
33 |
34 | }
35 | ```
36 |
37 | *AinterfaceImp.java*
38 |
39 | ```java
40 | package com.StrategyPattern;
41 |
42 | // 2) 기능을 구현하는 클래스를 만들어서 구현(implements)
43 | public class AinterfaceImp implements Ainterface{
44 | @Override
45 | public void funcA() {
46 | System.out.println("AAA");
47 | }
48 | }
49 | ```
50 |
51 | *Main.java*
52 |
53 | ```java
54 | package com.StrategyPattern;
55 | public class Main {
56 | public static void main(String[] args) {
57 | Ainterface ainterface = new AinterfaceImp();
58 | // 3) ainterface는 기능 사용할 수 있는 통로가 된다.
59 | ainterface.funcA();
60 |
61 | }
62 | }
63 | ```
64 |
65 |
66 |
67 |
68 | > 델리게이트
69 |
70 | *위임*하다
71 |
72 | **특정 객체의 기능을 수행하기 위해 다른 객체의 기능을 호출하는 것**
73 |
74 |
75 |
76 | *AObj.java*
77 |
78 | ```java
79 | package com.StrategyPattern;
80 |
81 | public class AObj {
82 |
83 | // 어떤 기능을 구현할때 그 책임을 다른 객체에 떠넘기는 것, 델리게이
84 | Ainterface ainterface;
85 |
86 | public AObj() {
87 | ainterface = new StrategyPatternCode();
88 | }
89 | public void funcAA() {
90 |
91 | ainterface.funcA();
92 | ainterface.funcA();
93 | // System.out.println("AAA");
94 | // System.out.println("AAA");
95 |
96 | // ~ 기능이 필요합니다. 개발해주세요.
97 |
98 | }
99 | }
100 | ```
101 |
102 |
103 |
104 | *Main.java*
105 |
106 | ```java
107 | package com.StrategyPattern;
108 |
109 | public class Main {
110 | public static void main(String[] args) {
111 |
112 | Ainterface ainterface = new StrategyPatternCode();
113 |
114 | ainterface.funcA();
115 |
116 | // 델리게이트한 기능 사용
117 | AObj aObj = new AObj();
118 | aObj.funcAA();
119 |
120 | }
121 | }
122 | ```
123 |
124 |
125 |
126 | > 스트레티지 패턴 예제
127 |
128 | 신작 게임에서 캐릭터와 무기를 구현해보자. 무기는 칼과 검이 있다. 칼과 검이 가지는 공통 interface에 추상메소드를 작성한다.
129 |
130 | *Weapon.java*
131 |
132 | ```java
133 | package com.StrategyPattern;
134 |
135 | public interface Weapon {
136 | // 무기의 접점
137 | public void attack();
138 | }
139 | ```
140 |
141 | 그리고 Weapon interface를 implements하는 칼과 검을 작성한다. 이때 각 클래스에 맞게 추상메소드를 Override한다.
142 |
143 | *Knife.java*
144 |
145 | ```java
146 | package com.StrategyPattern;
147 |
148 | public class Knife implements Weapon{ // 이런식으로 weapon이라는 인터페이스를 상속받는 Knife 클래스 생성
149 | @Override
150 | public void attack() {
151 | System.out.println("knife attack");
152 | }
153 | }
154 | ```
155 |
156 | *Sword.java*
157 |
158 | ```java
159 | package com.StrategyPattern;
160 |
161 | public class Sword implements Weapon { // 이런식으로 weapon이라는 인터페이스를 상속받는 Sword 클래스 생성
162 | @Override
163 | public void attack() {
164 | System.out.println("Sword attack");
165 | }
166 | }
167 | ```
168 |
169 | Weapon 객체를 받는 캐릭터를 작성한다.
170 |
171 | *GameCharacter.java*
172 |
173 | ```java
174 | package com.StrategyPattern;
175 |
176 | public class GameCharacter {
177 |
178 | // 접근점
179 | private Weapon weapon;
180 |
181 | // 교환가능
182 | public void setWeapon(Weapon weapon) {
183 | this.weapon = weapon;
184 | }
185 |
186 | public void attack() {
187 | if (weapon == null) {
188 | System.out.println("맨손 공격");
189 | } else {
190 | // 델리게이트
191 | weapon.attack();
192 | }
193 | }
194 | }
195 | ```
196 |
197 | *Main.java*
198 |
199 | ```java
200 | package com.StrategyPattern;
201 |
202 | public class Main {
203 | public static void main(String[] args) {
204 |
205 | GameCharacter character = new GameCharacter();
206 | character.attack();
207 |
208 | character.setWeapon(new Knife());
209 | character.attack();
210 |
211 | character.setWeapon(new Sword());
212 | character.attack();
213 | }
214 | }
215 | ```
216 |
217 |
--------------------------------------------------------------------------------
/10_Adapter_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 |
6 | ## 어댑터 패턴 (Adapter Pattern)
7 | > 연관성 없는 두 객체 묶어 사용하기
8 |
9 | 한 클래스의 인터페이스를 사용하고자 하는 *다른 인터페이스로 변환할 때* 주로 사용하며, 이를 이용하면 인터페이스 호환성이 맞지 않아 같이 쓸 수 없는 클래스를 연관 관계로 연결해서 사용할 수 있게하는 패턴
10 |
11 |
12 |
13 | *어댑터 패턴의 장점*
14 |
15 | 관계가 없는 인터페이스 간 같이 사용 가능
16 |
17 | 프로그램 검사 용이
18 |
19 | 클래스 재활용성 증가
20 |
21 |
22 |
23 | 수의 두 배의 수를 반환: twiceOf(Float):Float
24 |
25 | 수의 반(1/2)의 수를 반환: halfOf(Float):Float
26 |
27 | 구현객체명 'Adapter'
28 |
29 | *Math.java* 두 배와 절반을 구하는 함수는 이미 구현되어있는 상태
30 |
31 | ```java
32 | public class Math {
33 | //두배
34 | public static double twoTime(double num){return num*2;}
35 | //절반
36 | public static double half(double num){
37 | return num/2;
38 | }
39 | //강화된 알고리즘
40 | public static Double doubled(Double d){return d*2;}
41 | }
42 | ```
43 |
44 |
45 |
46 | *Adapter.java*
47 |
48 | ```java
49 | public interface Adapter {
50 | // 원하는 기능
51 | public Double twiceOf(Float num);
52 | public Double halfOf(Float num);
53 | }
54 | ```
55 |
56 |
57 |
58 | *AdapterImpl.java*
59 |
60 | ```java
61 | public class AdapterImpl implements Adapter {
62 | // Adapter interface의 추상 메서드를 Override
63 | @Override
64 | public Double twiceOf(Float num) {
65 | // Math클래스의 doubled메소드에 Float num을 .doubleValue()을 사용,
66 | // Double 타입으로 바꿔 파라미터로 넘겨준다.
67 | // 그리고 Double바뀌어 *2로 반환된 값을 Application(호출한 클래스)에
68 | // 반환한다.
69 | return Math.doubled(num.doubleValue());
70 | }
71 |
72 | @Override
73 | public Double halfOf(Float num) {
74 | System.out.println("절반 함수 호출");
75 | return Math.half(num);
76 | }
77 | }
78 | ```
79 |
80 |
81 |
82 | *Application.java*
83 |
84 | ```java
85 | public class Application {
86 | public static void main(String[] args) {
87 | //요구사항을 수행하는 인스턴스
88 | Adapter adapter = new AdapterImpl();
89 | System.out.println(adapter.twiceOf(100.0f));
90 | System.out.println(adapter.halfOf(100.3f));
91 | }
92 | }
93 | ```
94 |
95 |
96 |
97 | > number.xxxValue()
98 |
99 | byte byteValue()
100 |
101 | Short shortValue()
102 |
103 | int intValue()
104 |
105 | long longValue()
106 |
107 | float floatValue()
108 |
109 | double doubleValue()
110 |
111 |
112 |
113 | ---
114 |
115 | > 다른 예제
116 |
117 | ***FormatAdapter.java***
118 |
119 | ```java
120 | package adapter;
121 |
122 | // MediaPlayer 인터페이스를 implements하는 FormatAdapter
123 | public class FormatAdapter implements MediaPlayer {
124 |
125 | private MediaPackage media;
126 |
127 | public FormatAdapter(MediaPackage m) {
128 | media = m;
129 | }
130 |
131 | @Override
132 | public void play(String filename) {
133 | System.out.print("Using Adapter --> ");
134 | media.playFile(filename);
135 | }
136 |
137 | }
138 | ```
139 |
140 | ```
141 | package adapter;
142 |
143 | public class Main {
144 | public static void main(String[] args) {
145 |
146 | MediaPlayer player = new MP3();
147 | player.play("file.mp3");
148 |
149 | player = new FormatAdapter(new MP4());
150 | player.play("file.mp4");
151 |
152 | player = new FormatAdapter(new MKV());
153 | player.play("file.mkv");
154 |
155 | }
156 | }
157 | ```
158 |
159 | ```java
160 | package adapter;
161 |
162 | public interface MediaPackage {
163 |
164 | void playFile(String filename);
165 |
166 | }
167 | ```
168 |
169 | ```java
170 | package adapter;
171 |
172 | public interface MediaPlayer {
173 |
174 | void play(String filename);
175 |
176 | }
177 | ```
178 |
179 | ```java
180 | package adapter;
181 |
182 | public class MKV implements MediaPackage{
183 |
184 | @Override
185 | public void playFile(String filename) {
186 | System.out.println("Playing MKV File " + filename);
187 | }
188 | }
189 | ```
190 |
191 | ```java
192 | package adapter;
193 |
194 | public class MP3 implements MediaPlayer{
195 |
196 | @Override
197 | public void play(String filename) {
198 | System.out.println("Playing MP3 File " + filename);
199 | }
200 | }
201 | ```
202 |
203 | ```java
204 | package adapter;
205 |
206 | public class MP4 implements MediaPackage{
207 |
208 | @Override
209 | public void playFile(String filename) {
210 | System.out.println("Playing MP4 File " + filename);
211 | }
212 | }
213 | ```
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
--------------------------------------------------------------------------------
/11_Template_Method_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | ## 템플릿 메소드 패턴 (Template Method Pattern)
6 |
7 | 알고리즘의 **구조를 메소드에** **정의**하고, 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 **재정의** 하는 패턴
8 |
9 |
10 |
11 | > 어떨때 적용할까?
12 | >
13 | > 구현하려는 알고리즘이 ***일정한 프로세스***가 있다. (여러 단계로 나눌 수 있다.)
14 | >
15 | > 구현하려는 알고리즘이 ***변경 가능성***이 있다. (변경 가능성이 크다.)
16 |
17 |
18 |
19 | > 구현 방법
20 |
21 | (1) 알고리즘을 여러 단계로 나눈다.
22 |
23 | (2) 나눠진 알고리즘의 단계를 메소드로 선언한다.
24 |
25 | (3) 알고리즘을 수행할 템플릿 메소드를 만든다.
26 |
27 | (4) 하위 클래스에서 나눠진 메소드들을 구현한다.
28 |
29 |
30 |
31 |
32 |
33 | 신작 게임의 접속을 구현한다.
34 |
35 | 접속이라는 알고리즘은 아래와 같이 단계적으로 나눠진다.
36 |
37 | - 보안과정
38 | - 인증과정
39 | - 권한과정
40 | - 접속과정
41 |
42 |
43 |
44 | *AbstConnectHelper.java*
45 |
46 | ```java
47 |
48 | package com.TemplateMethodPattern;
49 |
50 | // 추상 클래스
51 |
52 | public abstract class AbstConnectHelper {
53 |
54 | // 알고리즘의 단계인 경우 외부에 노출이 되면 안된다. 때문에 protected로 선언
55 | // 외부에서는 호출하면 안되는데, 하위 클래스에서는 사용해야하는 경우
56 | abstract protected String doSecurity(String info);
57 |
58 | abstract protected String authentication(String id, String password);
59 |
60 | abstract protected int authorization(String userName);
61 |
62 | abstract protected String connection(String info);
63 |
64 | public String requestConnection(String info) {
65 |
66 | String id, password, userName, decodedInfo, userInfo;
67 |
68 | // 암호화된 정보를 복호화 합니다.
69 | // 암호화된 문자열을 디코드한다.
70 | decodedInfo = doSecurity(info);
71 |
72 | // 반환된 것을 가지고 아이디, 암호를 할당한다.
73 | // decodedInfo에서 id 와 password를 추출
74 | id = "abc";
75 | password = "abc";
76 |
77 | userInfo = authentication(id, password);
78 |
79 | // userInfo에서 userName을 찾아 냅니다.
80 | userName = "abc";
81 |
82 | int result = authorization(userName);
83 |
84 | switch (result) {
85 |
86 | case 0:// 무료회원
87 | break;
88 | case 1:// 유료회원
89 | break;
90 | case 2:// 게임 마스터
91 | break;
92 | case 3:// 접속 권한 없음
93 | break;
94 | default:
95 | break;
96 | }
97 |
98 | return connection(userInfo);
99 | }
100 | }
101 | ```
102 |
103 | *ConcreteConnectHelper.java*
104 |
105 |
106 | ```java
107 | package com.TemplateMethodPattern;
108 |
109 | public class ConcreteConnectHelper extends AbstConnectHelper {
110 |
111 | @Override
112 | protected String doSecurity(String info) {
113 | System.out.println("디코드");
114 | return info;
115 | }
116 |
117 | @Override
118 | protected String authentication(String id, String password) {
119 | System.out.println("인증확인");
120 | if(id.equals("abc")|password.equals("abc"))
121 | return "true info";
122 | else
123 | return "false info";
124 | }
125 |
126 | @Override
127 | protected int authorization(String userName) {
128 | System.out.println("권한 확인");
129 | // 만약 10시 이후로 특정 연령대가 접속 불가한 제한이 있다면,
130 | // 여기에서 유저의 나이와 같은 정보를 판단해서
131 | // 권한 없음이라고 정의한 3을 리턴하면 된다.
132 | // 현재는 무조건 0을 리턴하는 코드다.
133 | return 0;
134 | }
135 |
136 | @Override
137 | protected String connection(String info) {
138 | System.out.println("마지막 접속 단계");
139 | return info;
140 | }
141 |
142 | }
143 |
144 | ```
145 |
146 | *Application.java*
147 |
148 | ```java
149 | package com.TemplateMethodPattern;
150 |
151 | public class Application {
152 |
153 | public static void main(String[] args) {
154 | AbstConnectHelper abstConnectHelper = new ConcreteConnectHelper();
155 |
156 | abstConnectHelper.requestConnection("아이디 암호 등 접속 정보");
157 |
158 | }
159 |
160 | }
161 |
162 |
163 | /* 출력
164 | 디코드
165 | 인증확인
166 | 권한 확인
167 | 마지막 접속 단계
168 | */
169 | ```
170 |
171 |
172 |
173 |
--------------------------------------------------------------------------------
/12_Factory_Method_Pattern.assets/image-20200402143300826.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/12_Factory_Method_Pattern.assets/image-20200402143300826.png
--------------------------------------------------------------------------------
/12_Factory_Method_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 |
6 |
7 | ## 팩토리 메소드 패턴 (Factory Method Pattern)
8 |
9 | > 팩토리 메소드 패턴에서 ***템플릿 메소드 패턴***이 사용된다.
10 | >
11 | > 객체를 만들어내는 부분을 서브 클래스Sub-Class에 위임하는 패턴.
12 |
13 |
14 |
15 | *기본설계*
16 |
17 | '`create()`라는 함수가 여러개로 나뉘어 질 수 있다.'는 점이 템플릿 메소드와 같은 방식, 그래서 `create()`가 팩토리 메소드라고 볼 수 있다.
18 |
19 |
20 |
21 | 
22 |
23 |
24 |
25 |
26 |
27 | *Creator.java*
28 |
29 | ```java
30 | public abstract class Creator {
31 |
32 | // Application.java에서 itemName을 파라미터로 받아 팩토리 메서드에서 객체를 생성하고 반환.
33 | public Item create(String itemName){
34 |
35 | // step1: 데이터 베이스에서 아이템을 호출
36 | init(itemName);
37 | // step2: 바탕으로 아이템을 생성
38 | Item item = createItem(itemName);
39 | // step3: 생성 로그를 찍는 함수
40 | end(itemName);
41 |
42 | return item;
43 |
44 | }
45 |
46 | abstract protected String end(String itemName);
47 | abstract protected String init(String itemName);
48 | // 아이템을 생성하는 알고리즘
49 | abstract protected Item createItem(String itemName);
50 |
51 | }
52 | ```
--------------------------------------------------------------------------------
/13_Singleton_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 |
6 |
7 | ## 싱글톤 패턴 (Singleton Pattern)
8 |
9 | > ***하나의 인스턴스만 있도록 하기***
10 |
11 |
12 |
13 | 객체란?
14 |
15 | 객체: 속성과 기능을 갖춘 것
16 |
17 | 클래스: 속성과 기능을 정의한 것,
18 |
19 | 인스턴스: 속성과 기능을 가진 것중 실제한 것
20 |
21 |
22 |
23 | 개발중인 시스템에서 **스피커에 접근할 수 있는 클래스**를 만들어보자.
24 |
25 | 스피커에 접근할 수 있는 클래스가 하나 이상이면, 소리를 올릴때 모든 클래스를 찾아가서 올려야 하므로 비용이 발생한다. 이런 경우에서는 싱글톤 패턴으로 개발해야 한다.
26 |
27 |
28 |
29 | *SystemSpeaker.java*
30 |
31 | ```java
32 | package com.SingletonPattern;
33 |
34 | public class SystemSpeaker {
35 |
36 | // 하나만 하기 위해서 static
37 | static private SystemSpeaker instance;
38 | private int volume;
39 |
40 | // 외부에서 생성 함수를 사용하지 못하도록 private
41 | private SystemSpeaker() {
42 | volume = 5;
43 | }
44 |
45 | public static SystemSpeaker getInstance() {
46 | // null 인지 아닌지 체크
47 | if (instance == null) {
48 | // 시스템 스피커
49 | instance = new SystemSpeaker();
50 | }
51 | return instance;
52 | }
53 |
54 | public int getVolume() {
55 | return volume;
56 | }
57 |
58 | public void setVolume(int volume) {
59 | this.volume = volume;
60 | }
61 | }
62 | ```
63 |
64 | *Main.java*
65 |
66 | ```java
67 | package com.SingletonPattern;
68 |
69 | public class Main {
70 |
71 | public static void main(String[] args) {
72 | SystemSpeaker speaker1 = SystemSpeaker.getInstance();
73 | SystemSpeaker speaker2 = SystemSpeaker.getInstance();
74 | System.out.println(speaker1.getVolume()); // 5
75 | System.out.println(speaker2.getVolume()); // 5
76 |
77 | speaker1.setVolume(11);
78 | System.out.println(speaker1.getVolume()); // 11
79 | System.out.println(speaker2.getVolume()); // 11
80 | // 같은 결과가 출력되어 동일한 인스턴스임을 확인할 수 있다.
81 | }
82 | }
83 | ```
--------------------------------------------------------------------------------
/15_Builder_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 | *빌더 패턴은 책에서 설명된 패턴과 실무에서 쓰이는 패턴이 차이가 있다고 한다.
4 |
5 |
6 |
7 | ## 빌더 패턴(Builder Pattern)
8 |
9 | > **복잡한 단계**가 있는 인스턴스 생성과정 **단순화**
10 |
11 |
12 |
13 | 빌더란? 우리가 어떤 객체를 원할때, 빌더한테 넘겨서 구현한다. 즉, ***복잡한 단계***를 거쳐야 생성되는 객체의 구현을 ***서브클래스***에게 넘겨주는 패턴
14 |
15 |
16 |
17 | *책에서 나오는 빌더패턴*
18 |
19 | ---
20 |
21 |
22 |
23 | *BluePrint.java*
24 |
25 | ```java
26 | package com.BuilderPattern;
27 |
28 | public abstract class BluePrint {
29 |
30 | abstract public void setCpu();
31 | abstract public void setRam();
32 | abstract public void setStorage();
33 |
34 | public abstract Computer getComputer();
35 | }
36 | ```
37 |
38 |
39 |
40 | *Computer.java*
41 |
42 | ```java
43 | package com.BuilderPattern;
44 |
45 | public class Computer {
46 |
47 | private String cpu;
48 | private String ram;
49 | private String storage;
50 |
51 |
52 | public Computer(String cpu, String ram, String storage) {
53 | super();
54 | this.cpu = cpu;
55 | this.ram = ram;
56 | this.storage = storage;
57 | }
58 |
59 | public void setStorage(String storage) {
60 | this.storage = storage;
61 | }
62 |
63 | public String getStorage() {
64 | return storage;
65 | }
66 |
67 | public void setCpu(String cpu) {
68 | this.cpu = cpu;
69 | }
70 |
71 | public String getCpu() {
72 | return cpu;
73 | }
74 |
75 | public void setRam(String ram) {
76 | this.ram = ram;
77 | }
78 |
79 | public String getRam() {
80 | return ram;
81 | }
82 |
83 | @Override
84 | public String toString(){
85 | return cpu+" "+ram+" "+storage;
86 | }
87 | }
88 | ```
89 |
90 |
91 |
92 | *ComputerFactory.java*
93 |
94 | ```java
95 | package com.BuilderPattern;
96 |
97 | public class ComputerFactory {
98 |
99 | private BluePrint print;
100 |
101 | public void setBlueprint(BluePrint print) {
102 | // 설계도를 가진다.
103 | this.print = print;
104 | }
105 |
106 | public void make() {
107 | // 설계도를 바탕으로 만든다.
108 | print.setRam();
109 | print.setCpu();
110 | print.setStorage();
111 | }
112 |
113 |
114 | public Computer getComputer() {
115 | return print.getComputer();
116 | }
117 | }
118 | ```
119 |
120 |
121 |
122 | *LgGramBlueprint.java*
123 |
124 | *개별 모델이 맞는 클래스를 선언을 위해, Blueprint 추상클래스를 상속받는다.
125 |
126 | ```java
127 | package com.BuilderPattern;
128 |
129 | // BluePrint를 상속 받는다.
130 | public class LgGramBlueprint extends BluePrint{
131 |
132 | private Computer computer;
133 |
134 | public LgGramBlueprint() {
135 | this.computer = new Computer("default","default","default");
136 | }
137 |
138 | @Override
139 | public void setCpu() {
140 | computer.setCpu("i7");
141 | }
142 |
143 | @Override
144 | public void setRam() {
145 | computer.setRam("8g");
146 | }
147 |
148 | @Override
149 | public void setStorage() {
150 | computer.setStorage("256g ssd");
151 | }
152 |
153 | @Override
154 | public Computer getComputer() {
155 | return computer;
156 | }
157 | }
158 | ```
159 |
160 |
161 |
162 | *Main.java*
163 |
164 | ```java
165 | package com.BuilderPattern;
166 |
167 | public class Main {
168 | public static void main(String[] args) {
169 |
170 | ComputerFactory factory = new ComputerFactory();
171 |
172 | factory.setBlueprint(new LgGramBlueprint());
173 |
174 | factory.make();
175 |
176 | Computer computer = factory.getComputer();
177 |
178 | System.out.println(computer.toString());
179 | }
180 | }
181 | ```
182 |
183 |
184 |
185 |
186 |
187 | *실무에서 쓰는 빌더패턴*
188 |
189 | ---
190 |
191 | > 체이닝 방식으로 객체의 필드 값을 변경해준다.
192 |
193 |
194 |
195 | ```java
196 | package com.BuilderPattern02;
197 |
198 | public class Computer {
199 |
200 | private String cpu;
201 | private String ram;
202 | private String storage;
203 |
204 | public Computer(String cpu, String ram, String storage) {
205 | super();
206 | this.cpu = cpu;
207 | this.ram = ram;
208 | this.storage = storage;
209 | }
210 |
211 | public void setStorage(String storage) {
212 | this.storage = storage;
213 | }
214 |
215 | public String getStorage() {
216 | return storage;
217 | }
218 |
219 | public void setCpu(String cpu) {
220 | this.cpu = cpu;
221 | }
222 |
223 | public String getCpu() {
224 | return cpu;
225 | }
226 |
227 | public void setRam(String ram) {
228 | this.ram = ram;
229 | }
230 |
231 | public String getRam() {
232 | return ram;
233 | }
234 |
235 | @Override
236 | public String toString(){
237 | return cpu+" "+ram+" "+storage;
238 | }
239 |
240 | }
241 | ```
242 |
243 |
244 |
245 | ```java
246 | package com.BuilderPattern02;
247 |
248 | public class ComputerBuilder {
249 |
250 | private Computer computer;
251 |
252 | private ComputerBuilder() {
253 | computer = new Computer("Default", "Default","Default");
254 | }
255 |
256 | public static ComputerBuilder start() {
257 | return new ComputerBuilder();
258 | }
259 |
260 | public ComputerBuilder setCpu(String string) {
261 | computer.setCpu(string);
262 | return this;
263 | }
264 |
265 | public ComputerBuilder setRam(String string) {
266 | computer.setRam(string);
267 | return this;
268 | }
269 |
270 | public ComputerBuilder setStorage(String string) {
271 | computer.setStorage(string);
272 | return this;
273 | }
274 |
275 | public Computer build() {
276 | return this.computer;
277 | }
278 |
279 | }
280 | ```
281 |
282 |
283 |
284 | ```java
285 | package com.BuilderPattern02;
286 |
287 | public class Main {
288 |
289 | public static void main(String[] args) {
290 | System.out.println();
291 |
292 | // 아래처럼 했을때 변수 순서를 이상하게 넣으면 큰 오류가 나는걸 방지하기 위해서
293 | // 체이닝 방식으로 생성
294 | // Computer computer = new Computer("", "", "");
295 |
296 | Computer computer = ComputerBuilder
297 | .start()
298 | .setCpu("i7")
299 | .setRam("8g")
300 | .build();
301 |
302 | System.out.println(computer.toString()); // i7 8g Default
303 | }
304 | }
305 | ```
306 |
307 |
--------------------------------------------------------------------------------
/16_Abstract_Factory_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 | > [참고사이트](https://gmlwjd9405.github.io/2018/08/08/abstract-factory-pattern.html)
4 |
5 | ## 추상 팩토리 패턴(Abstract Factory Pattern)
6 |
7 | 관련있는 객체의 생성을 가상화한다.
8 |
9 | 생성 부분의 가상화/ 관련있는 객체
10 |
11 |
12 |
13 | 가상화된 프로덕트를 가지고 활용한다고 생각하면 된다.
14 |
15 |
16 |
17 | > 흐름
18 |
19 | :one: 추상팩토리는 추상제품들을 만드는 메소드를 가지고 있다.
20 |
21 | :two: 추상팩토리는 실제팩토리에 상속되어 `추상제품들을 만드는 메소드`가 실제팩토리에 오버라이드 된다.
22 |
23 | :three: *오버라이드*된 실제팩토리의 `추상제품들을 만드는 메소드`에서는 return 값으로 실제제품을 반환한다.
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/17_Bridge_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | ## 브릿지 패턴 (Bridge Pattern)
6 |
7 | 기능 계층과 구현 계층의 분리
8 |
9 | 어댑터패턴과 흡사하다
10 |
11 |
12 |
13 | 모스부호를 구현하면서 알아보자.
14 |
15 | *MorseCode.java*
16 |
17 | ```java
18 | package com.BridgePattern;
19 |
20 | public class MorseCode {
21 |
22 | private MorseCodeFunction function;
23 |
24 | public MorseCode(MorseCodeFunction function) {
25 | this.function = function;
26 | }
27 |
28 | public void setFunction(MorseCodeFunction function) {
29 | this.function = function;
30 | }
31 |
32 | public void dot() {
33 | function.dot(); // 위임한다.
34 | }
35 |
36 | public void dash() {
37 | function.dash();
38 | }
39 |
40 | public void space() {
41 | function.space();
42 | }
43 | }
44 | ```
45 |
46 |
47 |
48 | *MorseCodeFunction.java*
49 |
50 | > 기능 부분
51 |
52 | ```java
53 | package com.BridgePattern;
54 |
55 | public interface MorseCodeFunction {
56 | public void dot();
57 | public void dash();
58 | public void space();
59 | }
60 | ```
61 |
62 |
63 |
64 | *PrintMorseCode.java*
65 |
66 | ```java
67 | package com.BridgePattern;
68 |
69 | public class PrintMorseCode extends MorseCode{
70 |
71 | public PrintMorseCode(MorseCodeFunction function) {
72 | super(function);
73 | }
74 |
75 | // garam
76 | public void g(){
77 | dash();dash();dot();space();
78 | }
79 | public void a(){
80 | dot();dash();space();
81 | }
82 | public void r(){
83 | dot();dash();dot();space();
84 | }
85 | public void m(){
86 | dash();dash();space();
87 | }
88 | }
89 | ```
90 |
91 |
92 |
93 | *SoundMorseCodeFunction.java*
94 |
95 | ```java
96 | package com.BridgePattern;
97 |
98 | public class SoundMorseCodeFunction implements MorseCodeFunction{
99 | @Override
100 | public void dot() {
101 | System.out.print("Dot");
102 | }
103 |
104 | @Override
105 | public void dash() {
106 | System.out.print("Dash");
107 | }
108 |
109 | @Override
110 | public void space() {
111 | System.out.print("~");
112 | }
113 | }
114 | ```
115 |
116 |
117 |
118 | *DefaultMorseCodeFunction.java*
119 |
120 | ```java
121 | package com.BridgePattern;
122 |
123 | public class DefaultMorseCodeFunction implements MorseCodeFunction{
124 | @Override
125 | public void dot() {
126 | System.out.print("●");
127 | }
128 |
129 | @Override
130 | public void dash() {
131 | System.out.print("-");
132 | }
133 |
134 | @Override
135 | public void space() {
136 | System.out.print(" ");
137 | }
138 | }
139 | ```
140 |
141 |
142 |
143 | *Main.java*
144 |
145 | ```java
146 | package com.BridgePattern;
147 |
148 | public class Main {
149 | public static void main(String[] args) {
150 | PrintMorseCode code = new PrintMorseCode(new SoundMorseCodeFunction());
151 | PrintMorseCode code = new PrintMorseCode(new DefaultMorseCodeFunction());
152 | code.a();code.g();code.r();code.m();
153 | }
154 | }
155 | ```
--------------------------------------------------------------------------------
/18_Composite_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | ## 컴포짓 패턴 (Composite Pattern)
6 |
7 | 여러 개의 객체들로 구성된 `복합 객체`와 `단일 객체`를 클라이언트에서 구별 없이 다루게 해주는 패턴
8 |
9 | 컨테이너/내용물/동일시
10 |
11 | 전체-부분의 관계(Ex. Directory-File)를 갖는 객체들 사이의 관계를 정의할 때 유용
12 |
13 |
14 |
15 |
16 |
17 | ***File System 구현***
18 |
19 | *Component.java*
20 |
21 | ```java
22 | package com.CompositePattern;
23 |
24 | // 추상메소드
25 | abstract public class Component {
26 |
27 | public Component(String name) { // 생성부
28 | this.name = name;
29 | }
30 | private String name; // 이름필드
31 |
32 | public String getName() {
33 | return name;
34 | }
35 |
36 | public void setName(String name) {
37 | this.name = name;
38 | }
39 | }
40 | ```
41 |
42 |
43 |
44 | *File.java*
45 |
46 | ```java
47 | package com.CompositePattern;
48 |
49 | // Component를 상속
50 | public class File extends Component{
51 | public File(String name) { // 파일생성부
52 | super(name);
53 | }
54 |
55 | private Object data;
56 |
57 | public Object getData() {
58 | return data;
59 | }
60 |
61 | public void setData(Object data) {
62 | this.data = data;
63 | }
64 | }
65 | ```
66 |
67 |
68 |
69 | *Folder.java*
70 |
71 | ```java
72 | package com.CompositePattern;
73 |
74 | import java.util.ArrayList;
75 | import java.util.List;
76 |
77 | // Component를 상속
78 | public class Folder extends Component{
79 | public Folder(String name) { // 폴더생성부
80 | super(name);
81 | }
82 |
83 | List children = new ArrayList(); // 폴더는 여러 하위 폴더/파일을 가질 수 있다.
84 |
85 | public boolean addComponent(Component component) {
86 | return children.add(component); // 리스트에 저장
87 | }
88 |
89 | public boolean removeComponent(Component component) {
90 | return children.remove(component); // 리스트에서 삭제
91 | }
92 |
93 | public List getChildren() {
94 | return children;
95 | }
96 |
97 | }
98 | ```
99 |
100 |
101 |
102 | *Main.java*
103 |
104 | ```java
105 | package com.CompositePattern;
106 |
107 | public class Main {
108 |
109 | public static void main(String[] args) {
110 |
111 | Folder // Folder 생성
112 | root = new Folder("root"),
113 | home = new Folder("home"),
114 | garam = new Folder("garam"),
115 | music = new Folder("music"),
116 | picture = new Folder("picture"),
117 | doc = new Folder("doc"),
118 | usr = new Folder("usr");
119 | File // File 생성
120 | track1 = new File("track1"),
121 | track2 = new File("track2"),
122 | pic1 = new File("pic1"),
123 | doc1 = new File("doc1"),
124 | java = new File("java");
125 |
126 | // 상위 폴더에서 하위 폴더/파일을 addComponent 메소드를 사용해서 추가한다.
127 | root.addComponent(home); // root 폴더에 hoom 폴더 추가
128 | home.addComponent(garam); // home 폴더에 garam 폴더 추가
129 | garam.addComponent(music); // garam 폴더에 music 폴더 추가
130 | music.addComponent(track1); // music 폴더에 track1, track2 파일 추가
131 | music.addComponent(track2);
132 | garam.addComponent(picture); // garam 폴더에 picture 폴더 추가
133 | picture.addComponent(pic1); // picture 폴더에 pic1 파일 추가
134 | garam.addComponent(doc); // garam 폴더에 doc 폴더 추가
135 | doc.addComponent(doc1); // doc 폴더에 doc1 파일 추가
136 |
137 | root.addComponent(usr);
138 | usr.addComponent(java);
139 |
140 | showFolders(root);
141 |
142 | }
143 |
144 | private static void showFolders(Component component) {
145 | System.out.println(component.getClass().getName()+"|"+component.getName());
146 | if (component instanceof Folder) {
147 | for (Component c : ((Folder)component).getChildren()) {
148 | showFolders(c);
149 | }
150 | }
151 | }
152 | }
153 | ```
--------------------------------------------------------------------------------
/19_Decorator_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | ## 데코레이터 패턴 (Decorator Pattern)
6 |
7 | > 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에
8 | >
9 | > 각 추가 기능을 Decorator 클래스로 정의한 후
10 | >
11 | > 필요한 Decorator 객체를 조합함으로써 추가 기능을 설계하는 방식이다.
12 |
13 |
14 |
15 | 실시간으로 기능을 추가할 수 있는 패턴이다.
16 |
17 |
18 |
19 | Display.java
20 |
21 | ```java
22 | package com.DecoratorPattern;
23 |
24 | public abstract class Display {
25 | public void draw() {}
26 | }
27 | ```
28 |
29 |
30 |
31 | RoadDisplay.java
32 |
33 | ```java
34 | package com.DecoratorPattern;
35 |
36 | public class RoadDisplay extends Display{
37 |
38 | public void draw() {
39 | System.out.println("기본 도로");
40 | }
41 | }
42 | ```
43 |
44 |
45 |
46 | DisplayDecorator.java
47 |
48 | ```java
49 | package com.DecoratorPattern;
50 |
51 | public class DisplayDecorator extends Display {
52 |
53 | private Display decoratedDisplay;
54 |
55 | public DisplayDecorator(Display decoratedDisplay) {
56 | this.decoratedDisplay = decoratedDisplay;
57 | }
58 |
59 | public void draw() {
60 | decoratedDisplay.draw();
61 | }
62 | }
63 | ```
64 |
65 |
66 |
67 | LaneDecorator.java
68 |
69 | ```java
70 | package com.DecoratorPattern;
71 |
72 | public class LaneDecorator extends DisplayDecorator{
73 |
74 | public LaneDecorator(Display decoratedDisplay) {
75 | super(decoratedDisplay);
76 | }
77 |
78 | public void draw() {
79 | super.draw();
80 | drawLane();
81 | }
82 |
83 | public void drawLane() {
84 | System.out.println("차선 그리기");
85 | }
86 | }
87 | ```
88 |
89 |
90 |
91 | TrafficDecorator.java
92 |
93 | ```java
94 | package com.DecoratorPattern;
95 |
96 | public class TrafficDecorator extends DisplayDecorator {
97 |
98 |
99 | public TrafficDecorator(Display decoratedDisplay) {
100 | super(decoratedDisplay);
101 | }
102 |
103 | public void draw() {
104 | super.draw();
105 | drawTraffic();
106 | }
107 |
108 | public void drawTraffic() {
109 | System.out.println("교통량 그리기");
110 | }
111 | }
112 | ```
113 |
114 |
115 |
116 | RoadMain.java
117 |
118 | ```java
119 | package com.DecoratorPattern;
120 |
121 | public class RoadMain {
122 |
123 | public static void main(String[] args) {
124 | Display roadWithLaneAndTraffic = new LaneDecorator(new TrafficDecorator(new RoadDisplay()));
125 | System.out.println(roadWithLaneAndTraffic);
126 | roadWithLaneAndTraffic.draw();
127 | }
128 | }
129 |
130 | /*
131 | 기본 도로
132 | 교통량 그리기
133 | 차선 그리기
134 | */
135 | ```
136 |
137 |
--------------------------------------------------------------------------------
/20_Visitor_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | ## 비지터 패턴 (Visitor Pattern)
6 |
7 | > **객체**의 구조와 **기능(처리, method)**을 **분리**시키는 패턴
8 | >
9 | > 구조는 변하지 않으며 기능만을 따로 추가되거나 확장되어야 할 경우에 사용하는 패턴
10 | >
11 | > 컴포지트 패턴과 연동되어 사용되는 경우가 많다.
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/21_Chain_of_Responsibility.assets/image-20200420191016043.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/21_Chain_of_Responsibility.assets/image-20200420191016043.png
--------------------------------------------------------------------------------
/21_Chain_of_Responsibility.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | ## 책임사슬 패턴 (Chain of Responsibility Pattern)
6 |
7 | > 다양한 처리방식을 유연하게 처리할 수 있다.
8 |
9 |
10 |
11 | 
12 |
13 |
14 |
15 | `Handler`는 추상클래스, 다음번에 처리할 객체들을 가지고 있다.
16 |
17 | process가 실패할 경우 다음번 객체로 넘겨준다.
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/22_Facade.assets/image-20200421144251830.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/22_Facade.assets/image-20200421144251830.png
--------------------------------------------------------------------------------
/22_Facade_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | ## 퍼사드 패턴 (Facade Pattern)
6 |
7 | 복잡한 과정을 **간단하게** 표현하는 퍼사드 패턴을 이해한다.
8 |
9 |
10 |
11 | 
12 |
13 | 다양한 패키지에서 여러가지 클래스를 제공받는다.
14 |
15 | 클라이언트들이 어떠한 프로세스를 진행할 수 있도록 제공해주는 패턴이다.
16 |
17 |
18 |
19 | 위 그림에서 package1과 package2에 해당하는
20 |
21 | HelpSystem01, HelpSystem02
22 |
23 | ```java
24 | package com.FacadePattern;
25 |
26 | // defualt 접근제한자
27 | class HelpSystem01 {
28 | public HelpSystem01() {
29 | System.out.println(getClass().getName());
30 | }
31 |
32 | public void process() {
33 | System.out.println(getClass().getSimpleName());
34 | }
35 | }
36 | ```
37 |
38 | ```java
39 | package com.FacadePattern;
40 |
41 | class HelpSystem02 {
42 | public HelpSystem02() {
43 | System.out.println(getClass().getName());
44 | }
45 |
46 | public void process() {
47 | System.out.println(getClass().getSimpleName());
48 | }
49 | }
50 | ```
51 |
52 | Facade.java
53 |
54 | Facade 클래스를 통해 HelpSystem01, HelpSystem02를 실행한다.
55 |
56 |
57 | ```java
58 | package com.FacadePattern;
59 |
60 | public class Facade { // Facade
61 |
62 | private HelpSystem01 helpSystem01;
63 | private HelpSystem02 helpSystem02;
64 |
65 | public Facade() {
66 | helpSystem01 = new HelpSystem01();
67 | helpSystem02 = new HelpSystem02();
68 | }
69 |
70 | public void process() {
71 | helpSystem01.process();
72 | helpSystem02.process();
73 | }
74 |
75 | }
76 | ```
77 |
78 | Application.java
79 |
80 | Client에 해당한다.
81 |
82 | 바로 시스템들을 사용할 수 있게 하는 패턴이 된다.
83 |
84 | ```java
85 | package com.FacadePattern;
86 |
87 | public class Application { // Client
88 | public static void main(String[] args) {
89 | Facade facade = new Facade();
90 | facade.process();
91 | }
92 | }
93 | ```
--------------------------------------------------------------------------------
/23_Observer_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | ## 옵저버 패턴 (Observer Pattern)
6 |
7 | > 데이터의 변경이 발생했을 경우, 상대 클래스나 객체에 **의존하지 않으면서** 데이터 변경을 통보하고자 할 때 유용하다.
8 | >
9 | > 즉, 이벤트 발생 후 객체 외부에서 처리한다.
10 |
11 | 
12 |
13 | `Target` 객체가 `Observer` 인터페이스를 가지고 있어서 `notify`에서 `update`를 호출해서 `Target` 객체에서 `이벤트가 처리되는 것을 확인`한다.
14 |
15 | ```java
16 | public class Button {
17 |
18 | // notify
19 | public void onClick(){
20 | // 이벤트 처리를 해줘야 한다.
21 | // onClickListener 왔을때 호출
22 | if (onClickListener != null) {
23 | onClickListener.onClick(this);
24 | // 클릭이벤트가 발생하면 자기자신을 업데이트 한다.
25 | }
26 | }
27 |
28 | // Observer Interface
29 | public interface OnClickListener{
30 | public void onClick(Button button);
31 | }
32 |
33 | private OnClickListener onClickListener;
34 |
35 | // setObserver
36 | public void setOnClickListener(OnClickListener onClickListener) {
37 | this.onClickListener = onClickListener; // 객체를 넣어준다.
38 | }
39 | }
40 | ```
41 |
42 | ```java
43 | public class Main {
44 | public static void main(String[] args) {
45 | System.out.println();
46 |
47 | Button button = new Button(); // 버튼 객체를 만든다.
48 |
49 | button.setOnClickListener(new Button.OnClickListener() {
50 | @Override
51 | public void onClick(Button button) {
52 | System.out.println(button+"is Clicked"); // 버튼객체가 클릭된다.
53 | }
54 | });
55 | button.onClick();
56 | }
57 | }
58 | ```
59 |
60 |
61 |
62 |
63 |
64 | 자바 제공
65 |
66 | `Observer` 인터페이스
67 |
68 | `Observable` 클래스
--------------------------------------------------------------------------------
/24_Mediator_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | ## 중재자패턴 (Mediator Pattern)
6 |
7 | **M:N 관계**를 **1:1**로 변경하기
8 |
9 | 미디에이터 패턴을 통해 **복잡한** 관계를 **간단한** 관계로 구현한다.
10 |
11 | 
12 |
13 | abstract Mediator - 객체를 담는 그릇(list, map ...)
14 |
15 | abstract Colleague(객체) - 어떤 Mediator인지 필드로 가지고 있음
16 |
17 |
18 |
19 | 
20 |
21 | ```java
22 | package com.MediatorPattern;
23 |
24 | public class Application {
25 | public static void main(String[] args) {
26 | Mediator mediator = new ChatMediator();
27 |
28 | Colleague colleague1 = new ChatColleague();
29 | Colleague colleague2 = new ChatColleague();
30 | Colleague colleague3 = new ChatColleague();
31 |
32 | colleague1.join(mediator);
33 | colleague2.join(mediator);
34 | colleague3.join(mediator);
35 |
36 | colleague1.sendData("AAA");
37 | colleague2.sendData("BBB");
38 | colleague3.sendData("CCC");
39 | }
40 |
41 | }
42 | ```
43 |
44 |
45 |
46 | ```java
47 | package com.MediatorPattern;
48 |
49 | import java.util.ArrayList;
50 | import java.util.List;
51 |
52 | public abstract class Mediator {
53 |
54 | protected List colleagues; // colleague의 리스트를 가지고 있어야 중재할 대상을 얻는다.
55 |
56 | public Mediator() {
57 | colleagues = new ArrayList();
58 | }
59 |
60 | public boolean addColleague(Colleague colleague) {
61 |
62 | if (colleagues != null) {
63 | return colleagues.add(colleague); // return true
64 | } else {
65 | return false;
66 | }
67 | }
68 |
69 | public abstract void mediate(String data);
70 |
71 | }
72 |
73 | ```
74 |
75 |
76 |
77 | ```java
78 | package com.MediatorPattern;
79 |
80 | public class ChatMediator extends Mediator{
81 |
82 | @Override
83 | public void mediate(String data) {
84 | System.out.println(data);
85 | for (Colleague colleague : colleagues) {
86 | // 중재 가능성이 있는 정보가 존재
87 | colleague.handle(data);
88 | }
89 | }
90 | }
91 | ```
92 |
93 |
94 |
95 | ```java
96 | package com.MediatorPattern;
97 |
98 | public abstract class Colleague {
99 |
100 | private Mediator mediator; // 어떤 mediator에 속했는가
101 |
102 | public boolean join(Mediator mediator) {
103 |
104 | if (mediator == null) { // null 이라면 false return
105 | return false;
106 | }
107 | else {
108 | this.mediator = mediator;
109 | return mediator.addColleague(this);
110 | }
111 | }
112 |
113 | public void sendData(String data) {
114 | if(mediator != null) {
115 | mediator.mediate(data);
116 | }
117 | }
118 |
119 | abstract public void handle(String data);
120 |
121 | }
122 |
123 | ```
124 |
125 |
126 |
127 | ```java
128 | package com.MediatorPattern;
129 |
130 | public class ChatColleague extends Colleague{
131 |
132 | @Override
133 | public void handle(String data) {
134 | System.out.println(this);
135 | }
136 | }
137 | ```
138 |
139 |
140 |
141 | > 전체 colleague에게 데이터가 전송되는 방식
142 |
143 | `sendData()` -> `mediate()` -> `handle()`
--------------------------------------------------------------------------------
/25_State_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 |
4 |
5 | ## 스테이트 패턴 (State Pattern)
6 |
7 | > 상태란?
8 | >
9 | > 객체가 시스템에 존재하는 동안, 즉 객체의 라이프 타임 동안 객체가 가질 수 있는 어떤 조건이나 상황
10 | >
11 | > 즉, 객체가 어떤 상황에 있는 동안 어떤 액티비티등을 수행하거나 특정 이벤트가 발생하기를 기다리는 것
12 |
13 |
14 |
15 | **어떤 행위를 수행할 때 상태에 행위를 수행하도록 위임한다.**
16 |
17 | 그래서 스테이트 패턴에서는 시스템의 각 상태를 클래스로 분리해 표현하고,
18 |
19 | 각 클래스에서 수행하는 행위들을 메서드로 구현한다.
20 |
21 | 그리고 이러한 상태들을 외부로부터 캡슐화 하기 위해 **인터페이스**를 만들어 시스템의 각 상태를 나타내는 클래스로하여금 실체화하게한다.
22 |
23 |
24 |
25 | 
26 |
27 |
28 |
29 | ```java
30 | package com.StatePattern;
31 |
32 | interface State {
33 |
34 | public void on_button_pushed(Light light);
35 | public void off_button_pushed(Light light);
36 |
37 | }
38 | ```
39 |
40 | ```java
41 | package com.StatePattern;
42 |
43 | public class OFF implements State{
44 | // 싱글턴 패턴 사용
45 | private static OFF off = new OFF();
46 | OFF(){}
47 |
48 | public static OFF getInstance() {
49 | return off;
50 | }
51 | @Override
52 | public void on_button_pushed(Light light) {
53 | System.out.println("Light ON");
54 | light.setState(ON.getInstance()); // 싱글턴 패턴 사용
55 | }
56 |
57 | @Override
58 | public void off_button_pushed(Light light) {
59 | System.out.println("반응 없음");
60 | }
61 | }
62 | ```
63 |
64 | ```java
65 | package com.StatePattern;
66 |
67 | public class ON implements State{
68 | // 싱글턴 패턴 사용
69 | private static ON on = new ON();
70 | private ON(){}
71 |
72 | public static ON getInstance() {
73 | return on;
74 | }
75 |
76 | @Override
77 | public void on_button_pushed(Light light) {
78 | System.out.println("반응 없음");
79 | }
80 |
81 | @Override
82 | public void off_button_pushed(Light light) {
83 | System.out.println("Light OFF");
84 | light.setState(OFF.getInstance()); // 싱글턴 패턴 사용
85 | }
86 | }
87 | ```
88 |
89 | ```java
90 | package com.StatePattern;
91 |
92 | public class Light {
93 |
94 | private State state; // 인터페이스의 객체를 생성
95 |
96 | public Light() {
97 | state = new OFF(); // 처음에는 off 상태이다.
98 | }
99 |
100 | public void setState(State state) {
101 | this.state = state;
102 | }
103 |
104 | public void on_button_pushed() {
105 | state.on_button_pushed(this); // 자기자신(this)를 넣는다.
106 | }
107 |
108 | public void off_button_pushed() {
109 | state.off_button_pushed(this); // 자기자신(this)를 넣는다.
110 | }
111 |
112 | }
113 | ```
114 |
115 | ```java
116 | package com.StatePattern;
117 |
118 | public class LightMain {
119 |
120 | public static void main(String[] args) {
121 | Light light = new Light();
122 | light.on_button_pushed();
123 | }
124 | }
125 | ```
--------------------------------------------------------------------------------
/26_Memento_Pattern.md:
--------------------------------------------------------------------------------
1 | ## Java Design Pattern
2 |
3 | ## 메멘토 패턴 (Memento Method Pattern)
4 |
5 | > 상태 저장하기
6 |
7 | 즉, 이전 상태를 저장한 **객체**를 이용하여 변경된 상태를 **복구**한다.
8 |
9 | *protected 사용
10 |
11 | 
12 |
13 | `Originator` - 현재 상태를 저장하는 클래스
14 |
15 | `Memento` - Originator의 상태를 저장하는 클래스
16 |
17 | `CareTaker` - Memento를 관리해주는 관리자 역할을 하는 클래스
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/27_Flyweight_Pattern.md:
--------------------------------------------------------------------------------
1 | # Java Design Pattern
2 |
3 |
4 |
5 |
6 |
7 | # 플라이 웨이트 패턴 (Flyweight Pattern)
8 |
9 |
10 |
11 | 메모리 공간을 절약하기 위함
12 |
13 | 메모리를 가볍게 유지 시키기
14 |
15 |
16 |
17 | 자주 사용하는 객체를 매번 생성하지 않고 재사용하기 위해 pool에 저장했다가 꺼내 사용하는 패턴
18 |
19 |
20 |
21 | Flywieght
22 |
23 |
24 |
25 | FlywieghtFactory
26 |
27 |
28 |
29 | Client
30 |
31 |
32 |
33 |
34 |
35 | ```java
36 | package com.FlyweightPattern;
37 |
38 | public class Main {
39 | public static void main(String[] args) {
40 | FlyWeightFactory factory = new FlyWeightFactory();
41 | FlyWeight flyWeight = factory.getFlyWeight("a");
42 | System.out.println(flyWeight);
43 | flyWeight = factory.getFlyWeight("a");
44 | System.out.println(flyWeight);
45 | }
46 | }
47 | ```
48 |
49 |
50 |
51 | ```java
52 | package com.FlyweightPattern;
53 |
54 | import java.util.Map;
55 | import java.util.TreeMap;
56 |
57 | public class FlyWeightFactory {
58 |
59 | Map pool;
60 |
61 | public FlyWeightFactory() {
62 | pool = new TreeMap<>();
63 | }
64 |
65 | public FlyWeight getFlyWeight(String key) {
66 | FlyWeight flyWeight = pool.get(key);
67 |
68 | if (flyWeight == null) {
69 | flyWeight = new FlyWeight(key);
70 |
71 | pool.put(key, flyWeight);
72 | // pool에 없었다면 계속해서 새로 생성 했을 것
73 | System.out.println("새로생성 " + key);
74 | } else {
75 | System.out.println("재사용 " + key);
76 | }
77 |
78 | return flyWeight;
79 | }
80 | }
81 |
82 | ```
83 |
84 |
85 |
86 | ```java
87 | package com.FlyweightPattern;
88 |
89 | public class FlyWeight {
90 |
91 | public FlyWeight(String data) {
92 | this.data = data;
93 | }
94 |
95 | private String data;
96 |
97 | public String getData() {
98 | return data;
99 | }
100 |
101 | }
102 | ```
103 |
104 |
--------------------------------------------------------------------------------
/28_Proxy_Pattern.md:
--------------------------------------------------------------------------------
1 | # Java Design Pattern
2 |
3 |
4 |
5 | # 프록시 패턴 (Proxy Pattern)
6 |
7 | 대리인 내세우기
8 |
9 | 프록시 - 대리인
10 |
11 | 프록시 패턴을 통해 `작업을 나눠서` 구현
12 |
13 |
14 |
15 | 
16 |
17 | ```java
18 | package com.ProxyPattern;
19 |
20 | public class Main {
21 |
22 | public static void main(String[] args) {
23 |
24 | Subject real = new RealSubject();
25 |
26 | Subject proxy1 = new Proxy(real);
27 | Subject proxy2 = new Proxy(real);
28 |
29 | proxy1.action1();
30 | proxy2.action1();
31 |
32 | proxy1.action2();
33 | proxy2.action2();
34 |
35 | }
36 |
37 | }
38 |
39 | ```
40 |
41 |
42 |
43 | ```java
44 | package com.ProxyPattern;
45 |
46 | public interface Subject {
47 |
48 | // more resource
49 | void action1();
50 |
51 | // less #
52 | void action2();
53 |
54 | }
55 |
56 | ```
57 |
58 |
59 |
60 |
61 |
62 | ```java
63 | package com.ProxyPattern;
64 |
65 | public class Proxy implements Subject{
66 |
67 | private Subject real;
68 |
69 | public Proxy(Subject real) {
70 | this.real = real;
71 | }
72 |
73 | @Override
74 | public void action1() {
75 | // 간단한 업무는 proxy가 한다.
76 | System.out.println("간단한 업무 by proxy");
77 | }
78 |
79 | @Override
80 | public void action2() {
81 | this.real.action2();
82 | }
83 |
84 |
85 | }
86 |
87 | ```
88 |
89 |
90 |
91 | ```java
92 | package com.ProxyPattern;
93 |
94 | public class RealSubject implements Subject {
95 |
96 | @Override
97 | public void action1() {
98 | System.out.println("간단한 업무 by realSubject");
99 | }
100 |
101 | @Override
102 | public void action2() {
103 | System.out.println("복잡한 업무 by realSubject");
104 | }
105 |
106 | }
107 |
108 | ```
109 |
110 |
--------------------------------------------------------------------------------
/29_Command_Pattern.md:
--------------------------------------------------------------------------------
1 | # Java Design Pattern
2 |
3 |
4 |
5 | # 커맨드 패턴 (Command Pattern)
6 |
7 |
8 |
9 | 명령의 객체화
10 |
11 | 커맨드 패턴을 통해 명령을 객체화한다.
12 |
13 | 실행될 기능을 **캡슐화**함으로써 주어진 여러 기능을 실행할 수 있는 **재사용성이 높은 클래스를 설계**하는 패턴
14 |
15 | ```
16 | 일련의 행동을 특정 리시버하고 연결시킴으로써 요구 사항을 캡슐화한 것이라는 점을 이미 배웠습니다. 이렇게 하기 위해서 행동과 리시버를 한 객체에 집어넣고, execute()라는 메소드 하나만 외부에 공개하는 방법을 씁니다. 이 메소드 호출에 의해서 리시버에서 일련의 작업이 처리됩니다. 외부에서 볼 때는 어떤 객체가 리시버 역할을 하는지, 그 리시버에서 실제로 어떤 일을 하는지 알 수 없습니다. 그냥 execute() 메소드를 호출하면 요구 사항이 처리된다는 것만 알 수 있을 뿐이죠.
17 | ```
18 |
19 |
20 |
21 | :star: command `interface` 구현
22 |
23 | ```java
24 | package com.CommandPattern;
25 |
26 | public interface Command {
27 |
28 | void execute();
29 | }
30 |
31 | ```
32 |
33 |
34 |
35 | ```java
36 | package com.CommandPattern;
37 |
38 | import java.util.LinkedList;
39 | import java.util.List;
40 |
41 | public class Main {
42 | public static void main(String[] args) {
43 | System.out.println("hi");
44 |
45 | List list = new LinkedList();
46 | list.add(new Command() {
47 |
48 | @Override
49 | public void execute() {
50 | System.out.println("작업1");
51 |
52 | }
53 | });
54 |
55 | list.add(new Command() {
56 |
57 | @Override
58 | public void execute() {
59 | System.out.println("작업2");
60 |
61 | }
62 | });
63 |
64 | list.add(new Command() {
65 |
66 | @Override
67 | public void execute() {
68 | System.out.println("작업3");
69 |
70 | }
71 | });
72 |
73 | for (Command command : list) {
74 | command.execute();
75 | }
76 |
77 | }
78 | }
79 |
80 | ```
81 |
82 |
--------------------------------------------------------------------------------
/DesignPattern/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/DesignPattern/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /workspace.xml
--------------------------------------------------------------------------------
/DesignPattern/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DesignPattern/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/DesignPattern/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DesignPattern/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | DesignPattern
4 |
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.jdt.core.javanature
16 |
17 |
18 |
--------------------------------------------------------------------------------
/DesignPattern/DesignPattern.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/.gitignore:
--------------------------------------------------------------------------------
1 | /.idea/
2 | /DesignPattern.iml
3 | /com/
4 | /out/
5 |
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamBody.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamBody.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamFactory.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamWheel.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamWheel.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/abst/BikeFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/abst/BikeFactory.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/abst/Body.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/abst/Body.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/abst/Wheel.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/abst/Wheel.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtBikeFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtBikeFactory.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtBody.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtBody.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtWheel.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtWheel.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/Button.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/Button.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/GuiFac.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/GuiFac.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/TextArea.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/TextArea.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/FactoryInstance.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/FactoryInstance.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxButton.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxButton.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxGuiFac.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxGuiFac.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxTextArea.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxTextArea.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AdapterPattern/Adapter.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AdapterPattern/Adapter.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AdapterPattern/AdapterImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AdapterPattern/AdapterImpl.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AdapterPattern/Application.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AdapterPattern/Application.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AdapterPattern/Math.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AdapterPattern/Math.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AggredationRelation/CPU.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AggredationRelation/CPU.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AggredationRelation/Computer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AggredationRelation/Computer.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AggredationRelation/MainBoard.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AggredationRelation/MainBoard.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AggredationRelation/Memory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AggredationRelation/Memory.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/AggredationRelation/PowerSupply.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/AggredationRelation/PowerSupply.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BridgePattern/DefaultMorseCodeFunction.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BridgePattern/DefaultMorseCodeFunction.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BridgePattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BridgePattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BridgePattern/MorseCode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BridgePattern/MorseCode.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BridgePattern/MorseCodeFunction.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BridgePattern/MorseCodeFunction.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BridgePattern/PrintMorseCode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BridgePattern/PrintMorseCode.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BridgePattern/SoundMorseCodeFunction.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BridgePattern/SoundMorseCodeFunction.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BuilderPattern/BluePrint.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BuilderPattern/BluePrint.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BuilderPattern/Computer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BuilderPattern/Computer.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BuilderPattern/ComputerFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BuilderPattern/ComputerFactory.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BuilderPattern/LgGramBlueprint.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BuilderPattern/LgGramBlueprint.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BuilderPattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BuilderPattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BuilderPattern02/Computer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BuilderPattern02/Computer.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BuilderPattern02/ComputerBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BuilderPattern02/ComputerBuilder.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/BuilderPattern02/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/BuilderPattern02/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/ChainofResponsibility/Application.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/ChainofResponsibility/Application.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/ChainofResponsibility/Calculator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/ChainofResponsibility/Calculator.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/ChainofResponsibility/PlusCalculator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/ChainofResponsibility/PlusCalculator.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/ChainofResponsibility/Request.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/ChainofResponsibility/Request.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/ChainofResponsibility/SubCalculator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/ChainofResponsibility/SubCalculator.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositePattern/Component.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositePattern/Component.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositePattern/File.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositePattern/File.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositePattern/Folder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositePattern/Folder.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositePattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositePattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositionRelation/CPU.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositionRelation/CPU.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositionRelation/Club.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositionRelation/Club.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositionRelation/Computer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositionRelation/Computer.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositionRelation/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositionRelation/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositionRelation/MainBoard.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositionRelation/MainBoard.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositionRelation/Memory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositionRelation/Memory.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositionRelation/PowerSupply.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositionRelation/PowerSupply.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/CompositionRelation/Student.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/CompositionRelation/Student.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/Display.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/Display.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/DisplayDecorator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/DisplayDecorator.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/LaneDecorator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/LaneDecorator.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/RoadDisplay.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/RoadDisplay.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/RoadMain.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/RoadMain.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/TrafficDecorator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/DecoratorPattern/TrafficDecorator.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/DeepShallow/Age.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/DeepShallow/Age.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/DeepShallow/Cat.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/DeepShallow/Cat.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/DeepShallow/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/DeepShallow/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/FacadePattern/Application.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/FacadePattern/Application.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/FacadePattern/Facade.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/FacadePattern/Facade.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/FacadePattern/HelpSystem01.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/FacadePattern/HelpSystem01.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/FacadePattern/HelpSystem02.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/FacadePattern/HelpSystem02.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/FactoryMethodPattern/Application.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/FactoryMethodPattern/Application.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/FactoryMethodPattern/DefaultItem.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/FactoryMethodPattern/DefaultItem.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/FactoryMethodPattern/DefaultItemCreator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/FactoryMethodPattern/DefaultItemCreator.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/FactoryMethodPattern/jw/Creator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/FactoryMethodPattern/jw/Creator.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/FactoryMethodPattern/jw/Item.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/FactoryMethodPattern/jw/Item.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/ObserverPattern/Button$OnClickListener.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/ObserverPattern/Button$OnClickListener.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/ObserverPattern/Button.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/ObserverPattern/Button.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/ObserverPattern/Main$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/ObserverPattern/Main$1.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/ObserverPattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/ObserverPattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/PrototypePattern/Circle.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/PrototypePattern/Circle.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/PrototypePattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/PrototypePattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/PrototypePattern/Shape.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/PrototypePattern/Shape.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/SingletonPattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/SingletonPattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/SingletonPattern/SystemSpeak.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/SingletonPattern/SystemSpeak.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StatePattern/Light.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StatePattern/Light.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StatePattern/LightMain.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StatePattern/LightMain.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StatePattern/OFF.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StatePattern/OFF.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StatePattern/ON.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StatePattern/ON.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StatePattern/State.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StatePattern/State.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StrategyPattern/AObj.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StrategyPattern/AObj.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StrategyPattern/Ainterface.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StrategyPattern/Ainterface.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StrategyPattern/GameCharacter.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StrategyPattern/GameCharacter.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StrategyPattern/Knife.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StrategyPattern/Knife.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StrategyPattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StrategyPattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StrategyPattern/StrategyPatternCode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StrategyPattern/StrategyPatternCode.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StrategyPattern/Sword.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StrategyPattern/Sword.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/StrategyPattern/Weapon.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/StrategyPattern/Weapon.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/TemplateMethodPattern/AbstConnectHelper.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/TemplateMethodPattern/AbstConnectHelper.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/TemplateMethodPattern/Application.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/TemplateMethodPattern/Application.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/com/TemplateMethodPattern/ConcreteConnectHelper.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/out/production/DesignPattern/com/TemplateMethodPattern/ConcreteConnectHelper.class
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/out/production/DesignPattern/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Datasource local storage ignored files
5 | /dataSources/
6 | /dataSources.local.xml
7 | # Zeppelin ignored files
8 | /ZeppelinRemoteNotebooks/
9 | # Editor-based HTTP Client requests
10 | /httpRequests/
11 |
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/out/production/DesignPattern/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/out/production/DesignPattern/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/out/production/DesignPattern/.idea/src.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/out/production/DesignPattern/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DesignPattern/out/production/DesignPattern/out/production/DesignPattern/DesignPattern.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/DesignPattern/src/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Datasource local storage ignored files
5 | /dataSources/
6 | /dataSources.local.xml
7 | # Zeppelin ignored files
8 | /ZeppelinRemoteNotebooks/
9 | # Editor-based HTTP Client requests
10 | /httpRequests/
11 |
--------------------------------------------------------------------------------
/DesignPattern/src/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/.idea/src.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DesignPattern/src/DesignPattern.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern;
2 |
3 | import com.AbstractFactoryPattern.Sam.SamFactory;
4 | import com.AbstractFactoryPattern.abst.BikeFactory;
5 | import com.AbstractFactoryPattern.abst.Body;
6 | import com.AbstractFactoryPattern.abst.Wheel;
7 | import com.AbstractFactoryPattern.gt.GtBikeFactory;
8 |
9 | public class Main {
10 |
11 | public static void main(String[] args) {
12 | BikeFactory factory = new SamFactory();
13 | // BikeFactory factory = new GtBikeFactory();
14 |
15 | Body body = factory.createBody();
16 | Wheel wheel = factory.createWheel();
17 |
18 | System.out.println(body.getClass());
19 | System.out.println(wheel.getClass());
20 |
21 |
22 |
23 |
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern/Sam/SamBody.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern.Sam;
2 |
3 | import com.AbstractFactoryPattern.abst.Body;
4 |
5 | public class SamBody implements Body {
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern/Sam/SamFactory.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern.Sam;
2 |
3 | import com.AbstractFactoryPattern.abst.BikeFactory;
4 | import com.AbstractFactoryPattern.abst.Body;
5 | import com.AbstractFactoryPattern.abst.Wheel;
6 |
7 | public class SamFactory implements BikeFactory {
8 |
9 | @Override
10 | public Body createBody() {
11 | return new SamBody();
12 | }
13 |
14 | @Override
15 | public Wheel createWheel() {
16 | return new SamWheel();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern/Sam/SamWheel.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern.Sam;
2 |
3 | import com.AbstractFactoryPattern.abst.Wheel;
4 |
5 | public class SamWheel implements Wheel {
6 | }
7 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern/abst/BikeFactory.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern.abst;
2 |
3 | // 실제 팩토리의 공통 인터페이스
4 | public interface BikeFactory {
5 |
6 | public Body createBody(); // body를 return하는 함수
7 | public Wheel createWheel(); //
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern/abst/Body.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern.abst;
2 |
3 | // 제품의 공통 인터페이스
4 | public interface Body {
5 |
6 | }
7 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern/abst/Wheel.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern.abst;
2 |
3 | // 제품의 공통 인터페이스
4 | public interface Wheel {
5 | }
6 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern/gt/GtBikeFactory.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern.gt;
2 |
3 | import com.AbstractFactoryPattern.abst.BikeFactory;
4 | import com.AbstractFactoryPattern.abst.Body;
5 | import com.AbstractFactoryPattern.abst.Wheel;
6 |
7 | // 실제 팩토리 클래스
8 | public class GtBikeFactory implements BikeFactory {
9 | // Abstract Factory인 BikeFactory의 클래스를 오버라이드하여
10 | // 제품을 생성한다.
11 | @Override
12 | public Body createBody() {
13 | return new GtBody();
14 | }
15 |
16 | @Override
17 | public Wheel createWheel() {
18 | return new GtWheel();
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern/gt/GtBody.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern.gt;
2 |
3 | import com.AbstractFactoryPattern.abst.Body;
4 |
5 | // 실제 제품 클래스
6 | public class GtBody implements Body {
7 | }
8 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern/gt/GtWheel.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern.gt;
2 |
3 | import com.AbstractFactoryPattern.abst.Wheel;
4 |
5 | // 실제 제품 클래스
6 | public class GtWheel implements Wheel {
7 | }
8 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern02/Main.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern02;
2 |
3 | import com.AbstractFactoryPattern02.abst.Button;
4 | import com.AbstractFactoryPattern02.abst.GuiFac;
5 | import com.AbstractFactoryPattern02.abst.TextArea;
6 | import com.AbstractFactoryPattern02.concrete.FactoryInstance;
7 |
8 | public class Main {
9 | public static void main(String[] args) {
10 | GuiFac fac = FactoryInstance.getGuiFac();
11 | Button button = fac.createButton();
12 | TextArea textArea = fac.createTextArea();
13 |
14 | System.out.println(button.click());
15 | System.out.println(textArea.getText());
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern02/abst/Button.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern02.abst;
2 |
3 | public interface Button {
4 | // 추상부분이 가진 추상메소드 정의
5 | public String click();
6 | }
7 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern02/abst/GuiFac.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern02.abst;
2 |
3 | public interface GuiFac {
4 | // 추상팩토리에서는 다른 곳에서도 접근이 가능하도록 public을 해주어야한다.
5 | public Button createButton();
6 | public TextArea createTextArea();
7 | }
8 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern02/abst/TextArea.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern02.abst;
2 |
3 | public interface TextArea {
4 |
5 | public String getText();
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AbstractFactoryPattern02/concrete/FactoryInstance.java:
--------------------------------------------------------------------------------
1 | package com.AbstractFactoryPattern02.concrete;
2 |
3 | import com.AbstractFactoryPattern02.abst.Button;
4 | import com.AbstractFactoryPattern02.abst.GuiFac;
5 | import com.AbstractFactoryPattern02.abst.TextArea;
6 |
7 | public class FactoryInstance {
8 |
9 | public static GuiFac getGuiFac() {
10 |
11 | System.getProperty("os.name");
12 | switch (getOsCode()) {
13 | case 0:
14 | return new LinuxGuiFac();
15 | }
16 | return null;
17 | }
18 |
19 | private static int getOsCode() {
20 | if(System.getProperty("os.name").equals("Mac OS X")) {
21 | return 1;
22 | }
23 | return 0;
24 | }
25 | }
26 |
27 |
28 |
29 | class LinuxButton implements Button {
30 | @Override
31 | public String click() {
32 | return "리눅스버튼";
33 | }
34 | }
35 |
36 |
37 |
38 | class LinuxGuiFac implements GuiFac {
39 | @Override
40 | public Button createButton() {
41 | return new LinuxButton();
42 | }
43 |
44 | @Override
45 | public TextArea createTextArea() {
46 | return new LinuxTextArea();
47 | }
48 | }
49 |
50 |
51 | class LinuxTextArea implements TextArea {
52 | @Override
53 | public String getText() {
54 | return "리눅스텍스트에어리어";
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AdapterPattern/Adapter.java:
--------------------------------------------------------------------------------
1 | package com.AdapterPattern;
2 |
3 | public interface Adapter {
4 | // 원하는 기능
5 | public Double twiceOf(Float num);
6 | public Double halfOf(Float num);
7 | }
8 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AdapterPattern/AdapterImpl.java:
--------------------------------------------------------------------------------
1 | package com.AdapterPattern;
2 |
3 | public class AdapterImpl implements Adapter {
4 | // Adapter interface의 추상 메서드를 Override
5 | @Override
6 | public Double twiceOf(Float num) {
7 | // Math클래스의 doubled메소드에 Float num을 doubleValue()를 사용해서
8 | // Double 타입으로 바꿔 파라미터로 넘겨준다.
9 | // 그리고 Double바뀌어 *2로 반환된 값을 Application(호출한 클래스)에
10 | // 반환한다.
11 | return Math.doubled(num.doubleValue());
12 | }
13 |
14 | @Override
15 | public Double halfOf(Float num) {
16 | System.out.println("절반 함수 호출");
17 | return Math.half(num);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AdapterPattern/Application.java:
--------------------------------------------------------------------------------
1 | package com.AdapterPattern;
2 |
3 | public class Application {
4 | public static void main(String[] args) {
5 | //요구사항을 수행하는 인스턴스
6 | Adapter adapter = new AdapterImpl();
7 | System.out.println(adapter.twiceOf(100.0f));
8 | System.out.println(adapter.halfOf(100.3f));
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AdapterPattern/Math.java:
--------------------------------------------------------------------------------
1 | package com.AdapterPattern;
2 |
3 | public class Math {
4 | //두배
5 | public static double twoTime(double num){return num*2;}
6 | //절반
7 | public static double half(double num){
8 | return num/2;
9 | }
10 | //강화된 알고리즘
11 | public static Double doubled(Double d){return d*2;}
12 | }
13 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AggredationRelation/CPU.java:
--------------------------------------------------------------------------------
1 | package com.AggredationRelation;
2 |
3 | public class CPU {
4 | }
5 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AggredationRelation/Computer.java:
--------------------------------------------------------------------------------
1 | package com.AggredationRelation;
2 |
3 | public class Computer {
4 | private MainBoard mb;
5 | private CPU cpu;
6 | private Memory memory;
7 | private PowerSupply powerSupply;
8 |
9 | public Computer(MainBoard mb, CPU cpu, Memory memory, PowerSupply powerSupply) {
10 | this.mb = mb;
11 | this.cpu = cpu;
12 | this.memory = memory;
13 | this.powerSupply = powerSupply;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AggredationRelation/MainBoard.java:
--------------------------------------------------------------------------------
1 | package com.AggredationRelation;
2 |
3 | public class MainBoard {
4 | }
5 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AggredationRelation/Memory.java:
--------------------------------------------------------------------------------
1 | package com.AggredationRelation;
2 |
3 | public class Memory {
4 | }
5 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/AggredationRelation/PowerSupply.java:
--------------------------------------------------------------------------------
1 | package com.AggredationRelation;
2 |
3 | public class PowerSupply {
4 | }
5 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BridgePattern/DefaultMorseCodeFunction.java:
--------------------------------------------------------------------------------
1 | package com.BridgePattern;
2 |
3 | public class DefaultMorseCodeFunction implements MorseCodeFunction{
4 | @Override
5 | public void dot() {
6 | System.out.print("●");
7 | }
8 |
9 | @Override
10 | public void dash() {
11 | System.out.print("-");
12 | }
13 |
14 | @Override
15 | public void space() {
16 | System.out.print(" ");
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BridgePattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.BridgePattern;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | PrintMorseCode code = new PrintMorseCode(new SoundMorseCodeFunction());
6 | code.a();code.g();code.r();code.m();
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BridgePattern/MorseCode.java:
--------------------------------------------------------------------------------
1 | package com.BridgePattern;
2 |
3 | public class MorseCode {
4 |
5 | private MorseCodeFunction function;
6 |
7 | public MorseCode(MorseCodeFunction function) {
8 | this.function = function;
9 | }
10 |
11 | public void setFunction(MorseCodeFunction function) {
12 | this.function = function;
13 | }
14 |
15 | public void dot() {
16 | function.dot(); // 위임한다.
17 | }
18 |
19 | public void dash() {
20 | function.dash();
21 | }
22 |
23 | public void space() {
24 | function.space();
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BridgePattern/MorseCodeFunction.java:
--------------------------------------------------------------------------------
1 | package com.BridgePattern;
2 |
3 | public interface MorseCodeFunction {
4 | public void dot();
5 | public void dash();
6 | public void space();
7 | }
8 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BridgePattern/PrintMorseCode.java:
--------------------------------------------------------------------------------
1 | package com.BridgePattern;
2 |
3 | public class PrintMorseCode extends MorseCode{
4 |
5 | public PrintMorseCode(MorseCodeFunction function) {
6 | super(function);
7 | }
8 |
9 | // garam
10 | public void g(){
11 | dash();dash();dot();space();
12 | }
13 | public void a(){
14 | dot();dash();space();
15 | }
16 | public void r(){
17 | dot();dash();dot();space();
18 | }
19 | public void m(){
20 | dash();dash();space();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BridgePattern/SoundMorseCodeFunction.java:
--------------------------------------------------------------------------------
1 | package com.BridgePattern;
2 |
3 | public class SoundMorseCodeFunction implements MorseCodeFunction{
4 | @Override
5 | public void dot() {
6 | System.out.print("Dot");
7 | }
8 |
9 | @Override
10 | public void dash() {
11 | System.out.print("Dash");
12 | }
13 |
14 | @Override
15 | public void space() {
16 | System.out.print("~");
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BuilderPattern/BluePrint.java:
--------------------------------------------------------------------------------
1 | package com.BuilderPattern;
2 |
3 | public abstract class BluePrint {
4 |
5 | abstract public void setCpu();
6 | abstract public void setRam();
7 | abstract public void setStorage();
8 |
9 | public abstract Computer getComputer();
10 | }
11 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BuilderPattern/Computer.java:
--------------------------------------------------------------------------------
1 | package com.BuilderPattern;
2 |
3 | public class Computer {
4 |
5 | private String cpu;
6 | private String ram;
7 | private String storage;
8 |
9 |
10 | public Computer(String cpu, String ram, String storage) {
11 | super();
12 | this.cpu = cpu;
13 | this.ram = ram;
14 | this.storage = storage;
15 | }
16 |
17 | public void setStorage(String storage) {
18 | this.storage = storage;
19 | }
20 | public String getStorage() {
21 | return storage;
22 | }
23 |
24 | public void setCpu(String cpu) {
25 | this.cpu = cpu;
26 | }
27 |
28 | public String getCpu() {
29 | return cpu;
30 | }
31 |
32 | public void setRam(String ram) {
33 | this.ram = ram;
34 | }
35 |
36 | public String getRam() {
37 | return ram;
38 | }
39 |
40 | @Override
41 | public String toString(){
42 | return cpu+" "+ram+" "+storage;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BuilderPattern/ComputerFactory.java:
--------------------------------------------------------------------------------
1 | package com.BuilderPattern;
2 |
3 | public class ComputerFactory {
4 |
5 | private BluePrint print;
6 |
7 | public void setBlueprint(BluePrint print) {
8 | // 설계도를 가진다.
9 | this.print = print;
10 | }
11 |
12 | public void make() {
13 | // 설계도를 바탕으로 만든다.
14 | print.setRam();
15 | print.setCpu();
16 | print.setStorage();
17 | }
18 |
19 |
20 | public Computer getComputer() {
21 | return print.getComputer();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BuilderPattern/LgGramBlueprint.java:
--------------------------------------------------------------------------------
1 | package com.BuilderPattern;
2 |
3 | // BluePrint를 상속 받는다.
4 | public class LgGramBlueprint extends BluePrint{
5 |
6 | private Computer computer;
7 |
8 | public LgGramBlueprint() {
9 | this.computer = new Computer("default","default","default");
10 | }
11 |
12 | @Override
13 | public void setCpu() {
14 | computer.setCpu("i7");
15 | }
16 |
17 | @Override
18 | public void setRam() {
19 | computer.setRam("8g");
20 | }
21 |
22 | @Override
23 | public void setStorage() {
24 | computer.setStorage("256g ssd");
25 | }
26 |
27 | @Override
28 | public Computer getComputer() {
29 | return computer;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BuilderPattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.BuilderPattern;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 |
6 | ComputerFactory factory = new ComputerFactory();
7 |
8 | factory.setBlueprint(new LgGramBlueprint());
9 |
10 | factory.make();
11 |
12 | Computer computer = factory.getComputer();
13 |
14 | System.out.println(computer.toString());
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BuilderPattern02/Computer.java:
--------------------------------------------------------------------------------
1 | package com.BuilderPattern02;
2 |
3 | public class Computer {
4 |
5 | private String cpu;
6 | private String ram;
7 | private String storage;
8 |
9 | public Computer(String cpu, String ram, String storage) {
10 | super();
11 | this.cpu = cpu;
12 | this.ram = ram;
13 | this.storage = storage;
14 | }
15 |
16 | public void setStorage(String storage) {
17 | this.storage = storage;
18 | }
19 |
20 | public String getStorage() {
21 | return storage;
22 | }
23 |
24 | public void setCpu(String cpu) {
25 | this.cpu = cpu;
26 | }
27 |
28 | public String getCpu() {
29 | return cpu;
30 | }
31 |
32 | public void setRam(String ram) {
33 | this.ram = ram;
34 | }
35 |
36 | public String getRam() {
37 | return ram;
38 | }
39 |
40 | @Override
41 | public String toString(){
42 | return cpu+" "+ram+" "+storage;
43 | }
44 |
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BuilderPattern02/ComputerBuilder.java:
--------------------------------------------------------------------------------
1 | package com.BuilderPattern02;
2 |
3 | public class ComputerBuilder {
4 |
5 | private Computer computer;
6 |
7 | private ComputerBuilder() {
8 | computer = new Computer("Default", "Default","Default");
9 | }
10 |
11 | public static ComputerBuilder start() {
12 | return new ComputerBuilder();
13 | }
14 |
15 | public ComputerBuilder setCpu(String string) {
16 | computer.setCpu(string);
17 | return this;
18 | }
19 |
20 | public ComputerBuilder setRam(String string) {
21 | computer.setRam(string);
22 | return this;
23 | }
24 |
25 | public Computer build() {
26 | return this.computer;
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/BuilderPattern02/Main.java:
--------------------------------------------------------------------------------
1 | package com.BuilderPattern02;
2 |
3 | public class Main {
4 |
5 | public static void main(String[] args) {
6 | System.out.println();
7 |
8 | // 아래처럼 했을때 변수 순서를 이상하게 넣으면 큰 오류가 나는걸 방지하기 위해서
9 | // 체이닝 형식으로 생성
10 | // Computer computer = new Computer("", "", "");
11 |
12 | Computer computer = ComputerBuilder
13 | .start()
14 | .setCpu("i7")
15 | .setRam("8g")
16 | .build();
17 |
18 | System.out.println(computer.toString()); // i7 8g Default
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ChainofResponsibility/Application.java:
--------------------------------------------------------------------------------
1 | package com.ChainofResponsibility;
2 |
3 | public class Application {
4 |
5 | public static void main(String[] args) {
6 |
7 | Calculator plus = new PlusCalculator();
8 | Calculator sub = new SubCalculator();
9 |
10 | plus.setNextCalculator(sub);
11 |
12 | // 처리를 할 수 있으면 처리하고 처리할 수 없으면 다음 것으로 넘어간다.
13 | Request request1 = new Request(1,2,"+"); // 3
14 | Request request2 = new Request(10,2,"-"); // 8
15 |
16 | plus.process(request1);
17 | plus.process(request2);
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ChainofResponsibility/Calculator.java:
--------------------------------------------------------------------------------
1 | package com.ChainofResponsibility;
2 |
3 | public abstract class Calculator {
4 |
5 | private Calculator nextCalculator;
6 |
7 | public void setNextCalculator(Calculator nextCalculator) {
8 | this.nextCalculator = nextCalculator;
9 | }
10 |
11 | public boolean process(Request request) {
12 | if (operator(request)) {
13 | //
14 | return true;
15 | } else {
16 | if (nextCalculator != null) {
17 | return nextCalculator.process(request);
18 | }
19 | return false;
20 | }
21 | }
22 |
23 | abstract protected boolean operator(Request request);
24 | }
25 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ChainofResponsibility/PlusCalculator.java:
--------------------------------------------------------------------------------
1 | package com.ChainofResponsibility;
2 |
3 | public class PlusCalculator extends Calculator {
4 | @Override
5 | protected boolean operator(Request request) {
6 | if(request.getOperator().equals("+")) {
7 | int a = request.getA();
8 | int b = request.getB();
9 | int result = a+b;
10 | System.out.println(result);
11 | }
12 | return false;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ChainofResponsibility/Request.java:
--------------------------------------------------------------------------------
1 | package com.ChainofResponsibility;
2 |
3 | public class Request {
4 |
5 | int a,b;
6 | String operator;
7 |
8 | public Request(int a, int b, String operator) {
9 | super();
10 | this.a = a;
11 | this.b = b;
12 | this.operator = operator;
13 | }
14 |
15 | public int getA() {
16 | return a;
17 | }
18 |
19 | public int getB() {
20 | return b;
21 | }
22 |
23 | public String getOperator() {
24 | return operator;
25 | }
26 |
27 | public void setA(int a) {
28 | this.a = a;
29 | }
30 |
31 | public void setB(int b) {
32 | this.b = b;
33 | }
34 |
35 | public void setOperator(String operator) {
36 | this.operator = operator;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ChainofResponsibility/SubCalculator.java:
--------------------------------------------------------------------------------
1 | package com.ChainofResponsibility;
2 |
3 | public class SubCalculator extends Calculator {
4 | @Override
5 | protected boolean operator(Request request) {
6 | if(request.getOperator().equals("-")) {
7 | int a = request.getA();
8 | int b = request.getB();
9 | int result = a-b;
10 | System.out.println(result);
11 | }
12 | return false;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CommandPattern/Command.java:
--------------------------------------------------------------------------------
1 | package com.CommandPattern;
2 |
3 | public interface Command {
4 |
5 | void execute();
6 | }
7 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CommandPattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.CommandPattern;
2 |
3 | import java.util.LinkedList;
4 | import java.util.List;
5 |
6 | public class Main {
7 | public static void main(String[] args) {
8 | System.out.println("hi");
9 |
10 | List list = new LinkedList();
11 | list.add(new Command() {
12 |
13 | @Override
14 | public void execute() {
15 | System.out.println("작업1");
16 |
17 | }
18 | });
19 |
20 | list.add(new Command() {
21 |
22 | @Override
23 | public void execute() {
24 | System.out.println("작업2");
25 |
26 | }
27 | });
28 |
29 | list.add(new Command() {
30 |
31 | @Override
32 | public void execute() {
33 | System.out.println("작업3");
34 |
35 | }
36 | });
37 |
38 | for (Command command : list) {
39 | command.execute();
40 | }
41 |
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositePattern/Component.java:
--------------------------------------------------------------------------------
1 | package com.CompositePattern;
2 |
3 | abstract public class Component {
4 |
5 | public Component(String name) {
6 | this.name = name;
7 | }
8 | private String name;
9 |
10 | public String getName() {
11 | return name;
12 | }
13 |
14 | public void setName(String name) {
15 | this.name = name;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositePattern/File.java:
--------------------------------------------------------------------------------
1 | package com.CompositePattern;
2 |
3 | public class File extends Component{
4 | public File(String name) {
5 | super(name);
6 | }
7 |
8 | private Object data;
9 |
10 | public Object getData() {
11 | return data;
12 | }
13 |
14 | public void setData(Object data) {
15 | this.data = data;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositePattern/Folder.java:
--------------------------------------------------------------------------------
1 | package com.CompositePattern;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | public class Folder extends Component{
7 | public Folder(String name) {
8 | super(name);
9 | }
10 | List children = new ArrayList();
11 |
12 | public boolean addComponent(Component component) {
13 | return children.add(component);
14 | }
15 |
16 | public boolean removeComponent(Component component) {
17 | return children.remove(component);
18 | }
19 |
20 | public List getChildren() {
21 | return children;
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositePattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.CompositePattern;
2 |
3 | public class Main {
4 |
5 | public static void main(String[] args) {
6 |
7 | Folder
8 | root = new Folder("root"),
9 | home = new Folder("home"),
10 | garam = new Folder("garam"),
11 | music = new Folder("music"),
12 | picture = new Folder("picture"),
13 | doc = new Folder("doc"),
14 | usr = new Folder("usr");
15 | File
16 | track1 = new File("track1"),
17 | track2 = new File("track2"),
18 | pic1 = new File("pic1"),
19 | doc1 = new File("doc1"),
20 | java = new File("java");
21 |
22 | root.addComponent(home);
23 | home.addComponent(garam);
24 | garam.addComponent(music);
25 | music.addComponent(track1);
26 | music.addComponent(track2);
27 | garam.addComponent(picture);
28 | picture.addComponent(pic1);
29 | garam.addComponent(doc);
30 | doc.addComponent(doc1);
31 |
32 | root.addComponent(usr);
33 | usr.addComponent(java);
34 |
35 | showFolders(root);
36 |
37 | }
38 |
39 | private static void showFolders(Component component) {
40 | System.out.println(component.getClass().getName()+"|"+component.getName());
41 | if (component instanceof Folder) {
42 | for (Component c : ((Folder)component).getChildren()) {
43 | showFolders(c);
44 | }
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositionRelation/CPU.java:
--------------------------------------------------------------------------------
1 | package com.CompositionRelation;
2 |
3 | public class CPU {
4 | }
5 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositionRelation/Club.java:
--------------------------------------------------------------------------------
1 | package com.CompositionRelation;
2 |
3 | import java.util.ArrayList;
4 |
5 | /**
6 | * 학생은 한 동아리에만 가입할 수 있다.
7 | * 한 동아리에는 여러명의 학생들이 있다.
8 | */
9 |
10 | public class Club {
11 | static ArrayList stList = new ArrayList<>();
12 | Student st;
13 |
14 | public Club(String name) {
15 | this.st = new Student(name);
16 | stList.add(this.st);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositionRelation/Computer.java:
--------------------------------------------------------------------------------
1 | package com.CompositionRelation;
2 |
3 | public class Computer {
4 | private MainBoard mb;
5 | private CPU cpu;
6 | private Memory memory;
7 | private PowerSupply powerSupply;
8 |
9 | public Computer() {
10 | this.mb = new MainBoard();
11 | this.cpu = new CPU();
12 | this.memory = new Memory();
13 | this.powerSupply = new PowerSupply();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositionRelation/Main.java:
--------------------------------------------------------------------------------
1 | package com.CompositionRelation;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 |
6 | Club c01 = new Club("st01");
7 | Club c02 = new Club("st02");
8 |
9 | System.out.println(Club.stList);
10 | for (Student st : Club.stList) {
11 | System.out.println(st.getName());
12 | }
13 |
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositionRelation/MainBoard.java:
--------------------------------------------------------------------------------
1 | package com.CompositionRelation;
2 |
3 | public class MainBoard {
4 | }
5 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositionRelation/Memory.java:
--------------------------------------------------------------------------------
1 | package com.CompositionRelation;
2 |
3 | public class Memory {
4 | }
5 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositionRelation/PowerSupply.java:
--------------------------------------------------------------------------------
1 | package com.CompositionRelation;
2 |
3 | public class PowerSupply {
4 | }
5 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/CompositionRelation/Student.java:
--------------------------------------------------------------------------------
1 | package com.CompositionRelation;
2 |
3 | public class Student {
4 | private String name;
5 | public Student(String name) {
6 | this.name = name;
7 | }
8 |
9 | public String getName() {
10 | return name;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/DecoratorPattern/Display.java:
--------------------------------------------------------------------------------
1 | package com.DecoratorPattern;
2 |
3 | public abstract class Display {
4 |
5 | public void draw() {}
6 | }
7 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/DecoratorPattern/DisplayDecorator.java:
--------------------------------------------------------------------------------
1 | package com.DecoratorPattern;
2 |
3 | public class DisplayDecorator extends Display {
4 |
5 | private Display decoratedDisplay;
6 |
7 | public DisplayDecorator(Display decoratedDisplay) {
8 | this.decoratedDisplay = decoratedDisplay;
9 | }
10 |
11 | public void draw() {
12 | decoratedDisplay.draw();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/DecoratorPattern/LaneDecorator.java:
--------------------------------------------------------------------------------
1 | package com.DecoratorPattern;
2 |
3 | public class LaneDecorator extends DisplayDecorator{
4 |
5 | public LaneDecorator(Display decoratedDisplay) {
6 | super(decoratedDisplay);
7 | }
8 |
9 | public void draw() {
10 | super.draw();
11 | drawLane();
12 | }
13 |
14 | public void drawLane() {
15 | System.out.println("차선 그리기");
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/DecoratorPattern/RoadDisplay.java:
--------------------------------------------------------------------------------
1 | package com.DecoratorPattern;
2 |
3 | public class RoadDisplay extends Display{
4 |
5 | public void draw() {
6 | System.out.println("기본 도로");
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/DecoratorPattern/RoadMain.java:
--------------------------------------------------------------------------------
1 | package com.DecoratorPattern;
2 |
3 | public class RoadMain {
4 |
5 | public static void main(String[] args) {
6 | Display roadWithLaneAndTraffic = new LaneDecorator(new TrafficDecorator(new RoadDisplay()));
7 | System.out.println(roadWithLaneAndTraffic);
8 | roadWithLaneAndTraffic.draw();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/DecoratorPattern/TrafficDecorator.java:
--------------------------------------------------------------------------------
1 | package com.DecoratorPattern;
2 |
3 | public class TrafficDecorator extends DisplayDecorator {
4 |
5 |
6 | public TrafficDecorator(Display decoratedDisplay) {
7 | super(decoratedDisplay);
8 | }
9 |
10 | public void draw() {
11 | super.draw();
12 | drawTraffic();
13 | }
14 |
15 | public void drawTraffic() {
16 | System.out.println("교통량 그리기");
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/DeepShallow/Age.java:
--------------------------------------------------------------------------------
1 | package com.DeepShallow;
2 |
3 | public class Age {
4 |
5 | int year;
6 | int value;
7 |
8 | public Age(int year, int value) {
9 | super();
10 | this.year = year;
11 | this.value = value;
12 | }
13 |
14 | public void setValue(int value) {
15 | this.value = value;
16 | }
17 |
18 | public void setYear(int year) {
19 | this.year = year;
20 | }
21 |
22 | public int getValue() {
23 | return value;
24 | }
25 |
26 | public int getYear() {
27 | return year;
28 | }
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/DeepShallow/Cat.java:
--------------------------------------------------------------------------------
1 | package com.DeepShallow;
2 |
3 | public class Cat implements Cloneable{
4 |
5 | private String name;
6 | private Age age;
7 |
8 | public void setName(String name) {
9 | this.name = name;
10 | }
11 |
12 | public void setAge(Age age) {
13 | this.age = age;
14 | }
15 |
16 | public String getName() {
17 | return name;
18 | }
19 |
20 | public Age getAge() {
21 | return age;
22 | }
23 |
24 | public Cat copy() throws CloneNotSupportedException {
25 | Cat ret = (Cat) this.clone();
26 | // 명시적으로 깊은 복사
27 | ret.setAge(new Age(this.age.getYear(), this.age.getValue()));
28 | return ret;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/DeepShallow/Main.java:
--------------------------------------------------------------------------------
1 | package com.DeepShallow;
2 |
3 | public class Main {
4 |
5 | public static void main(String[] args) throws CloneNotSupportedException {
6 |
7 | Cat navi = new Cat();
8 | navi.setName("navi");
9 | navi.setAge(new Age(2012, 3));
10 |
11 | Cat yo = navi.copy();
12 | yo.setName("yo");
13 | yo.getAge().setYear(2013);
14 | yo.getAge().setValue(3);
15 |
16 | System.out.println(navi.getName()); // navi
17 | System.out.println(yo.getName()); // yo
18 |
19 | // 깊은 복사가 이뤄지지 않는다. -> 변경후 깊은 복사를 구현
20 | System.out.println(navi.getAge().getYear()); // 2012
21 | System.out.println(yo.getAge().getYear()); // 2013
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FacadePattern/Application.java:
--------------------------------------------------------------------------------
1 | package com.FacadePattern;
2 |
3 | public class Application {
4 | public static void main(String[] args) {
5 | Facade facade = new Facade();
6 | facade.process();
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FacadePattern/Facade.java:
--------------------------------------------------------------------------------
1 | package com.FacadePattern;
2 |
3 | public class Facade {
4 |
5 | private HelpSystem01 helpSystem01;
6 | private HelpSystem02 helpSystem02;
7 |
8 | public Facade() {
9 | helpSystem01 = new HelpSystem01();
10 | helpSystem02 = new HelpSystem02();
11 | }
12 |
13 | public void process() {
14 | helpSystem01.process();
15 | helpSystem02.process();
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FacadePattern/HelpSystem01.java:
--------------------------------------------------------------------------------
1 | package com.FacadePattern;
2 |
3 | // defualt 접근제한자
4 | class HelpSystem01 {
5 | public HelpSystem01() {
6 | System.out.println(getClass().getName());
7 | }
8 |
9 | public void process() {
10 | System.out.println(getClass().getSimpleName());
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FacadePattern/HelpSystem02.java:
--------------------------------------------------------------------------------
1 | package com.FacadePattern;
2 |
3 | class HelpSystem02 {
4 | public HelpSystem02() {
5 | System.out.println(getClass().getName());
6 | }
7 |
8 | public void process() {
9 | System.out.println(getClass().getSimpleName());
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FactoryMethodPattern/Application.java:
--------------------------------------------------------------------------------
1 | package com.FactoryMethodPattern;
2 |
3 |
4 | import com.FactoryMethodPattern.jw.Creator;
5 | import com.FactoryMethodPattern.jw.Item;
6 |
7 | public class Application {
8 |
9 | public static void main(String[] args) {
10 |
11 | Creator creator = new DefaultItemCreator();
12 |
13 | Item item1 = creator.create("나무칼");
14 | Item item2 = creator.create("나무방패");
15 | Item item3 = creator.create("나무갑주");
16 |
17 | item1.use();
18 | item2.use();
19 | item3.use();
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FactoryMethodPattern/DefaultItem.java:
--------------------------------------------------------------------------------
1 | package com.FactoryMethodPattern;
2 |
3 |
4 | import com.FactoryMethodPattern.jw.Item;
5 |
6 | public class DefaultItem extends Item {
7 |
8 | private String itemName;
9 |
10 | public DefaultItem(String itemName) {
11 | this.itemName = itemName;
12 | }
13 |
14 | @Override
15 | public void use() {
16 | System.out.println(itemName +" 사용했습니다!");
17 | }
18 |
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FactoryMethodPattern/DefaultItemCreator.java:
--------------------------------------------------------------------------------
1 | package com.FactoryMethodPattern;
2 |
3 |
4 | import com.FactoryMethodPattern.jw.Creator;
5 | import com.FactoryMethodPattern.jw.Item;
6 |
7 | public class DefaultItemCreator extends Creator {
8 |
9 | @Override
10 | protected String end(String itemName) {
11 | System.out.println("Default 마무리 작업!");
12 | return itemName;
13 | }
14 |
15 | @Override
16 | protected String init(String itemName) {
17 | System.out.println("Default 초기 작업!");
18 | return itemName;
19 | }
20 |
21 | @Override
22 | protected Item createItem(String itemName) {
23 | return new DefaultItem(itemName);
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FactoryMethodPattern/jw/Creator.java:
--------------------------------------------------------------------------------
1 | package com.FactoryMethodPattern.jw;
2 |
3 | public abstract class Creator {
4 |
5 |
6 | public Item create(String itemName){
7 |
8 | // step1: 데이터 베이스에서 아이템을 호출
9 | init(itemName);
10 | // step2: 바탕으로 아이템을 생성
11 | Item item = createItem(itemName);
12 | // step3: 생성 로그를 찍는 함수
13 | end(itemName);
14 |
15 | return item;
16 |
17 | }
18 |
19 | abstract protected String end(String itemName);
20 | abstract protected String init(String itemName);
21 | // 아이템을 생성하는 알고리즘
22 | abstract protected Item createItem(String itemName);
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FactoryMethodPattern/jw/Item.java:
--------------------------------------------------------------------------------
1 | package com.FactoryMethodPattern.jw;
2 |
3 |
4 | public abstract class Item {
5 |
6 | public abstract void use();
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FlyweightPattern/FlyWeight.java:
--------------------------------------------------------------------------------
1 | package com.FlyweightPattern;
2 |
3 | public class FlyWeight {
4 |
5 | public FlyWeight(String data) {
6 | this.data = data;
7 | }
8 |
9 |
10 | private String data;
11 |
12 | public String getData() {
13 | return data;
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FlyweightPattern/FlyWeightFactory.java:
--------------------------------------------------------------------------------
1 | package com.FlyweightPattern;
2 |
3 | import java.util.Map;
4 | import java.util.TreeMap;
5 |
6 | public class FlyWeightFactory {
7 |
8 | Map pool;
9 |
10 | public FlyWeightFactory() {
11 | pool = new TreeMap<>();
12 | }
13 |
14 | public FlyWeight getFlyWeight(String key) {
15 | FlyWeight flyWeight = pool.get(key);
16 |
17 | if (flyWeight == null) {
18 | flyWeight = new FlyWeight(key);
19 |
20 | pool.put(key, flyWeight);
21 | // pool에 없었다면 계속해서 새로 생성 했을 것
22 | System.out.println("새로생성 " + key);
23 | } else {
24 | System.out.println("재사용 " + key);
25 | }
26 |
27 | return flyWeight;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/FlyweightPattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.FlyweightPattern;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | FlyWeightFactory factory = new FlyWeightFactory();
6 | FlyWeight flyWeight = factory.getFlyWeight("a");
7 | System.out.println(flyWeight);
8 | flyWeight = factory.getFlyWeight("a");
9 | System.out.println(flyWeight);
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/MediatorPattern/Application.java:
--------------------------------------------------------------------------------
1 | package com.MediatorPattern;
2 |
3 | public class Application {
4 | public static void main(String[] args) {
5 | Mediator mediator = new ChatMediator();
6 |
7 | Colleague colleague1 = new ChatColleague();
8 | Colleague colleague2 = new ChatColleague();
9 | Colleague colleague3 = new ChatColleague();
10 |
11 | colleague1.join(mediator);
12 | colleague2.join(mediator);
13 | colleague3.join(mediator);
14 |
15 | colleague1.sendData("AAA");
16 | colleague2.sendData("BBB");
17 | colleague3.sendData("CCC");
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/MediatorPattern/ChatColleague.java:
--------------------------------------------------------------------------------
1 | package com.MediatorPattern;
2 |
3 | public class ChatColleague extends Colleague{
4 |
5 | @Override
6 | public void handle(String data) {
7 | System.out.println(this);
8 | }
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/MediatorPattern/ChatMediator.java:
--------------------------------------------------------------------------------
1 | package com.MediatorPattern;
2 |
3 | public class ChatMediator extends Mediator{
4 |
5 | @Override
6 | public void mediate(String data) {
7 | System.out.println(data);
8 | for (Colleague colleague : colleagues) {
9 | // 중재 가능성이 있는 정보가 존재
10 | colleague.handle(data);
11 | }
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/MediatorPattern/Colleague.java:
--------------------------------------------------------------------------------
1 | package com.MediatorPattern;
2 |
3 | public abstract class Colleague {
4 |
5 | private Mediator mediator; // 어떤 mediator에 속했는가
6 |
7 | public boolean join(Mediator mediator) {
8 |
9 | if (mediator == null) { // null 이라면 false return
10 | return false;
11 | }
12 | else {
13 | this.mediator = mediator;
14 | return mediator.addColleague(this);
15 | }
16 | }
17 |
18 | public void sendData(String data) {
19 | if(mediator != null) {
20 | mediator.mediate(data);
21 | }
22 | }
23 |
24 | abstract public void handle(String data);
25 |
26 |
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/MediatorPattern/Mediator.java:
--------------------------------------------------------------------------------
1 | package com.MediatorPattern;
2 |
3 | import java.util.ArrayList;
4 | import java.util.List;
5 |
6 | public abstract class Mediator {
7 |
8 | protected List colleagues; // colleague의 리스트를 가지고 있어야 중재할 대상을 얻는다.
9 |
10 | public Mediator() {
11 | colleagues = new ArrayList();
12 | }
13 |
14 | public boolean addColleague(Colleague colleague) {
15 |
16 | if (colleagues != null) {
17 | return colleagues.add(colleague); // return true
18 | } else {
19 | return false;
20 | }
21 |
22 | }
23 |
24 |
25 | public abstract void mediate(String data);
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/MementoPattern/Application.java:
--------------------------------------------------------------------------------
1 | package com.MementoPattern;
2 |
3 | import java.util.Stack;
4 |
5 | public class Application {
6 |
7 | public static void main(String[] args) {
8 |
9 | Stack mementos = new Stack<>();
10 |
11 | Originator originator = new Originator();
12 |
13 |
14 | originator.setState("state 1");
15 | mementos.push(originator.createMemento());
16 | originator.setState("state 2");
17 | mementos.push(originator.createMemento());
18 | originator.setState("state 3");
19 | mementos.push(originator.createMemento());
20 | originator.setState("state final");
21 | mementos.push(originator.createMemento());
22 |
23 | originator.restoreMemento(mementos.pop());
24 | System.out.println(originator.getState());
25 |
26 | originator.restoreMemento(mementos.pop());
27 | System.out.println(originator.getState());
28 |
29 | originator.restoreMemento(mementos.pop());
30 | System.out.println(originator.getState());
31 |
32 | originator.restoreMemento(mementos.pop());
33 | System.out.println(originator.getState());
34 |
35 |
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/MementoPattern/Memento.java:
--------------------------------------------------------------------------------
1 | package com.MementoPattern;
2 |
3 | public class Memento {
4 |
5 | String state;
6 |
7 | public Memento(String state) {
8 | this.state = state;
9 | }
10 |
11 | public String getState() {
12 | return this.state;
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/MementoPattern/Originator.java:
--------------------------------------------------------------------------------
1 | package com.MementoPattern;
2 |
3 | public class Originator {
4 |
5 | String state;
6 |
7 | public Memento createMemento() {
8 | return new Memento(state);
9 | }
10 |
11 | public void restoreMemento(Memento memento) {
12 | this.state = memento.getState();
13 | }
14 |
15 | public String getState() {
16 | return state;
17 | }
18 |
19 | public void setState(String state) {
20 | this.state = state;
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ObserverPattern/Button.java:
--------------------------------------------------------------------------------
1 | package com.ObserverPattern;
2 |
3 | public class Button {
4 |
5 | public void onClick(){
6 | // 이벤트 처리를 해줘야 한다.
7 | // 클릭이벤트가 발생하면 자기자신을 업데이트 한다.
8 | if (onClickListener != null) {
9 | onClickListener.onClick(this);
10 | }
11 | }
12 |
13 | public interface OnClickListener{
14 | void onClick(Button button);
15 | }
16 |
17 | OnClickListener onClickListener;
18 |
19 | public void setOnClickListener(OnClickListener onClickListener) {
20 | this.onClickListener = onClickListener;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ObserverPattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.ObserverPattern;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 | System.out.println();
6 |
7 | Button button = new Button();
8 | button.setOnClickListener(new Button.OnClickListener() {
9 | @Override
10 | public void onClick(Button button) {
11 | System.out.println(button+"is Clicked");
12 | }
13 | });
14 | button.onClick();
15 | }
16 | }
--------------------------------------------------------------------------------
/DesignPattern/src/com/PrototypePattern/Circle.java:
--------------------------------------------------------------------------------
1 | package com.PrototypePattern;
2 |
3 | public class Circle extends Shape{
4 | private int x, y, r;
5 |
6 | public Circle(int x, int y, int r) {
7 | super();
8 | this.x = x;
9 | this.y = y;
10 | this.r = r;
11 | }
12 |
13 | public int getR() {
14 | return r;
15 | }
16 |
17 | public void setR(int r) {
18 | this.r = r;
19 | }
20 |
21 | public int getX() {
22 | return x;
23 | }
24 |
25 | public void setX(int x) {
26 | this.x = x;
27 | }
28 |
29 | public int getY() {
30 | return y;
31 | }
32 |
33 | public void setY(int y) {
34 | this.y = y;
35 | }
36 |
37 |
38 | public Circle copy() throws CloneNotSupportedException {
39 | Circle circle = (Circle) clone();
40 | circle.x = x+1;
41 | circle.y = y+1;
42 | return circle;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/PrototypePattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.PrototypePattern;
2 |
3 | public class Main {
4 |
5 | public static void main(String[] args) throws CloneNotSupportedException {
6 | Circle circle1 = new Circle(1,1,3);
7 | Circle circle2 = circle1.copy();
8 | System.out.println(circle1.getX()); // 1
9 | System.out.println(circle2.getX()); // 2 // 복붙하면 내부적으로 옆으로 이동하도록 설정
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/PrototypePattern/Shape.java:
--------------------------------------------------------------------------------
1 | package com.PrototypePattern;
2 |
3 | public class Shape implements Cloneable{
4 | private String id;
5 |
6 | public void setId(String id) {
7 | this.id = id;
8 | }
9 |
10 | public String getId() {
11 | return id;
12 | }
13 |
14 | // Object에 정의되어있는 함수
15 | // Cloneable을 명시적으로 implements해야지 불러올 수 있다.
16 | @Override
17 | protected Object clone() throws CloneNotSupportedException {
18 | return super.clone();
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ProxyPattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.ProxyPattern;
2 |
3 | public class Main {
4 |
5 | public static void main(String[] args) {
6 |
7 | Subject real = new RealSubject();
8 |
9 | Subject proxy1 = new Proxy(real);
10 | Subject proxy2 = new Proxy(real);
11 |
12 | proxy1.action1();
13 | proxy2.action1();
14 |
15 | proxy1.action2();
16 | proxy2.action2();
17 |
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ProxyPattern/Proxy.java:
--------------------------------------------------------------------------------
1 | package com.ProxyPattern;
2 |
3 | public class Proxy implements Subject{
4 |
5 | private Subject real;
6 |
7 | public Proxy(Subject real) {
8 | this.real = real;
9 | }
10 |
11 | @Override
12 | public void action1() {
13 | // 간단한 업무는 proxy가 한다.
14 | System.out.println("간단한 업무 by proxy");
15 | }
16 |
17 | @Override
18 | public void action2() {
19 | this.real.action2();
20 | }
21 |
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ProxyPattern/RealSubject.java:
--------------------------------------------------------------------------------
1 | package com.ProxyPattern;
2 |
3 | public class RealSubject implements Subject {
4 |
5 | @Override
6 | public void action1() {
7 | System.out.println("간단한 업무 by realSubject");
8 | }
9 |
10 | @Override
11 | public void action2() {
12 | System.out.println("복잡한 업무 by realSubject");
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/ProxyPattern/Subject.java:
--------------------------------------------------------------------------------
1 | package com.ProxyPattern;
2 |
3 | public interface Subject {
4 |
5 | // more resource
6 | void action1();
7 |
8 | // less #
9 | void action2();
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/SingletonPattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.SingletonPattern;
2 |
3 | public class Main {
4 |
5 | public static void main(String[] args) {
6 | SystemSpeak speaker1 = SystemSpeak.getInstance();
7 | SystemSpeak speaker2 = SystemSpeak.getInstance();
8 | System.out.println(speaker1.getVolume()); // 5
9 | System.out.println(speaker2.getVolume()); // 5
10 |
11 | speaker1.setVolume(11);
12 | System.out.println(speaker1.getVolume()); // 11
13 | System.out.println(speaker2.getVolume()); // 11
14 | // 같은 결과가 출력되어 동일한 인스턴스임을 확인할 수 있다.
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/SingletonPattern/SystemSpeak.java:
--------------------------------------------------------------------------------
1 | package com.SingletonPattern;
2 |
3 | public class SystemSpeak {
4 |
5 | // 하나만 하기 위해서 static
6 | static private SystemSpeak instance;
7 | private int volume;
8 |
9 | // 외부에서 생성 함수를 사용하지 못하도록 private
10 | private SystemSpeak() {
11 | volume = 5;
12 | }
13 |
14 | public static SystemSpeak getInstance() {
15 | // null 인지 아닌지 체크
16 | if (instance == null) {
17 | // 시스템 스피커
18 | instance = new SystemSpeak();
19 | }
20 | return instance;
21 | }
22 |
23 | public int getVolume() {
24 | return volume;
25 | }
26 |
27 | public void setVolume(int volume) {
28 | this.volume = volume;
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StatePattern/Light.java:
--------------------------------------------------------------------------------
1 | package com.StatePattern;
2 |
3 | public class Light {
4 |
5 | private State state; // 인터페이스의 객체를 생성
6 |
7 | public Light() {
8 | state = new OFF(); // 처음에는 off 상태이다.
9 | }
10 |
11 | public void setState(State state) {
12 | this.state = state;
13 | }
14 |
15 | public void on_button_pushed() {
16 | state.on_button_pushed(this); // 자기자신(this)를 넣는다.
17 | }
18 |
19 | public void off_button_pushed() {
20 | state.off_button_pushed(this); // 자기자신(this)를 넣는다.
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StatePattern/LightMain.java:
--------------------------------------------------------------------------------
1 | package com.StatePattern;
2 |
3 | public class LightMain {
4 |
5 | public static void main(String[] args) {
6 | Light light = new Light();
7 | light.on_button_pushed();
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StatePattern/OFF.java:
--------------------------------------------------------------------------------
1 | package com.StatePattern;
2 |
3 | public class OFF implements State{
4 | // 싱글턴 패턴 사용
5 | private static OFF off = new OFF();
6 | OFF(){}
7 |
8 | public static OFF getInstance() {
9 | return off;
10 | }
11 | @Override
12 | public void on_button_pushed(Light light) {
13 | System.out.println("Light ON");
14 | light.setState(ON.getInstance()); // 싱글턴 패턴 사용
15 | }
16 |
17 | @Override
18 | public void off_button_pushed(Light light) {
19 | System.out.println("반응 없음");
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StatePattern/ON.java:
--------------------------------------------------------------------------------
1 | package com.StatePattern;
2 |
3 | public class ON implements State{
4 | // 싱글턴 패턴 사용
5 | private static ON on = new ON();
6 | private ON(){}
7 |
8 | public static ON getInstance() {
9 | return on;
10 | }
11 |
12 | @Override
13 | public void on_button_pushed(Light light) {
14 | System.out.println("반응 없음");
15 | }
16 |
17 | @Override
18 | public void off_button_pushed(Light light) {
19 | System.out.println("Light OFF");
20 | light.setState(OFF.getInstance()); // 싱글턴 패턴 사용
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StatePattern/State.java:
--------------------------------------------------------------------------------
1 | package com.StatePattern;
2 |
3 | interface State {
4 |
5 | public void on_button_pushed(Light light);
6 | public void off_button_pushed(Light light);
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StrategyPattern/AObj.java:
--------------------------------------------------------------------------------
1 | package com.StrategyPattern;
2 |
3 | public class AObj {
4 |
5 | // 어떤 기능을 구현할때 그 책임을 다른 객체에 떠넘기는 것, 델리게이
6 | Ainterface ainterface;
7 |
8 | public AObj() {
9 | ainterface = new StrategyPatternCode();
10 | }
11 | public void funcAA() {
12 |
13 | ainterface.funcA();
14 | ainterface.funcA();
15 | // System.out.println("AAA");
16 | // System.out.println("AAA");
17 |
18 | // ~ 기능이 필요합니다. 개발해주세요.
19 |
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StrategyPattern/Ainterface.java:
--------------------------------------------------------------------------------
1 | package com.StrategyPattern;
2 |
3 | public interface Ainterface {
4 |
5 | // 1) 기능에 대한 선언
6 | public void funcA();
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StrategyPattern/GameCharacter.java:
--------------------------------------------------------------------------------
1 | package com.StrategyPattern;
2 |
3 | public class GameCharacter {
4 |
5 | // 접근점
6 | private Weapon weapon;
7 |
8 | // 교환가능
9 | public void setWeapon(Weapon weapon) {
10 | this.weapon = weapon;
11 | }
12 |
13 | public void attack() {
14 | if (weapon == null) {
15 | System.out.println("맨손 공격");
16 | } else {
17 | // 델리게이트
18 | weapon.attack();
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StrategyPattern/Knife.java:
--------------------------------------------------------------------------------
1 | package com.StrategyPattern;
2 |
3 | public class Knife implements Weapon{
4 | @Override
5 | public void attack() {
6 | System.out.println("knife attack");
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StrategyPattern/Main.java:
--------------------------------------------------------------------------------
1 | package com.StrategyPattern;
2 |
3 | public class Main {
4 | public static void main(String[] args) {
5 |
6 | GameCharacter character = new GameCharacter();
7 | character.attack();
8 |
9 | character.setWeapon(new Knife());
10 | character.attack();
11 |
12 | character.setWeapon(new Sword());
13 | character.attack();
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StrategyPattern/StrategyPatternCode.java:
--------------------------------------------------------------------------------
1 | package com.StrategyPattern;
2 |
3 | // 2) 기능을 구현하는 클래스를 만들어서 구현(implements)
4 | public class StrategyPatternCode implements Ainterface{
5 | @Override
6 | public void funcA() {
7 | System.out.println("AAA");
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StrategyPattern/Sword.java:
--------------------------------------------------------------------------------
1 | package com.StrategyPattern;
2 |
3 | public class Sword implements Weapon {
4 | @Override
5 | public void attack() {
6 | System.out.println("Sword attack");
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/StrategyPattern/Weapon.java:
--------------------------------------------------------------------------------
1 | package com.StrategyPattern;
2 |
3 | public interface Weapon {
4 | // 무기의 접점
5 | public void attack();
6 | }
7 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/TemplateMethodPattern/AbstConnectHelper.java:
--------------------------------------------------------------------------------
1 | package com.TemplateMethodPattern;
2 |
3 | // 추상 클래스
4 |
5 | public abstract class AbstConnectHelper {
6 |
7 | // 알고리즘의 단계인 경우 외부에 노출이 되면 안된다. 때문에 protected로 선언
8 | // 외부에서는 호출하면 안되는데, 하위 클래스에서는 사용해야하는 경우
9 | abstract protected String doSecurity(String info);
10 |
11 | abstract protected String authentication(String id, String password);
12 |
13 | abstract protected int authorization(String userName);
14 |
15 | abstract protected String connection(String info);
16 |
17 | public String requestConnection(String info) {
18 |
19 | String id, password, userName, decodedInfo, userInfo;
20 |
21 | // 암호화된 정보를 복호화 합니다.
22 | // 암호화된 문자열을 디코드한다.
23 | decodedInfo = doSecurity(info);
24 |
25 | // 반환된 것을 가지고 아이디, 암호를 할당한다.
26 | // decodedInfo에서 id 와 password를 추출
27 | id = "abc";
28 | password = "abc";
29 |
30 | userInfo = authentication(id, password);
31 |
32 | // userInfo에서 userName을 찾아 냅니다.
33 | userName = "abc";
34 |
35 | int result = authorization(userName);
36 |
37 | switch (result) {
38 |
39 | case 0:// 무료회원
40 | break;
41 | case 1:// 유료회원
42 | break;
43 | case 2:// 게임 마스터
44 | break;
45 | case 3:// 접속 권한 없음
46 | break;
47 | default:
48 | break;
49 | }
50 |
51 | return connection(userInfo);
52 | }
53 | }
--------------------------------------------------------------------------------
/DesignPattern/src/com/TemplateMethodPattern/Application.java:
--------------------------------------------------------------------------------
1 | package com.TemplateMethodPattern;
2 |
3 | public class Application {
4 |
5 | public static void main(String[] args) {
6 | AbstConnectHelper abstConnectHelper = new ConcreteConnectHelper();
7 |
8 | abstConnectHelper.requestConnection("아이디 암호 등 접속 정보");
9 |
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/DesignPattern/src/com/TemplateMethodPattern/ConcreteConnectHelper.java:
--------------------------------------------------------------------------------
1 | package com.TemplateMethodPattern;
2 |
3 | public class ConcreteConnectHelper extends AbstConnectHelper {
4 |
5 | @Override
6 | protected String doSecurity(String info) {
7 | System.out.println("디코드");
8 | return info;
9 | }
10 |
11 | @Override
12 | protected String authentication(String id, String password) {
13 | System.out.println("인증확인");
14 | if(id.equals("abc")|password.equals("abc"))
15 | return "true info";
16 | else
17 | return "false info";
18 | }
19 |
20 | @Override
21 | protected int authorization(String userName) {
22 | System.out.println("권한 확인");
23 | return 0;
24 | }
25 |
26 | @Override
27 | protected String connection(String info) {
28 | System.out.println("마지막 접속 단계");
29 | return info;
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Datasource local storage ignored files
5 | /dataSources/
6 | /dataSources.local.xml
7 | # Zeppelin ignored files
8 | /ZeppelinRemoteNotebooks/
9 | # Editor-based HTTP Client requests
10 | /httpRequests/
11 |
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/.idea/src.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/DesignPattern.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamBody.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamBody.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamFactory.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamWheel.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/Sam/SamWheel.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/abst/BikeFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/abst/BikeFactory.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/abst/Body.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/abst/Body.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/abst/Wheel.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/abst/Wheel.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtBikeFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtBikeFactory.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtBody.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtBody.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtWheel.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern/gt/GtWheel.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/Button.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/Button.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/GuiFac.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/GuiFac.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/TextArea.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/abst/TextArea.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/FactoryInstance.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/FactoryInstance.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxButton.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxButton.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxGuiFac.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxGuiFac.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxTextArea.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AbstractFactoryPattern02/concrete/LinuxTextArea.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AdapterPattern/Adapter.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AdapterPattern/Adapter.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AdapterPattern/AdapterImpl.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AdapterPattern/AdapterImpl.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AdapterPattern/Application.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AdapterPattern/Application.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AdapterPattern/Math.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AdapterPattern/Math.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AggredationRelation/CPU.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AggredationRelation/CPU.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AggredationRelation/Computer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AggredationRelation/Computer.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AggredationRelation/MainBoard.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AggredationRelation/MainBoard.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AggredationRelation/Memory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AggredationRelation/Memory.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/AggredationRelation/PowerSupply.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/AggredationRelation/PowerSupply.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/DefaultMorseCodeFunction.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/DefaultMorseCodeFunction.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/MorseCode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/MorseCode.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/MorseCodeFunction.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/MorseCodeFunction.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/PrintMorseCode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/PrintMorseCode.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/SoundMorseCodeFunction.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BridgePattern/SoundMorseCodeFunction.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern/BluePrint.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern/BluePrint.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern/Computer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern/Computer.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern/ComputerFactory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern/ComputerFactory.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern/LgGramBlueprint.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern/LgGramBlueprint.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern02/Computer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern02/Computer.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern02/ComputerBuilder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern02/ComputerBuilder.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern02/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/BuilderPattern02/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/ChainofResponsibility/Application.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/ChainofResponsibility/Application.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/ChainofResponsibility/Calculator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/ChainofResponsibility/Calculator.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/ChainofResponsibility/PlusCalculator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/ChainofResponsibility/PlusCalculator.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/ChainofResponsibility/Request.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/ChainofResponsibility/Request.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/ChainofResponsibility/SubCalculator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/ChainofResponsibility/SubCalculator.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositePattern/Component.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositePattern/Component.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositePattern/File.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositePattern/File.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositePattern/Folder.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositePattern/Folder.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositePattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositePattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/CPU.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/CPU.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/Club.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/Club.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/Computer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/Computer.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/MainBoard.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/MainBoard.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/Memory.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/Memory.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/PowerSupply.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/PowerSupply.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/Student.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/CompositionRelation/Student.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/Display.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/Display.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/DisplayDecorator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/DisplayDecorator.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/LaneDecorator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/LaneDecorator.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/RoadDisplay.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/RoadDisplay.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/RoadMain.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/RoadMain.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/TrafficDecorator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/DecoratorPattern/TrafficDecorator.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/DeepShallow/Age.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/DeepShallow/Age.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/DeepShallow/Cat.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/DeepShallow/Cat.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/DeepShallow/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/DeepShallow/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/FacadePattern/Application.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/FacadePattern/Application.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/FacadePattern/Facade.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/FacadePattern/Facade.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/FacadePattern/HelpSystem01.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/FacadePattern/HelpSystem01.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/FacadePattern/HelpSystem02.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/FacadePattern/HelpSystem02.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/FactoryMethodPattern/Application.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/FactoryMethodPattern/Application.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/FactoryMethodPattern/DefaultItem.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/FactoryMethodPattern/DefaultItem.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/FactoryMethodPattern/DefaultItemCreator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/FactoryMethodPattern/DefaultItemCreator.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/FactoryMethodPattern/jw/Creator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/FactoryMethodPattern/jw/Creator.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/FactoryMethodPattern/jw/Item.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/FactoryMethodPattern/jw/Item.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/ObserverPattern/Button$OnClickListener.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/ObserverPattern/Button$OnClickListener.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/ObserverPattern/Button.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/ObserverPattern/Button.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/ObserverPattern/Main$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/ObserverPattern/Main$1.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/ObserverPattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/ObserverPattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/PrototypePattern/Circle.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/PrototypePattern/Circle.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/PrototypePattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/PrototypePattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/PrototypePattern/Shape.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/PrototypePattern/Shape.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/SingletonPattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/SingletonPattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/SingletonPattern/SystemSpeak.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/SingletonPattern/SystemSpeak.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StatePattern/Light.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StatePattern/Light.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StatePattern/LightMain.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StatePattern/LightMain.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StatePattern/OFF.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StatePattern/OFF.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StatePattern/ON.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StatePattern/ON.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StatePattern/State.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StatePattern/State.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/AObj.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/AObj.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/Ainterface.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/Ainterface.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/GameCharacter.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/GameCharacter.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/Knife.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/Knife.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/Main.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/Main.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/StrategyPatternCode.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/StrategyPatternCode.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/Sword.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/Sword.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/Weapon.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/StrategyPattern/Weapon.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/TemplateMethodPattern/AbstConnectHelper.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/TemplateMethodPattern/AbstConnectHelper.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/TemplateMethodPattern/Application.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/TemplateMethodPattern/Application.class
--------------------------------------------------------------------------------
/DesignPattern/src/out/production/DesignPattern/com/TemplateMethodPattern/ConcreteConnectHelper.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/DesignPattern/src/out/production/DesignPattern/com/TemplateMethodPattern/ConcreteConnectHelper.class
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | :star:
2 |
3 | 어댑터패턴 팩토리패턴 싱글톤 빌더 컴포짓 데코레이터 옵저버 프록시
4 |
5 |
6 |
7 | # DesignPattern
8 |
9 | ## 생성 패턴(Creational Pattern)
10 |
11 | > 객체 생성에 관련된 패턴
12 | >
13 | > 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지않도록 유연성을 제공한다.
14 |
15 |
16 |
17 |
18 |
19 | [팩토리 메소드 (Factory Method Pattern)](https://github.com/tesschung/DesignPattern/blob/master/12_Factory_Method_Pattern.md)
20 |
21 | 객체 생성을 서브 클래스에서 처리하도록 분리하고 캡슐화한 패턴이다.
22 |
23 | 상위 클래스에서 인터페이스만 정의하고 실제 생성을 서브 클래스가 담당한다.
24 |
25 |
26 |
27 | [싱글톤 패턴 (Singleton Pattern)](https://github.com/tesschung/DesignPattern/blob/master/13_Singleton_Pattern.md)
28 |
29 | 하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수는 없다.
30 |
31 | 클래스 내에서 인스턴스가 하나뿐임을 보장하며, 불필요한 메모리 낭비를 최소화 할 수 있다.
32 |
33 |
34 |
35 | [프로토 타입 패턴 (Prototype Pattern)](https://github.com/tesschung/DesignPattern/blob/master/14_Prototype_Pattern.md)
36 |
37 | 원본 객체를 복제하는 방법으로 객체를 생성하는 패턴이다.
38 |
39 | 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브클래스가 담당한다.
40 |
41 |
42 |
43 | [빌더 패턴 (Builder Pattern)](https://github.com/tesschung/DesignPattern/blob/master/15_Builder_Pattern.md)
44 |
45 | 작게 분리된 인스턴스를 건축하듯이 조합하여 객체를 생성한다.
46 |
47 | 객체의 생성 과정과 표현 방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있다.
48 |
49 |
50 |
51 | [추상 팩토리 패턴 (Abstract Factory Pattern)]()
52 |
53 |
54 |
55 |
56 |
57 | ## 구조 패턴(Structural Pattern)
58 |
59 | >클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
60 | >
61 | >예를 들어 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴
62 |
63 |
64 |
65 | [어댑터 패턴 (Adapter Pattern)](https://github.com/tesschung/DesignPattern/blob/master/10_Adapter_Pattern.md)
66 |
67 | 호환성 없는 클래스등의 인터페이스를 다른 클래스가 이용할 수 있도록 변환해주는 패턴이다.
68 |
69 | 기존의 클래스를 이용하고 싶지만 인터페이스가 일치하지 않을때 이용한다.
70 |
71 |
72 |
73 | [브릿지 패턴]()
74 |
75 | 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성한 패턴이다.
76 |
77 | 기능과 구현을 두 개의 별도 클래스로 구현한다.
78 |
79 |
80 |
81 | [컴포짓 패턴]()
82 |
83 | 여러 객체를 가진 복합 객체와 단일 객체를 구분없이 다루고자할때 사용하는 패턴이다.
84 |
85 | 객체들을 트리구조로 구성하여 디렉터리 안에 디렉터리가 있듯이 복합 객체 안에 복합 객체가 포함되는 구조를 구현할 수 있다.
86 |
87 |
88 |
89 | [데코레이터 패턴]()
90 |
91 | 객체 간의 결합을 통해 능동적으로 기능들을 확장할 수 있는 패턴이다.
92 |
93 | 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현한다.
94 |
95 |
96 |
97 | [퍼사드 패턴]()
98 |
99 | 복잡한 서브 클래스들을 피해 더 상위에 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있도록 하는 패턴이다.
100 |
101 | 서브 클래스들 사이의 통합 인터페이스를 제공하는 wrapper 객체가 필요하다.
102 |
103 |
104 |
105 | [플라이웨이트 패턴]()
106 |
107 | 인스턴스가 필요할 때마다 매번 생성하는 것이 아니고 가능한 한 공유해서 사용함으로써 메모리 절약하는 패턴이다.
108 |
109 | 다수의 유사 객체를 생성하거나 조작할 때 유용하게 사용할 수 있다.
110 |
111 |
112 |
113 | [프록시 패턴]()
114 |
115 | 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴이다.
116 |
117 | 네트워크 연결, 메모리의 대용량 객체로의 접근 등에 주로 이용한다.
118 |
119 |
120 |
121 | ## 행위 패턴(Behavioral Pattern)
122 |
123 | > 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
124 | >
125 | > 한 객체가 혼자 수행할 수 없는 작업을 여러개의 객체로 어떻게 분배하는지, 또 그렇게 하면서도 객체 사이의 결합도를 최소화하는 것에 초점을 둔다.
126 |
127 |
128 |
129 | [스트래티지 패턴 (Strategy Pattern)](https://github.com/tesschung/DesignPattern/blob/master/09_Strategy_Pattern.md)
130 |
131 | 상위 클래스에서 골격을 정의하고, 하위 클래스에서 세부 처리를 구체화하는 구조의 패턴이다.
132 |
133 | 유사한 서브 클래스를 묶어 공통된 내용을 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해준다.
134 |
135 |
136 |
137 | [책임사슬 패턴]()
138 |
139 | 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴이다.
140 |
141 | 요청을 처리할 수 있는 각 객체들이 고리로 묶여있어 요청이 해결 될 때까지 고리를 따라 책임이 넘어간다.
142 |
143 |
144 |
145 | [템플릿 메소드 패턴 (Template Method Pattern)](https://github.com/tesschung/DesignPattern/blob/master/11_Template_Method_Pattern.md)
146 |
147 | 상위 클래스에서 골격을 정의하고, 하위 클래스에서 세부 처리를 구체화하는 구조의 패턴이다.
148 |
149 | 유사한 서브 클래스를 묶어 공통된 내용을 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해준다.
150 |
151 |
152 |
153 | [비지터 패턴]()
154 |
155 | 각 클래스등의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성하는 패턴이다.
156 |
157 | 분리된 처리 기능은 각 클래스를 방문하여 수행한다.
158 |
159 |
160 |
161 | [옵서버 패턴]()
162 |
163 | 한 객체의 상태가 변화하면 객체에 상속되어있는 다른 객체들에게 변화된 상태를 전달하는 패턴이다.
164 |
165 | 주로 분산된 시스템 간에 이벤트를 생성 및 발행하고, 이를 수신해야 할 때 이용한다.
166 |
167 |
168 |
169 | [중재자 패턴]()
170 |
171 | 수많은 객체들 간의 복잡한 상호작용을 캡슐화하여 객체로 정의하는 패턴이다.
172 |
173 | 객체 사이의 의존성을 줄여 결합도를 감소시킬 수 있다.
174 |
175 |
176 |
177 | [상태 패턴]()
178 |
179 | 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용하는 패턴이다.
180 |
181 | 객체 상태를 캡슐화하고 이를 참조하는 방식으로 처리한다.
182 |
183 |
184 |
185 | [메멘토 패턴]()
186 |
187 | 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 되돌릴 수 있는 기능을 제공하는 패턴이다.
188 |
189 |
190 |
191 | [커멘드 패턴]()
192 |
193 | 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴이다.
194 |
195 | 요청에 사용되는 각종 명령어들을 추상클래스와 구체클래스로 분리하여 단순화한다.
196 |
197 |
198 |
199 |
200 |
201 | # 관계 Relation
202 |
203 | ## 연관관계
204 |
205 | 클래스들이 개념상 서로 연결되었음을 나타낸다. 보통은 한 클래스가 다른 클래스에서 제공하는 기능을 사용하는 상황일때 표시한다.
206 |
207 | *실선이나 화살표로 표시
208 |
209 |
210 |
211 | ## 일반화관계
212 |
213 | 상속관계라고 한다.
214 |
215 | 한 클래스가 다른 클래스를 포함하는 상위 개념일 때 이를 IS-A라고 한다. UML에서는 일반화 관계로 모델링 한다.
216 |
217 | *속이 빈 화살표로 모델링한다.
218 |
219 |
220 |
221 | ## 집합관계
222 |
223 | > 합성관계 Composition
224 |
225 | ```java
226 | public class Computer {
227 | private MainBoard mb;
228 | private CPU cpu;
229 | private Memory memory;
230 | private PowerSupply powerSupply;
231 |
232 | public Computer() {
233 | this.mb = new MainBoard();
234 | this.cpu = new CPU();
235 | this.memory = new Memory();
236 | this.powerSupply = new PowerSupply();
237 | }
238 | }
239 | ```
240 |
241 | Computer 객체가 사라지면 부품을 구성하는 객체들도 사라진다.
242 |
243 | 생명주기를 함께한다.
244 |
245 | *채워진 마름모꼴로 표현
246 |
247 |
248 |
249 | > 집약관계 Aggregation
250 |
251 | ```java
252 | public class Computer {
253 | private MainBoard mb;
254 | private CPU cpu;
255 | private Memory memory;
256 | private PowerSupply powerSupply;
257 |
258 | public Computer(MainBoard mb, CPU cpu, Memory memory, PowerSupply powerSupply) {
259 | this.mb = mb;
260 | this.cpu = cpu;
261 | this.memory = memory;
262 | this.powerSupply = powerSupply;
263 | }
264 | }
265 | ```
266 |
267 | 전체 객체와 부분 객체의 생명 주기가 다르다.
268 |
269 | 부분 객체의 여러 전체 객체가 공유할 수 있다.
270 |
271 | 코드에서 확인 되듯, Computer 객체가 사라져도 부품 객체는 사라지지 않는다. 외부에서 이들 객체에 대한 참조만 받아 사용하기 때문이다.
272 | *빈 마름모꼴로 표현
273 |
274 |
275 |
276 | ## 의존관계
277 |
278 | 짧은 시간동안 이용하는 관계에 적합
279 |
280 | 연관관계와 같이 한 클래스가 다른 클래스에서 제공하는 기능을 사용할 때를 나타낸다. 차이점은 두 클래스의 관계가 한 메서드를 실행하는 동안 같은, 매우 짧은 시간만 유지된다.
281 |
282 | *점선 화살표로 표현
283 |
284 |
285 |
286 | ## 실체화관계
287 |
288 | 책임(어떤 객체가 해야하는 일, 할 수 있는 일)
289 |
290 | 책임들의 집합인 인터페이스와 이 책임들을 실제로 실현한 클래스들 사이의 관계를 나타낸다.
291 |
292 | *빈 삼각형으로 표시, 점선으로 표현
293 |
294 |
--------------------------------------------------------------------------------
/images/image-20200606094534489.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/images/image-20200606094534489.png
--------------------------------------------------------------------------------
/images/image-20200619211247976.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/images/image-20200619211247976.png
--------------------------------------------------------------------------------
/images/image-20200619224840069.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/images/image-20200619224840069.png
--------------------------------------------------------------------------------
/images/image-20200621204841037.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tesschung/DesignPattern/db4a7aee46775db2477b4572f76abbd35236a5f6/images/image-20200621204841037.png
--------------------------------------------------------------------------------