단순 공장 모델을 약해하다.
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);