2019 - 02 - 15 - 디자인 모델 공장 모델
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();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.