ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 디자인 패턴 - 2
    Book/스프링 입문을 위한 자바 객체지향의 원리와 이해 2022. 1. 4. 16:19

    Template Method Pattern(템플릿 메서드 패턴) => 의존 역전 원칙(DIP)

     

    상위 클래스의 견본(템플릿) 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴

    견본(템플릿)을 제공하는 class에서 템플릿 메서드를 하위 클레스에게 구현을 강제하는 추상 메서드 + 선택적으로 오버라이딩할 수 있는 (hook)메서드를 구현한다. 

     

    public abstract class Parent {
    //템플릿 메서드
        public void templateMethod(){
        	System.out.println("blablabla");
            메서드A();
            메서드B();
        }
        //추상 메서드
        abstract void 메서드A();
        
        //hook 메서드
        void 메서드B(){
            
        }
    }
    public class Child1 extends Parent{
    
        @Override
        void 메서드A() {
    
        }
    
        @Override
        void 메서드B(){
    
        }
    }

    동일한 부분을 한 메서드로 묶어서 상위 클래스에 놓고 달라지는 부분만 하위 클래스로 분할 하고 싶을때 오버라이드를 통해서 구현

     


    Factory Method Pattern(팩터리 메서드 패턴)

    오버라이드된 메서드가 객체를 반환하는 패턴

     

    여기서 공장(factory)은 객체를 생성하는 곳이다. 결국 팩터리 메서드는 객체를 생성 반환하는 메서드를 말한다. 여기서 패턴이 붙으면 하위 클래스에서 팩터리 메서드를 오버라이딩 해서 객체를 반환하게 하는 것을 의미..

     

    //Animal.java
    
    public abstract class Animal {
    //추상 팩터리 메서드
        abstract AnimalToy getToy();
    }
    //AnimalToy.java
    
    public abstract class AnimalToy {
    //팩터리 메서드가 생성할 객체의 상위 클래스
        abstract void identify();
    }
    //Dog.java
    
    public class Dog extends Animal{
    //추상 팩터리 메서드 오버라이딩
        @Override
        AnimalToy getToy() {
            return new DogToy();
        }
    }
    //DogToy.java
    
    public class DogToy extends AnimalToy{
    //팩터리 메서드가 생성할 객체
        @Override
        void identify() {
    
        }
    }
    //Cat.java
    
    public class Cat extends Animal{
        @Override
        AnimalToy getToy() {
            return new CatToy();
        }
    }
    //CatToy.java
    
    public class CatToy extends AnimalToy{
        @Override
        void identify() {
    
        }
    }
    //Client.java
    
    public class Client {
        public static void main(String[] args) {
        //팩터리 메서드를 보유한 객체들 생성
            Animal 초코 = new Dog();
            Animal 키티 = new Cat();
        //팩터리 메서드가 반환하는 객체들
            AnimalToy 초코볼 = 초코.getToy();
            AnimalToy 키티볼 = 키티.getToy();
        //팩터리 메서드가 반환한 객체들을 사용
            초코볼.identify();
            키티볼.identify();
        }
    }

     


    Strategy Pattern(전략 패턴)

    클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴
    • 전략 메서드를 가진 전략 객체
    • 전략 객체를 사요하는 컨텍스트(전략 객체의 사용자/소비자)
    • 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자)

    클라이언트는 다양한 전략 중 하나를 선택해 생성한 후 컨텍스트에 주입한다.


    Template Callback Pattern(템플릿 콜백 패턴)

    전략을 익명 내부 클래스로 구현한 전략 패턴

    전략 패턴과 모든것이 동일한데 전략을 익명 내부 클래스로 정의해서 사용한다는 특징이 있다.

    댓글

Designed by Tistory.