디자인 모델 학습 의 공장 모델

4938 단어
디자인 모델 의 공장 모델
단순 공장
간단 한 공장 은 엄 밀 히 말 하면 23 가지 디자인 모델 의 하나 에 속 하지 않 고 대상 을 만 드 는 과정 을 방법 에 밀봉 할 뿐이다.
다음은 간단 한 공장 의 구체 적 인 실례 이다
Animal 인 터 페 이 스 를 만 들 고 공공 방법 을 정의 합 니 다.
public interface IAnimal {
    void eat();
}

Animal 구현 클래스 만 들 기
Bird.class
public class Bird implements IAnimal{
    @Override
    public void eat(){
        System.out.println("bird eating...");
    }
}

Cat.class
public class Cat implements IAnimal{
    @Override
    public void eat(){
        System.out.println("cat eating...");
    }
}

공장 클래스 AnimalFactory 만 들 기
public class AnimalFactory {
    public static IAnimal instance(Class> clazz){
        if(clazz == null) return null;
        return instance(clazz.getName());
    }
    private static IAnimal instance(String name){
        if(name == null || "".equals(name)) return null;
        try {
            return (IAnimal)Class.forName(name).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

테스트 사례
public class Main {
    public static void main(String[] args) {
        IAnimal animal = AnimalFactory.instance(Cat.class);
        animal.eat();
    }
}

출력 결과
cat eating...

2 공장 방법
우리 가 대상 을 만 드 는 전후 에 서로 다른 업무 논 리 를 실행 해 야 할 때 상기 코드 는 큰 변동 이 필요 하 다.
공장 방법 모델 은 모든 대상 에 대응 하 는 공장 을 만 들 고 모든 대상 의 공장 설립 은 서로 독립 적 이다.
공공 공장 만 들 기 Animal Factory
public interface IAnimalFactory {
    IAnimal instance();
}

창설 대상 공장 실현
BirdFactory.class
public class BirdFactory implements IAnimalFactory{
    @Override
    public IAnimal instance() {
        return new Bird();
    }
}

CatFactory.class
public class CatFactory implements IAnimalFactory{
    @Override
    public IAnimal instance() {
        return new Cat();
    }
}

위 와 같이 대응 하 는 instance 방법 에 해당 하 는 처리 논 리 를 추가 할 수 있 습 니 다.
테스트 사례
public class Main {
    public static void main(String[] args) {
        IAnimalFactory animalFactory = new BirdFactory();
        IAnimal animal = animalFactory.instance();
        animal.eat();
    }
}

출력 결과
bird eating...

3 추상 공장
하나의 제품 을 추가 할 때마다 공장 방법 모델 은 하나의 공장 을 만들어 야 하 는데 오래 되 고 오래 되 는 것 과 같은 것 이 매우 많다.
공장 방법 모델 도 구체 적 인 행위 가 있 는 제품 을 구축 할 수 없다.
추상 공장 의 이념 은 추상 적 이 고 공장 을 가공 하여 최종 적 으로 구체 적 인 행 위 를 가 진 제품 을 생 성 하 는 것 이다.
생 성 행위
public interface ICreate {}
public interface IDead {}
public interface ILive {}

구체 적 인 행동 이 있 는 제품 만 들 기
bird
public class BirdCreate implements ICreate{
    public BirdCreate(){
        System.out.println("bird create...");
    }
}

public class BirdDead implements IDead{
    public BirdDead(){
        System.out.println("bird dead...");
    }
}

public class BirdLive implements ILive{
    public BirdLive(){
        System.out.println("bird live...");
    }
}

cat
public class CatCreate implements ICreate{
    public CatCreate(){
        System.out.println("cat create...");
    }
}

public class CatDead implements IDead{
    public CatDead(){
        System.out.println("cat dead...");
    }
}

public class CatLive implements ILive{
    public CatLive(){
        System.out.println("cat live...");
    }
}

공장 을 창건 하 다
public interface IAnimalFactory {
    //      
    ICreate create();
    //    
    ILive live();
    //    
    IDead dead();
}

마지막 으로 구체 적 인 제품 공장 을 실현 하 다.
BirdFactory
public class BirdFactory implements IAnimalFactory {
    @Override
    public ICreate create() {
        return new BirdCreate();
    }
    @Override
    public ILive live() {
        return new BirdLive();
    }
    @Override
    public IDead dead() {
        return new BirdDead();
    }
}

CatFactory
public class CatFactory implements IAnimalFactory {
    @Override
    public ICreate create() {
        return new CatCreate();
    }
    @Override
    public ILive live() {
        return new CatLive();
    }
    @Override
    public IDead dead() {
        return new CatDead();
    }
}

테스트 사례
public class Main {
    public static void main(String[] args) {
        IAnimalFactory animalFactory = new CatFactory();
        animalFactory.create();
        animalFactory.live();
        animalFactory.dead();
    }
}

출력 결과
cat create...
cat live...
cat dead...

추상 적 인 공장 모델 은 개폐 원칙 에 부합 되 지 않 고 행 위 를 증가 할 때 모든 구체 적 인 실현 은 해당 하 는 행 위 를 증가 해 야 한다.
ps: 이상 인 터 페 이 스 는 추상 클래스 로 대체 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기