2019 - 02 - 15 - 디자인 모델 공장 모델

3136 단어
공장 모델 은 세 가지 로 나 뉜 다.
1. 간단 한 공장 특징: 한 공장 류 는 들 어 오 는 파 라 메 트릭 에 따라 그 제품 류 의 인 스 턴 스 를 만 들 기로 결정 하고 제품 을 추가 하려 면 공장 류 를 수정 해 야 한다. 이 디자인 은 개폐 원칙 을 파괴 했다.
public interface Fruit {
}

public class Apple implements Fruit {
}

public class Orange implements Fruit {
}

public class SimpleFactory {
    public static Fruit createFruit(String name){
        if("apple".equals(name)){
            return new Apple();
        }else if("orange".equals(name)){
            return new Orange();
        }else{
            throw new RuntimeException("unknown fruit name");
        }
    }
}

public class T {
    public static void main(String[] args) {
        Fruit apple = SimpleFactory.createFruit("apple");
    }
}

2. 공장 방법의 특징: 제품 을 만 드 는 데 사용 되 는 인 터 페 이 스 를 정의 하고 하위 클래스 에서 어떤 제품 을 생산 할 지 결정 한다.모든 제품 은 하나의 창설자 에 대응 하고 모든 창설자 가 독립 적 으로 해당 하 는 제품 대상 을 만 드 는 것 을 책임 지 며 단일 한 직책 원칙 에 매우 부합된다.그러나 한 제품 을 늘 릴 때마다 대응 하 는 공장 을 늘 려 시스템 의 복잡성 을 증가 시 켜 야 한다.
public interface Fruit {
}

public class Apple implements Fruit {
}

public class Orange implements Fruit {
}

public interface FruitFactory {
    Fruit createFruit();
}

public class AppleFactory implements FruitFactory {
    @Override
    public Fruit createFruit() {
        return new Apple();
    }
}

public class OrangeFactory implements FruitFactory {
    @Override
    public Fruit createFruit() {
        return new Orange();
    }
}

public class T {
    public static void main(String[] args) {
        FruitFactory appleFactory = new AppleFactory();
        Fruit apple = appleFactory.createFruit();
        FruitFactory orangeFactory = new OrangeFactory();
        Fruit orange = orangeFactory.createFruit();
    }
}

3. 추상 적 인 공장 특징: 제품 족 을 만 드 는 인 터 페 이 스 를 제공 하고 모든 하위 클래스 는 일련의 관련 제품 을 생산 할 수 있다.관련 또는 의존 대상 의 가족 을 만 들 고 구체 적 인 유형 을 명확 하 게 지정 할 필요 가 없 지만 제품 을 추가 할 때 공장 인터페이스 와 하위 클래스 를 수정 하여 개폐 원칙 을 파괴 해 야 한다.
public interface Staple {
}


public class Flour implements Staple {
}


public class Rice implements Staple {
}


public interface Dish {
}


public class Cabbage implements Dish {
}


public class Radish implements Dish{
}


public interface FoodFactory {
    Staple createStaple();
    Dish createDish();
}


public class NorthFood implements FoodFactory {
    @Override
    public Staple createStaple() {
        return new Flour();
    }

    @Override
    public Dish createDish() {
        return new Radish();
    }
}


public class SouthFood implements FoodFactory {
    @Override
    public Staple createStaple() {
        return new Rice();
    }

    @Override
    public Dish createDish() {
        return new Cabbage();
    }
}


public class T {
    public static void main(String[] args) {
        FoodFactory southFoodFactory = new SouthFood();
        Dish cabbage = southFoodFactory.createDish();
        Staple rice = southFoodFactory.createStaple();

        FoodFactory norFoodFactory = new NorthFood();
        Dish rasidh = southFoodFactory.createDish();
        Staple flour = southFoodFactory.createStaple();
    }
}

좋은 웹페이지 즐겨찾기