목록DesignPattern (디자인패턴) (5)
HaPpY hApPy
음,,,대략적인 이해는 가는데 전체 이해가 안간다. 일단 C# 소스 짜여져있는거 보면서 옮기면서 했는데, 나중에 좀더 세밀하게 봐야겠다. 예제에서는 피자 가계를 예를들고있다, 피자 가계마다(NewYork, Chicago) 만드는 피자 종류는 같다.(CheesePizza, ClamPizza) 하지만 들어가는 재료(Dough, Sauce, Cheese, veggies ,Pepperoni, Clam) 와 요리하는 방법(ThickCrustDough, ThinCrustDough 과 NaNaCheese, ReggianoCheese)은 다를수있다. 유심히 봐야할 부분은 Pizza클래스의 Prepare()함수가 어떻게 구현되는지, PizzaStore 클래스의 CreatePizza() 함수를 ChicagoPizzaSto..
[2013.10.26 수정]일단 팩토리 패턴은 크게 팩토리 패턴, 팩토리 메소드 패턴, 추상 팩토리 패턴 (뒤로 갈수록 복잡하다)Factory Pattern 은 너무 단순해서 그냥 거의 리팩토링 수준으로 패턴이라 하기 그렇다,단순히 객체를 생성하는 부분을 한곳에 모아서 관리를 용이하게 한다. class CPizzaStore { private CSimplePizzaFactory m_factory; public CPizzaStore(CSimplePizzaFactory factory) { m_factory = factory; } public CPizza Order(string type) { CPizza pizza; pizza = m_factory.CreatePizza(type); pizza.Prepare();..
이 패턴을 이용한 예제는 두가지가 있었다, 한가지는 유명한 커피샵의 커피 주문,(눈여겨 볼부분은, 커피 종류 와, 사이즈에 따른 가격, 그리고 추가되는 샷이나 휘핑 같은걸 어떻게 가격을 매기는지) 다른 한가지는 게임에서 데미지 입었을때,(데미지를 받앗을때 보호막이 있는지 없는지, 보호막이 있을경우는 데미자가 100%, 보호막이 없을경우 데미지 50%, 마치 스타 프로토스 같이) Head First Design Pattern 에는 커피 주문을 예로 되어있었다. 내가 까먹을경우"첨가물과, 구상 구성요소의 차이점을 기억할것!""첨가물은 여러번 들어갈수 있지만, 구상 구성요소는 한번만 들어간다!!" 먼저 커피 사이즈 Enum BeverageSize이다. namespace DecoratorPattern { pub..
옵저버 패턴, [2013.10.26] 수정 오랜만에 다시 패턴 공부하다가 Push 방법은 있는데 Pull 방법이 없어서 추가!Push 방법을 먼저 이해하고 Program.cs 파일 읽어보면서 보면 이해 하기 쉽다.[신문사가 컨텐츠를 구독자에게 Push]Push 방법은 반 강제적으로 받아야되고(이것도 물론 처리하면되지만, 리소스 낭비가 있을수있다.) [구독자가 구매자에게 컨텐츠를 요구] (요구하기전에 업데이트된 정보가 있는지 물어볼수도있다.)Pull 방법은 1. 업데이트된 정보가 있는지 체크, 2. 업데이트 내용을 받음 으로 처리하면 된다. 신문사와 구독자 로 이해하면 쉬움 신문사는 Subject 구독자는 Observer 신문사에 새로운 소식이 들어오면 Observer로 등록된 구독자들에게 알려줌, Hea..
디자인 패턴을 공부하면서 그냥 이해만 하고 넘어가는것보다, 한번쯤 작성해 봐야할꺼 같아서 마침 Head First Design Pattern 책에는 자바로 설명이 나와있어서 간단하게 C#으로 변경했다. Visual Studio 2010 버전으로 작성했다. 간단하게 이해한 내용은 IFlyBehavior인터페이스 interface IFlyBehavior { void Fly(); } IQuackBehavior인터페이스 interface IQuackBehavior { void Quack(); } IFlyBehavior를 상속받는 클래스들 class FlyNoWay : IFlyBehavior { public void Fly() { Console.WriteLine("I can't Fly!!! T_T"); } } c..