본문 바로가기
프로그래밍/디자인 패턴(프로그래밍)

[Design Pattern]Abstract Factory Pattern이란?

by 그래도동 2019. 1. 17.
728x90
반응형

Abstract Factory Pattern이란

 추상 팩토리 패턴은 많은 수의 연관된 서브 클래스를 특정 그룹으로 묶어 한번에 교체할 수 있도록 만든 패턴.

 예로 안드로이드 버전에 따라 지원하는 기능이 다르다면 추상 팩토리 패턴을 사용해 업데이트하면 버전별 기능을 통합적으로 변경 할 수 있다.

 factory method pattern과 유사하지만 fatory를 좀 더 생산적으로 만들 수 있다.

 기존 팩토리 패턴에서와 달리 if-else 구문을 없애고 sub class마다 factory class를 가지게한다.

 Abstract Factory에서는 input factory class를 통해 해당 sub class를 반환한다.


MachineA, MachineB


public interface MachieA

{

    public void process();

}

public class MachineA1 implements MachineA

{

    @Override

    public void process()

    {

        System.out.println("execute MachineA1");

    }

}

public class MachineA2 implements MachineA 

{

    @Override

    public void process()

    {

        System.out.println("execute MachineA2");

    }

}



public interface MachieB

{

    public void process();

}

public class MachineB1 implements MachineB

{

    @Override

    public void process()

    {

        System.out.println("execute MachineB1");

    }

}

public class MachineB2 implements MachineB 

{

    @Override

    public void process()

    {

        System.out.println("execute MachineB2");

    }

}




MachineFactory


public interface MachieFactory

{

    public MachineA getMachineA();

    public MachineB getMachineB();

}

public class MachieFactoryA implements MachieFactory

{

    @Override

    public MachineA getMachineA()

    {

        return new MachineA1();

    }

    @Override

    public MachineB getMachineB()

    {

        return new MachineB1();

    }

}

public class MachieFactoryB implements MachieFactory

{


    @Override

    public MachineA getMachineA()

    {

        return new MachineA2();

    }

    @Override

    public MachineB getMachineB()

    {

        return new MachineB2();

    }

}




Main Program


public class FactoryMain

{

    public static void main(String[] args)

    {

        MachineFactory machineFactoryA = new MachineFactory();

        machineFactoryA.getMachineA().process();
        machineFactoryA.getMachineB().process();


        MachineFactory 
machineFactoryB = new 
MachineFactory();       

        machineFactoryB.getMachineA().process();
        machineFactoryB.getMachineB().process();

    }

}


Reference

 https://jdm.kr/blog/192


728x90
반응형

댓글