단순 공장 모델을 약해하다.
                                            
 13375 단어  단순 공장 모델
                    
처음에 머릿속에 떠오르는 것은 다음과 같다.
 1 package com.edu.shnu.patternstudy;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Caluate {
 6     public static void main(String[] args) {
 7         try{
 8             System.out.print("     m:");
 9             Scanner sc=new Scanner(System.in);
10             int m=sc.nextInt();
11             System.out.print("       (+、-、*、/):");
12             String oper=sc.next();
13             System.out.print("     n:");
14             int n=sc.nextInt();
15             int result=0;
16             switch(oper)
17             {
18             case "+":
19                 result=m+n;
20                 break;
21             case "-":
22                 result=m-n;
23                 break;
24             case "*":
25                 result=m*n;
26                 break;
27             case "/":
28                 if(n!=0)
29                     result=m/n;
30                 else
31                     System.out.println("      !");
32                 break;
33             }
34             System.out.println("   :"+result);
35         }catch(Exception e){
36             e.printStackTrace();
37         }
38     }
39 }나중에 큰소리 디자인 모델에 대한 책이 생각났다. (강력 추천) 대상 언어라면 봉인, 계승, 다태를 해야 한다.
 1 class OperationAdd extends Operation
 2 {
 3     Operation oper=new Operation();
 4     @Override
 5     public int getResult(){
 6         int result=oper.getM()+oper.getN();
 7         return result;
 8     }
 9 }
10 
11 class OperationSub extends Operation
12 {
13     Operation oper=new Operation();
14     @Override
15     public int getResult(){
16         int result=oper.getM()-oper.getN();
17         return result;
18     }
19 }
20 
21 class OperationMul extends Operation
22 {
23     Operation oper=new Operation();
24     @Override
25     public int getResult(){
26         int result=oper.getM()*oper.getN();
27         return result;
28     }
29 }
30 
31 class OperationDiv extends Operation
32 {
33     Operation oper=new Operation();
34     @Override
35     public int getResult(){
36         if(oper.getN()==0)
37             System.out.println("      !");
38         int result=oper.getM()/oper.getN();
39         return result;
40     }
41 }도대체 누구를 실례화해야 하는지, 장래에 새로운 실례화 대상을 늘릴 수 있는지, 변화가 쉬우므로 하나의 단독 유형으로 실례를 창조하는 과정, 즉 공장을 고려해야 한다.
 1 public class OperationFactory {
 2     public static Operation createOperation(String operate){
 3         Operation oper=null;
 4         switch(operate){
 5         case "+":
 6             oper=new OperationAdd();
 7             break;
 8         case "-":
 9             oper=new OperationSub();
10             break;
11         case "*":
12             oper=new OperationMul();
13             break;
14         case "/":
15             oper=new OperationDiv();
16             break;
17         }
18         return oper;
19     }
20 }main 메서드:
1   Operation oper;
2    oper=OperationFactory.createOperation("+");
3    oper.setM(4);
4    oper.setN(2);