디자인 모델 빠 른 학습 (2) 추상 공장 모델

3693 단어
추상 적 인 공장 모델 (Abstract Factory Pattern) 은 하나의 슈퍼 공장 을 둘러싸 고 다른 공장 을 만 드 는 것 이다.이 슈퍼 공장 은 다른 공장 의 공장 이 라 고도 부른다.이런 유형의 디자인 모델 은 창설 형 모델 에 속 하 는데, 이것 은 창설 대상 을 만 드 는 가장 좋 은 방법 을 제공한다.
데모 에 직접 올 라 갑 니 다. 먼저 코드 를 입력 하고 나중에 소개 합 니 다.
만약 이전에 공장 모델 을 보지 못 했다 면 아래 의 타 임 머 신 으로 전송 하 세 요. 사상 적 기반 뿐만 아니 라 주로 변화 하 는 과정 을 알 아야 합 니 다.디자인 모델 빠 른 학습 (1) 공장 모델
1. 인터페이스 Shape 작성
Shape.java
public interface Shape {
   void draw();
}

2. 인터페이스 Shape 의 구현 클래스 Rectangle 작성
Rectangle.java
/**
 * Created by Fant.J.
 */
public class Rectangle implements Shape {
    @Override
    public void describe() {
        System.out.println("      ");
    }
}

3. 인터페이스 Shape 의 구현 클래스 Circle 작성
Circle .java
/**
 * Created by Fant.J.
 */
public class Circle implements Shape {
    @Override
    public void describe() {
        System.out.println("     ");
    }
}

4. 인터페이스 컬러 작성
Color .java
/**
 * Created by Fant.J.
 */
public interface Color {
    void fill();
}

5. 인터페이스 Color 의 구현 클래스 Red 작성
Red .java
/**
 * Created by Fant.J.
 */
public class Red implements Color {
    @Override
    public void fill() {
        System.out.println("     ");
    }
}

6. 인터페이스 Color 의 구현 클래스 Green 작성
Green .java
/**
 * Created by Fant.J.
 */
public class Green implements Color {
    @Override
    public void fill() {
        System.out.println("     ");
    }
}

7. Color 와 Shape 대상 에 추상 클래스 를 만들어 공장 을 가 져 옵 니 다.
/**
 * Created by Fant.J.
 */
public abstract class AbstractFactory {
    abstract Color getColor(String color);
    abstract  T getShape(Class clazz) ;
}


8. AbstractFactory 공장 클래스 를 확장 (계승) 하여 실체 클래스 Shape 의 대상 을 생 성 할 수 있 도록 합 니 다.
ShapeFactory .java
/**
 * Created by Fant.J.
 */
public class ShapeFactory extends AbstractFactory {
    @Override
    public Color getColor(String color) {
        return null;
    }


    @Override
     T getShape(Class clazz) {
        T obj = null;
        try {
            obj = clazz.getDeclaredConstructor().newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        return obj;
    }
}

9. AbstractFactory 공장 클래스 를 확장 (계승) 하여 실체 클래스 Color 의 대상 을 생 성 할 수 있 도록 합 니 다. 약
10. 공장 생 성 기 를 만 들 고 Shape 나 Color 공장 을 만 드 는 데 사용 합 니 다.
FactoryProducer .java
/**
 * Created by Fant.J.
 */
public class FactoryProducer {
    public static  AbstractFactory getFactory(String choice){
        if(choice.equalsIgnoreCase("SHAPE")){
            return new ShapeFactory();
        } else if(choice.equalsIgnoreCase("COLOR")){
            //       ,           ColorFactory
            return null;
        }
        return null;
    }
}

11. 테스트
/**
 * Created by Fant.J.
 */
public class Test {
    public static void main(String[] args) {
        //         ,                 
        AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
        shapeFactory.getShape(Circle.class).describe();
    }
}

총결산
이 실현 은 매우 복잡 해 보인다. 나 는 대략적인 사고방식 을 정리 했다. 우선, 우 리 는 공장 생 성 기 를 통 해 추상 적 인 공장 류 를 생 성 한 다음 에 추상 적 인 공장 류 의 확장 류 (하위) 방법 을 호출 할 수 있다.

좋은 웹페이지 즐겨찾기