디자인 모델 (3) - 공장 모델 (공장 방법 모델 + 추상 공장 모델)
공장 모델: 구체 적 인 것 은 두 가지 로 나 눌 수 있 는데 그것 이 바로 공장 방법 모델, 추상 적 인 공장 모델 이다.
공장 방법 모델: 창설 대상 의 인 터 페 이 스 를 정 의 했 지만 하위 클래스 에서 실례 화 할 클래스 가 어느 것 인지 결정 하고 공장 방법 은 실례 화 를 하위 클래스 로 미 루 었 다.
디자인 원칙: 후진 원칙 에 의존 해 야 한다 (구체 적 인 유형 에 의존 하 는 것 이 아니 라 추상 에 의존 해 야 한다).
후진 원칙 에 의존 하 는 몇 가지 건 의 를 준수 합 니 다.
1. 변 수 는 구체 적 인 인용 을 가 져 서 는 안 됩 니 다. (new 를 사용 하면 구체 적 인 인용 을 가지 고 공장 으로 바 꾸 어 이런 방법 을 피 할 수 있 습 니 다)
2. 유형 을 구체 적 인 유형 에서 파생 시 키 지 마 세 요 (구체 적 인 유형 에서 파생 되면 구체 적 인 유형 에 의존 할 것 입 니 다. 추상 적 인 [인터페이스 또는 추상 적 인 유형] 에서 파생 하 십시오)
3. 기본 클래스 에서 실 현 된 방법 을 덮어 쓰 지 마 십시오. (기본 클래스 가 실 현 된 방법 을 덮어 쓰 면 기본 클래스 는 진정 으로 계승 에 적합 한 추상 이 아 닙 니 다. 기본 클래스 에서 실 현 된 방법 은 모든 하위 클래스 에서 공유 해 야 합 니 다)
비교적 좋 은 해석: http://blog.csdn.net/wyxhd2008/article/details/5597975
구체 적 인 공장 방법 모델 코드:
/**
* Created by Administrator on 2017/12/9.
*
*/
public abstract class Pizza {
protected String name;
protected String dough;
protected void prepare(){
System.out.println("prepare");
}
protected void cut(){
System.out.println("cut");
}
protected void box(){
System.out.println("box");
}
}
/**
* Created by Administrator on 2017/12/9.
*
*/
public abstract class PizzaStore {
public Pizza orderPizza(String type) {
Pizza pizza = createPizza(type); //
pizza.prepare();
pizza.cut();
pizza.box();
return pizza;
}
/**
* Pizza
* */
protected abstract Pizza createPizza(String type);
}
/**
* Created by Administrator on 2017/12/9.
* pizza
*/
public class CheesetPizza extends Pizza {
public CheesetPizza() {
this.name = "chesse";
this.dough = "doughchesse";
}
@Override
public String toString() {
return "CheesetPizza " + this.name + ", " + this.dough;
}
}
/**
* Created by Administrator on 2017/12/9.
* pizzaStore
*/
public class NYStylePizzaStore extends PizzaStore {
@Override
protected Pizza createPizza(String type) {
Pizza pizza = null;
if("Cheese".equals(type)){ // pizza
pizza = new CheesetPizza();
}/*else if("clam".equals(type)){
// Pizza
}*/
return pizza;
}
}
/**
* Created by Administrator on 2017/12/9.
*/
public class TestFactoryMethod {
public static void main(String[] args) {
PizzaStore pizzaStore = new NYStylePizzaStore();
Pizza pizza = pizzaStore.orderPizza("Cheese");
System.out.println(pizza);
}
}
추상 적 인 공장 모델: 인 터 페 이 스 를 제공 하여 관련 되 거나 의존 대상 의 가족 을 만 드 는 데 사용 되 며 구체 적 인 유형 을 명확 하 게 지정 할 필요 가 없습니다.
/**
* Created by Administrator on 2017/12/9.
*/
public abstract class Pizza {
protected Dough dough;
protected abstract void prepare();
protected void cut(){
System.out.println("cut");
}
protected void box(){
System.out.println("box");
}
}
public abstract class PizzaStore {
public Pizza orderPizza(String type) {
Pizza pizza = createPizza(type); //
pizza.prepare();
pizza.cut();
pizza.box();
return pizza;
}
/**
* Pizza
* */
protected abstract Pizza createPizza(String type);
}
/**
* Created by Administrator on 2017/12/9.
* pizza
*/
public interface PizzaIngredientFactory {
Dough createDough();
}
/**
* Created by Administrator on 2017/12/9.
* pizza [ , Dough]
*/
public class Dough {
private String dough;
public String getDough() {
return dough;
}
public void setDough(String dough) {
this.dough = dough;
}
}
/**
* Created by Administrator on 2017/12/9.
*/
public class CheesePizaa extends Pizza{
private PizzaIngredientFactory pizzaIngredientFactory ;
public CheesePizaa(PizzaIngredientFactory pizzaIngredientFactory) {
this.pizzaIngredientFactory = pizzaIngredientFactory;
}
@Override
protected void prepare() {
this.dough = pizzaIngredientFactory.createDough();//
}
}
/**
* Created by Administrator on 2017/12/9.
*/
public class NYPizzaStore extends PizzaStore {
@Override
protected Pizza createPizza(String type) {
Pizza pizza = null;
PizzaIngredientFactory pizzaIngredientFactory = new NYPizzaIngredientFactory();
if("Cheese".equals(type)){
pizza = new CheesePizaa(pizzaIngredientFactory);
}/*else if("clam".equals(type)){
}*/
return pizza;
}
}
/**
* Created by Administrator on 2017/12/9.
*/
public class NYPizzaIngredientFactory implements PizzaIngredientFactory{
@Override
public Dough createDough() {
return new Dough();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.