해당 클래스의 인스턴스(해당 클래스가 메모리에 실제로 할당되는 것)가 하나만 만들어지고, 하나의 인스턴스만 관리하는 것이 바로 singleton pattern이에요.
pseudo code.
public class Singleton { private static Singleton Instance; private Singleton(){} public static Singleton getInstance() { if (Instance == null) { Instance = new Singleton(); } return Instance; } }
Factory pattern

(출처 - 위키피디아)
팩토리 메소드 패턴이란
객체를 생성하기 위한 인터페이스를 정의하나, 실질적으로 어떤 클래스를 생성할지는 하위 클래스에서 결정하는 것을 의미해요.
즉 구체 클래스 정의와 인스턴스 생성이 서로 분리되어 있는 것으로, 자식 클래스가 필요에 따라 필요한 인스턴스를 생성 가능한 것이라고 보면 되겠어요.
이는 상위코드에 구체 클래스를 감추기 위한 용도로도 많이 활용됩니다.
pseudo code(wikipedia의 C#코드를 참조해 java문법으로 바꾸었어요.)
public abstract class Pizza { public abstract java.math.BigDecimal GetPrice(); public enum PizzaType { HamMushroom, Deluxe, Seafood } public static Pizza PizzaFactory(PizzaType pizzaType) { switch (pizzaType) { case HamMushroom: return new HamAndMushroomPizza(); case Deluxe: return new DeluxePizza(); case Seafood: return new SeafoodPizza(); } throw new UnsupportedOperationException("The pizza type " + pizzaType.toString() + " is not recognized."); } } public class HamAndMushroomPizza extends Pizza { private java.math.BigDecimal price = new java.math.BigDecimal(8.5); @Override public java.math.BigDecimal GetPrice() { return price; } } public class DeluxePizza extends Pizza { private java.math.BigDecimal price = new java.math.BigDecimal(10.5); @Override public java.math.BigDecimal GetPrice() { return price; } } public class SeafoodPizza extends Pizza { private java.math.BigDecimal price = new java.math.BigDecimal(11.5); @Override public java.math.BigDecimal GetPrice() { return price; } } // Somewhere in the code //... System.out.println(Pizza.PizzaFactory(Pizza.PizzaType.Seafood).GetPrice().toString("C2")); // $11.50 //...
즉 위의 코드를 보면 상위 abstract 클래스인 pizza 가 있고, 이를 상속받은 하위클래스 HamMushroom, Deluxe, Seafood가 pizza instance를 생성하는 것을 볼 수가 있어요.
Strategy pattern
스트래티지 패턴이란, 알고리즘군을 정의하고 각각을 캡슐화해서 교환하여 사용할 수 있도록 한 것을 의미해요. 스트래티지 패턴을 사용하면, 알고리즘을 사용하는 클래스가 독립적으로 알고리즘을 변경할 수 있지요.
일반적으로는, 상위 클래스에 메소드를 생성하는 게 아니라 별도의 인터페이스를 형성하고 이를 implement해주는 방식으로 알고리즘을 하위 class에 추가해 구현하는 방식을 사용하지요.
pseudo code는 http://hyeonstorage.tistory.com/146 에 잘 나와 있네요.
댓글 없음:
댓글 쓰기
글에 대한 의문점이나 요청점, 남기고 싶은 댓글이 있으시면 남겨 주세요. 단 악성 및 스팸성 댓글일 경우 삭제 및 차단될 수 있습니다.
모든 댓글은 검토 후 게시됩니다.