자바 디자인 모델 학습 의 공장 모델 (디자인 모델 을 더 쉽게 이해)

간단 한 공장 모델 간단 한 공장 모델 의 디자인 방안: 피자 대상 의 종 류 를 정의 하고 생 성 대상 을 밀봉 하 는 코드 간단 한 공장 모델: 생 성 대상 의 종 류 를 정의 하 며 이런 종류 로 실례 화 대상 을 밀봉 하 는 행위
package com.java.jikexueyuan.pizzastore.simplefactory;

import com.java.jikexueyuan.pizzastore.pizza.CheesePizza;
import com.java.jikexueyuan.pizzastore.pizza.GreekPizza;
import com.java.jikexueyuan.pizzastore.pizza.PepperPizza;
import com.java.jikexueyuan.pizzastore.pizza.Pizza;

/**
 *      ,        ,
 *        ,            ,             
 */
public class SimplePizzaFactory {

    public Pizza CreatePizza(String ordertype) {
        Pizza pizza = null;

        if (ordertype.equals("cheese")) {
            pizza = new CheesePizza();
        } else if (ordertype.equals("greek")) {
            pizza = new GreekPizza();
        } else if (ordertype.equals("pepper")) {
            pizza = new PepperPizza();
        }
        return pizza;

    }

}

package com.java.jikexueyuan.pizzastore.simplefactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import com.java.jikexueyuan.pizzastore.pizza.CheesePizza;
import com.java.jikexueyuan.pizzastore.pizza.GreekPizza;
import com.java.jikexueyuan.pizzastore.pizza.PepperPizza;
import com.java.jikexueyuan.pizzastore.pizza.Pizza;

/**
 *      ,        ,
 *        ,            ,     ,
 *                  ,           ,          
 *            :
 *               ,         ,       ,       
 */
public class OrderPizza {
   SimplePizzaFactory mSimplePizzaFactory;

   public OrderPizza(SimplePizzaFactory mSimplePizzaFactory) {

      setFactory(mSimplePizzaFactory);
   }

   public void setFactory(SimplePizzaFactory mSimplePizzaFactory) {
      Pizza pizza = null;
      String ordertype;

      this.mSimplePizzaFactory = mSimplePizzaFactory;

      do {
         ordertype = gettype();
         pizza = mSimplePizzaFactory.CreatePizza(ordertype);
         if (pizza != null) {
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
         }

      } while (true);

   }

   private String gettype() {
      try {
         BufferedReader strin = new BufferedReader(new InputStreamReader(
               System.in));
         System.out.println("input pizza type:");
         String str = strin.readLine();

         return str;
      } catch (IOException e) {
         e.printStackTrace();
         return "";
      }
   }

}

package com.java.jikexueyuan.pizzastore.simplefactory;



public class PizzaStroe {
   public static void main(String[] args) {
      SimplePizzaFactory mSimplePizzaFactory;
      OrderPizza mOrderPizza;
      mOrderPizza=new    OrderPizza(new SimplePizzaFactory());
      
   }

   

}

공장 방법 모델 디자인 방안: 피자 프로젝트 의 피자 대상 을 예화 하 는 기능 을 추상 적 인 방법 으로 추상 화하 여 서로 다른 가맹 점 에서 구체 적 으로 기능 을 실현 한다.공장 방법 모델: 창설 대상 의 추상 적 인 방법 을 정 의 했 고 하위 클래스 에서 실례 화 할 클래스 를 결정 했다.공장 방법 모델 은 대상 의 실례 화 를 하위 클래스 로 미 루 었 다.
package com.java.jikexueyuan.pizzastore.method;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import com.java.jikexueyuan.pizzastore.pizza.CheesePizza;
import com.java.jikexueyuan.pizzastore.pizza.ChinesePizza;
import com.java.jikexueyuan.pizzastore.pizza.GreekPizza;
import com.java.jikexueyuan.pizzastore.pizza.PepperPizza;
import com.java.jikexueyuan.pizzastore.pizza.Pizza;

/**
 *       :               ,                
 *             。
 */
public abstract class OrderPizza {

   public OrderPizza() {
      Pizza pizza = null;
      String ordertype;

      do {
         ordertype = gettype();
         pizza = createPizza(ordertype);

         pizza.prepare();
         pizza.bake();
         pizza.cut();
         pizza.box();
      } while (true);
   }

   abstract Pizza createPizza(String ordertype);

   private String gettype() {
      try {
         BufferedReader strin = new BufferedReader(new InputStreamReader(
               System.in));
         System.out.println("input pizza type:");
         String str = strin.readLine();

         return str;
      } catch (IOException e) {
         e.printStackTrace();
         return "";
      }
   }

}

package com.java.jikexueyuan.pizzastore.method;

import com.java.jikexueyuan.pizzastore.pizza.CheesePizza;
import com.java.jikexueyuan.pizzastore.pizza.GreekPizza;
import com.java.jikexueyuan.pizzastore.pizza.NYCheesePizza;
import com.java.jikexueyuan.pizzastore.pizza.NYPepperPizza;
import com.java.jikexueyuan.pizzastore.pizza.PepperPizza;
import com.java.jikexueyuan.pizzastore.pizza.Pizza;

public class NYOrderPizza extends OrderPizza {

   @Override
   Pizza createPizza(String ordertype) {
      Pizza pizza = null;

      if (ordertype.equals("cheese")) {
         pizza = new NYCheesePizza();
      } else if (ordertype.equals("pepper")) {
         pizza = new NYPepperPizza();
      }
      return pizza;

   }

}
package com.java.jikexueyuan.pizzastore.method;



public class PizzaStroe {
   public static void main(String[] args) {
      
      OrderPizza mOrderPizza;
      mOrderPizza=new    NYOrderPizza();
      
   }

   

}

추상 적 인 공장 모델: 구체 적 인 종 류 를 명확 하 게 지정 하지 않 고 관련 되 거나 의존 관계 가 있 는 대상 족 을 만 드 는 데 사용 되 는 인 터 페 이 스 를 정의 합 니 다.
package com.java.jikexueyuan.pizzastore.absfactory;

import com.java.jikexueyuan.pizzastore.pizza.Pizza;


public interface AbsFactory {
   public Pizza CreatePizza(String ordertype) ;
}

package com.java.jikexueyuan.pizzastore.absfactory;

import com.java.jikexueyuan.pizzastore.pizza.LDCheesePizza;
import com.java.jikexueyuan.pizzastore.pizza.LDPepperPizza;
import com.java.jikexueyuan.pizzastore.pizza.Pizza;

public class LDFactory implements AbsFactory {

   @Override
   public Pizza CreatePizza(String ordertype) {
      Pizza pizza = null;

      if (ordertype.equals("cheese")) {
         pizza = new LDCheesePizza();
      } else if (ordertype.equals("pepper")) {
         pizza = new LDPepperPizza();
      }
      return pizza;

   }

}

package com.java.jikexueyuan.pizzastore.absfactory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import com.java.jikexueyuan.pizzastore.pizza.CheesePizza;
import com.java.jikexueyuan.pizzastore.pizza.GreekPizza;
import com.java.jikexueyuan.pizzastore.pizza.PepperPizza;
import com.java.jikexueyuan.pizzastore.pizza.Pizza;
/**
 *       :          
 *               ,                 ,
 *              。
 */
public class OrderPizza {
   AbsFactory mFactory;

   public OrderPizza(AbsFactory mFactory) {

      setFactory(mFactory);
   }

   public void setFactory(AbsFactory mFactory) {
      Pizza pizza = null;
      String ordertype;

      this.mFactory = mFactory;

      do {
         ordertype = gettype();
         pizza = mFactory.CreatePizza(ordertype);
         if (pizza != null) {
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
         }

      } while (true);

   }

   private String gettype() {
      try {
         BufferedReader strin = new BufferedReader(new InputStreamReader(
               System.in));
         System.out.println("input pizza type:");
         String str = strin.readLine();

         return str;
      } catch (IOException e) {
         e.printStackTrace();
         return "";
      }
   }

}

package com.java.jikexueyuan.pizzastore.absfactory;



public class PizzaStroe {
   public static void main(String[] args) {
      
      OrderPizza mOrderPizza;
      mOrderPizza=new    OrderPizza(new LDFactory());
      
   }

   

}

공장 모델 의 관건: 1. 공장 모델 의 의미 2. 세 가지 공장 모델

좋은 웹페이지 즐겨찾기