단순 공장 모델을 약해하다.

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);

좋은 웹페이지 즐겨찾기