Abstract Factory 모드 – Java 설계 모드 (3)

9043 단어 Java 디자인 모드

추상 공장 모델 소개


추상 공장 모드(Abstract Factory Pattern): 하나의 슈퍼 공장을 둘러싸고 다른 공장을 만든다.이 슈퍼 공장은 다른 공장의 공장이라고도 부른다.
분류: 작성 모드.추상적인 공장 모델에서 인터페이스는 관련 대상을 만드는 공장을 책임지고 현식으로 분류를 지정할 필요가 없다.생성된 모든 공장은 공장 모델에 따라 대상을 제공할 수 있다.의도: 구체적인 클래스를 지정하지 않고 관련되거나 서로 의존하는 일련의 인터페이스를 제공합니다.
주요 해결: 주로 인터페이스 선택의 문제를 해결한다.
언제 사용: 시스템의 제품은 한 제품족보다 많은데 시스템은 그 중의 한 제품족만 소비한다.
어떻게 해결: 한 제품족에서 여러 제품을 정의합니다.

역할 구조


추상 제품 종류: 각종 제품의 추상 인터페이스나 추상 종류;구체적인 제품 유형: 추상 제품 인터페이스(추상 유형)의 실현 유형;추상 공장류: 핵심, 추상 제품 생성에 사용되는 인터페이스 정의;구체적인 공장류: 추상적인 공장류를 계승하여 하나의 구체적인 제품을 생성한다(주의는 한 조, 이것은 매우 중요하다).

구체적 실현


1단계: 추상 제품 클래스를 작성합니다.
/**
 *  
 * @author Administrator
 *
 */
public interface IFruit {
    void printName();
}

/**
 *  
 * @author Administrator
 *
 */
public interface IVeggie {
    void printName();
}

2단계: 특정 제품 클래스를 작성합니다.
/**
 *  。 
 * @author Administrator
 *
 */
public class NorthernFruit implements IFruit {
    private String name;

    public NorthernFruit(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public void printName() {
        System.out.println(this.name);
    }
}

/**
 *  。 
 * @author Administrator
 *
 */
public class SouthernFruit implements IFruit {
    private String name;

    public SouthernFruit(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public void printName() {
        System.out.println(this.name);
    }
}

/**
 *  。 
 * @author Administrator
 *
 */
public class NorthernVeggie implements IVeggie {
    private String name;

    public NorthernVeggie(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public void printName() {
        System.out.println(this.name);
    }
}

/**
 *  。 
 * @author Administrator
 *
 */
public class SouthernVeggie implements IVeggie {
    private String name;

    public SouthernVeggie(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public void printName() {
        System.out.println(this.name);
    }
}

3단계: 추상적인 공장 종류를 창설한다.
/**
 *  。 , 
 * @author Administrator
 *
 */
public interface IAbstractFactory {
    public IFruit createFruit(String name);
    public IVeggie createVeggie(String name);
}

4단계: 특정 플랜트 클래스를 생성합니다.
/**
 *  。 
 * @author Administrator
 *
 */
public class NorthernFactory implements IAbstractFactory {

    @Override
    public IFruit createFruit(String name) {
        return new NorthernFruit(name);
    }

    @Override
    public IVeggie createVeggie(String name) {
        return new NorthernVeggie(name);
    }
}

/**
 *  。 
 * @author Administrator
 *
 */
public class SouthernFactory implements IAbstractFactory {

    @Override
    public IFruit createFruit(String name) {
        return new SouthernFruit(name);
    }

    @Override
    public IVeggie createVeggie(String name) {
        return new SouthernVeggie(name);
    }
}

5단계: 테스트.
public class Main {
    public static void main(String[] args) {
        IAbstractFactory northernFactory = new NorthernFactory();
        IFruit fruit1 = northernFactory.createFruit(" 1");
        IVeggie veggie1 = northernFactory.createVeggie(" 1");
        fruit1.printName();
        veggie1.printName();

        IAbstractFactory southernFactory = new SouthernFactory();
        IFruit fruit2 = southernFactory.createFruit(" 2");
        IVeggie veggie2 = southernFactory.createVeggie(" 2");
        fruit2.printName();
        veggie2.printName();
    }
}

6단계: 출력을 검증합니다.
 1
 1
 2
 2

좋은 웹페이지 즐겨찾기