목록Java/디자인패턴 (7)
오답노트
전략 패턴 유사한 행위들을 캡슐화하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경하여, 유연하게 확장하는 패턴이다. 개방폐쇄 원칙과 의존 역전 원칙을 따른다. 예제 클래스 public interface EncodingStrategy { String encode(String text); } public class Encoder { private EncodingStrategy encodingStrategy; public void setEncodingStrategy(EncodingStrategy encodingStrategy) { this.encodingStrategy = encodingStrategy; } public String getMessage(String msg){ retu..
파사드 패턴 파사드는 건물의 앞쪽 정면이라는 뜻을 가진다. 여러 개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존관계가 있을 때, 중간에 파사드라는 객체를 두고, 여기서 제공하는 interface만을 활용하여 기능을 사용하는 방식이다. 패턴 적용 전 클래스 public class Ftp { private String host; private int port; private String path; public Ftp(String host, int port, String path){ this.host = host; this.port = port; this.path = path; } public void connect(){ System.out.println("FTP HOST : " + host + "..
옵저버 패턴 옵저버 패턴은 변화가 일어 났을 때, 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것이다. 많이 보이는 곳은 event listener에서 해당 패턴을 사용하고 있다. 클래스 package observer; public class Button { private String name; private IButtonListener buttonListener; public Button(String name){ this.name = name; } public void click(String message){ buttonListener.clickEvent(message); } public void addListener(IButtonListener iButtonListener){ this.butt..
프록시 패턴 최초에 인스턴스를 캐싱해 놓고 그 이후에 다시 호출 될 때, 캐싱된 인스턴스를 사용해 시간을 절약하는 패턴이다. Class public interface IBrowser { public Html show(); } public class BrowserProxy implements IBrowser{ private String url; private Html html; public BrowserProxy(String url){ this.url = url; } @Override public Html show() { if(html == null){ this.html = new Html(url); System.out.println("BrowserProxy loading html from : " + ur..
어댑터 패턴 서로 다른 두 클래스를 연결하는 클래스를 만들어 주는 패턴이다. A 인터페이스를 사용하는 클래스 (이하 A 클래스)에 B 인터페이스를 사용하는 클래스(이하 B 클래스)를 연결하고 싶다면 A 인터페이스를 사용하는 클래스를 만들고 생성자 인자로 B 인터페이스를 받는 클래스를 만들어 A 인터페이스를 Override하여 사용하면된다. 인터페이스 public interface Electronic110V { void poewrOn(); } public interface Electronic220V { void connect(); } 인터페이스를 사용하는 클래스 public class AirConditioner implements Electronic220V{ @Override public void conn..
Decorator Pattern 자바의 입출력 스트림은 모두 데코레이터 패턴으로 만들어졌다. 상속보다 유연한 구현방식을 가지고 있다. 1. abstract 객체를 상속 받는 자식 객체 2. 1번의 abstract 객체를 상속 받는 abstract 자식 객체
static 변수 static 변수는 데이터 영역에 위치하게 되어 어디서든 호출 가능한 변수이다. 이를 이용해 디자인 패턴 중 하나인 싱글턴 패턴을 사용할 수 있다. 싱글턴 싱글턴 패턴은 단 한개의 인스턴스를 생성하여 사용하는 것을 의미한다. 논리적인 예를 들면 기업 같은 경우 절대 중복일 수 없다. (삼성전자가 두 개가 아닌 것처럼) 이때 기업을 싱글턴으로 만들어야 한다. 이 때 인스턴스를 static 변수로 만들어 전역으로 사용할 수 있도록 해야한다. 하지만 일반적으로 인스턴스를 생성하는 것처럼 사용할 수 없다. 아래 코드를 보며 싱글턴 패턴을 살펴보자. public class CarFactory { private static CarFactory instance = new CarFactory(); p..