ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 디자인패턴
    개발 2015. 1. 19. 00:00

    템플릿 메소드 패턴 

    부모클래스에 기본적인 공통의 로직을 만들고 다르게 사용하여하는 메소드를 추상화하여 서브클래스에서 구현하여 사용하는 방법이다. 

     

    public abstract class VendingMachine {
        public void process()
        {
            this.insertCoin();
            this.makeProduct();
            this.returnProduct();
            this.returnCoin();
        }
    
        protected abstract void makeProduct();
        
        private void insertCoin()
        {
            System.out.println("돈을 받았습니다.");
        }
    
        private void returnProduct()
        {
            System.out.println("상품을 반환합니다");
        }
        
        private void returnCoin() {
            System.out.println("잔돈을 건네줍니다.");
        }
    }

     

    public class CoffeeVendingMachine extends VendingMachine {
        @Override
        protected void makeProduct() {
            System.out.println("커피를 만듭니다.");
        }
    }
    public class CokeVendingMachine extends VendingMachine {
        @Override
        protected void makeProduct() {
            System.out.println("콜라를 만듭니다");
        }
    }
    public class Main {
        public static void main(String[] args) {
            VendingMachine coffeeVendingMachine = new CoffeeVendingMachine();
            VendingMachine cokeVendingMachine = new CokeVendingMachine();
            coffeeVendingMachine.process();
            cokeVendingMachine.process();
        }
    }
    

    팩토리 메소드 패턴

     

    팩토리 클래스를 생성하여 객체 생성을 팩토리 클래스에게 위임한다.

    public class VendingMachineFactory {
        public static VendingMachine create(MachineType machineType) {
            switch (machineType) {
                case Coke: {
                    return new CokeVendingMachine();
                }
                case Coffee: {
                    return new CoffeeVendingMachine();
                }
            }
            throw new IllegalArgumentException();
        }
    
        public enum MachineType {
            Coke,
            Coffee
        }
    }
    public class Main {
        public static void main(String[] args) {
            VendingMachineFactory.create(VendingMachineFactory.MachineType.Coffee).process();
            VendingMachineFactory.create(VendingMachineFactory.MachineType.Coke).process();
        }
    }
    

     

Designed by Tistory.