반응형
생성 패턴
- 객체를 성성하는 것과 관련된 패턴
- 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화 하고, 코드의 유연성을 높여준다.
- Factory Method
- Singleton
- Prototype
- Builder
- Abstract Factory
- Chaining
구조패턴
- 프로그램 내의 자료구조나 인터페이스 구조 등 프로그램 구조를 설계하는데 활용 될 수 있는 패턴
- 클래스, 객체들의 구성을 통해서 더 큰 구조를 만들 수 있게 해준다.
- 큰 규모의 시스템에서는 많은 클래스들이 서로 의존성을 가지게 되는데. 이런 복잡한 구조를 개발 하기 쉽게 만들어주고, 유지보수하기 쉽게 만들어 준다.
- Adapter
- Composite
- Bridge
- Decorator
- Facade
- Flyweight
- Proxy
행위 패턴
- 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것으로, 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 제공한다.
- 행위 패턴은 행위 관련 패턴을 사용하여 독립적으로 일을 처리하고자 할 때 사용한다.
- Template Method
- Interpreter
- Iterator
- Observer
- Strategy
- Visitor
- Chain of responsibility
- Command
- Mediator
- State
- Memento
Singleton Pattern
- 어떠한 클래스(객체)가 유일하게 1개만 존재 할 때 사용
- 서로 자원을 공유 할 때 사용
- 예로 들면 프린터가 해당되며, 프로그래밍에서는 TCP Socket 통신에서 서버와 연결된 connect 객체에 주로 사용
SocketClient.java
public class SocketClient {
private static SocketClient socketClient = null;
private SocketClient(){
}
public static SocketClient getInstance(){
if(socketClient == null){
socketClient = new SocketClient();
}
return socketClient;
}
public void connect(){
System.out.println("Connect");
}
}
AClass.java
public class AClass {
private SocketClient socketClient;
public AClass(){
this.socketClient = SocketClient.getInstance();
}
public SocketClient getSocketClient(){
return this.socketClient;
}
}
DemoApplication.java
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args)
{
AClass aClass = new AClass();
SocketClient aClient = aClass.getSocketClient();
}
}
Adapter Pattern
- 실생활에서는 110v를 220v로 변경해주거나, 반대로 해주는 변환기를 예로 들 수 있다.
- 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용 할 수 있도록 한다.
- SOLID중에서 개방폐쇄 원칙(OCP)을 따른다.
Electrionic110v.java
public interface Electronic110v {
void powerOn();
}
Electronic220v.java
public interface Electronic220v {
void connect();
}
HairDryer.java
public class HairDryer implements Electronic110v{
@Override
public void powerOn(){
System.out.println("헤어 드라이기 110v on");
}
}
Airconditioner.java
public class Airconditioner implements Electronic220v {
@Override
public void connect(){
System.out.println("에어컨 220v on");
}
}
SocketAdapter.java
public class SocketAdapter implements Electronic110v{
private Electronic220v electronic220v;
public SocketAdapter(Electronic220v electronic220v)
{
this.electronic220v = electronic220v;
}
@Override
public void powerOn(){
electronic220v.connect();
}
}
DemoApplication.java
import com.example.demo.adapter.*;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args)
{
HairDryer hairDryer = new HairDryer();
connect(hairDryer);
Airconditioner airconditioner = new Airconditioner();
Electronic110v adapter = new SocketAdapter(airconditioner);
connect(adapter);
}
public static void connect(Electronic110v electronic110v){
electronic110v.powerOn();
}
}
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 디자인 패턴 - Decorator (0) | 2022.08.03 |
---|---|
[JAVA] 디자인 패턴 - Proxy (0) | 2022.08.03 |
[JAVA] 객체지향 설계 5원칙 SOLID (0) | 2022.08.02 |
[JAVA] Spring Boot 프로젝트 생성 & DevTools 적용 (0) | 2022.08.02 |
[JAVA] 인텔리제이 To - do List_컨트롤러 구현 (0) | 2022.08.01 |
댓글