디자인패턴
-
구조패턴 : Composite 패턴디자인패턴 2013. 1. 25. 09:30
분류 : 구조패턴(Structural Patterns) 정의 :객체의 그룹들이 하나의 인스턴스처럼 다뤄지도록 함.트리 구조에서 부분-전체 구조를 나타냄. 용도 :객체간의 구조과 개별 객체간의 차이를 두지 않아야 할때.트리구조형태의 데이터를 다룰때 리프노드(leaf-node)와 가지(branch)를 구분해야 할때 사용. Component모든 컴포넌트에 대한 추상화. (여러 객체의 조합도 가능)구성(composition) 내부의 객체들에 대한 인터페이스를 선언.재귀구조에서 컴포넌트의 부모에 접근하기위한 인터페이스를 정의하고, 적절하게 구현함. Leaf구성(composition)에서 리프(leaf) 객체를 나타냄.모든 컴포넌트 메소드들을 구현함. Composite컴포넌트의 구조를 보여줌.(컴포넌트는 자식을 가..
-
구조패턴 : Bridge 패턴디자인패턴 2013. 1. 23. 10:00
분류 : 구조패턴(Structural Patterns) 정의 :추상화를 구현에서 분리해서 서로 독립적으로 만드는 패턴. 용도 : Abstraction : 추상 인터페이스를 정의. Implementor 참조를 관리 RefinedAbstraction : Abstraction에서 정의된 인터페이스를 확장함. Implementor : 구현클래스를 위한 인터페이스를 정의함. ConcreteImplementor : Implementor 인터페이스를 구현함. 소스 // Implementor public interface DrawingAPI { public void drawCircle(double x, double y, double radius); } //ConcreteImplementor 첫번째 public clas..
-
구조패턴 : Adapter (Wrapper) 패턴디자인패턴 2013. 1. 21. 10:00
분류 : 구조패턴(Structural Patterns) 정의 :클래스에 대한 인터페이스를 호환되는 다른 인터페이스로 변환하는 패턴 용도 :클라이언트에 인터페이스를 제공함으로써 클라이언트가 호환되지 않는 원본 인터페이스를 이용할수 있게 함. Adapter 패턴에는 2가지 종류가 있음. 객체(Object) Adapter 패턴-어댑터(adapter)가 변환하려고 하는 클래스의 인스턴스를 가지고 있음. 클래스(Class) Adapter 패턴-어댑터(adapter)가 여러개의 다형성 인터페이스(polymorphic interfaces)를 사용함. 여러개의 인터페이스를 상속하거나 구현해서 어댑터가 생성됨. 소스 public class Adaptee { public String getString(){ return "..
-
생성패턴 : Singleton 패턴디자인패턴 2013. 1. 16. 10:00
분류 : 생성패턴(Creational Patterns) 정의 :클래스의 인스턴스가 하나만 존재하도록 제한하는 패턴 용도 :Abstract Factory, Builder, Prototype 패턴을 구현할때 Singleton을 사용할 수 있음.상태를 나타내는 객체에서 사용됨.불필요한 변수에의해 전체 네임스페이스가 오염되는 것을 방지. 코드 : Singleton 구현의 여러가지 방법들. //Lazy initialization public class SingletonLazy { private static volatile SingletonLazy instance = null; private SingletonLazy() { } public static SingletonLazy getInstance() { if (i..
-
생성패턴 : Prototype 패턴디자인패턴 2013. 1. 15. 09:30
분류 : 생성패턴(Creational Patterns) 정의 : 새 객체를 생성하기위해 복사되는 프로토 타입형의 인스턴스를 통해서 객체를 생성하는 패턴. 용도 : 클라이언트 어플리케이션에서 객체의 생성자를 서브클래스화 하는 것을 방지 새로운 객체 생성 비용을 줄임. 코드 /** * Prototype class */ public interface Prototype { void setX(int x); void printX(); int getX(); } public class PrototypeImpl implements Prototype, Cloneable { private int x; /** * 생성자 */ public PrototypeImpl(int x){ setX(x); } @Override public..
-
생성패턴 : Factory Method 패턴디자인패턴 2013. 1. 10. 10:00
분류 : 생성패턴(Creational Patterns) 다른 이름 : Virtual Constructor 정의 :객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스에서 이루어지도록 서브클래스에게 인스턴스 생성의 책임을 미룸. 용도 :생성할 객체 타입을 예측할 수 없을 때생성할 객체를 기술하는 책임을 서브클래스에 정의하고자 하는 경우객체 생성의 책임을 서브클래스에게 위임시키고 서브클래스에 대한 정보를 은닉하고자 하는 경우객체의 생성이 코드의 중요한 부분없이 재사용되는 것을 방지생성된 객체의 생명주기 관리가 애플리케이션안에서 일정한 행동을 보장하기위해 중앙집중해서 관리해야 할 경우.프레임워크나 툴킷등에 많이 쓰임. 코드 public interface Cu..
-
생성패턴 : Builder 패턴디자인패턴 2012. 12. 28. 09:30
분류 : 생성패턴(Creational Patterns) 정의 :복잡한 객체의 생성을 표현과 분리함으로써 같은 생성절차를 가지면서 다른 표현들을 만들수 있게 함. 용도 :Builder 패턴은 복잡한 객체를 단계적으로 생성하는 것에 초점을 둠.Builder 패턴은 종종 Composite 패턴을 만듬. 구조 : Builder : 객체를 생성하기위한 추상 인터페이스Concrete Builder : Builder에 대한 구현을 제공. 다른 객체들을 생성할수 있는 객체임. 코드 : /** Product */ public class Pizza { private String dough = ""; private String sauce = ""; private String topping = ""; public void s..
-
생성패턴 : Abstract Factory 패턴디자인패턴 2012. 12. 18. 09:30
분류 : 생성패턴(Creational Patterns) 정의 :관련있거나 연관된 객체들의 집합을 상세한 스펙없이 생성하는 인터페이스를 제공하기 위함. 용도 :클라이언트 코드는 상세한 타입에 대해 모름. 관련된 헤더파일이나 클래스 선언을 include할 필요가 없음. 클라이언트 코드는 abstract 타입만 다룸. 상세한 타입의 객체들은 팩토리에 의헤 생성되지만, 클라이언트 코드는 추상 인터페이스를 통해서만 해당 객체들에 접근함.새로운 상세 타입을 추가하는 것은 다른 팩토리를 사용하기위해서는 클라이언트 코드를 수정하는 것으로 완료됨. 수정은 파일하나당 하나의 라인만 수정하면 됨.(다른 팩토리는 다른 상세타입의 객체들을 생성하지만 여전히 같은 abstract타입의 포인터를 반환함.) 새로운 타입을 인스턴스화..