├── $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 | 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 | ![image-20200402143300826](12_Factory_Method_Pattern.assets/image-20200402143300826.png) 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 | ![image-20200420191016043](21_Chain_of_Responsibility.assets/image-20200420191016043.png) 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 | ![image-20200421144251830](22_Facade.assets/image-20200421144251830.png) 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 | ![image-20200424224740588]($images/image-20200424224740588.png) 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 | ![image-20200619211247976](images/image-20200619211247976.png) 12 | 13 | abstract Mediator - 객체를 담는 그릇(list, map ...) 14 | 15 | abstract Colleague(객체) - 어떤 Mediator인지 필드로 가지고 있음 16 | 17 | 18 | 19 | ![image-20200619224840069](images/image-20200619224840069.png) 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 | ![image-20200424003341569]($images/image-20200424003341569.png) 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 | ![image-20200606094534489](images/image-20200606094534489.png) 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 | ![image-20200621204841037](images/image-20200621204841037.png) 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 | 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 | 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 | 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 --------------------------------------------------------------------------------