// 패턴 적용

// 2. 변하는 것을 '클래스화' 하자.

// -- Strategy pattern (전략패턴)

// 2.1 인터페이스를 설계하자.


  1. interface IValidator {
  2.         boolean validate(char c);
  3. }
  4. class DigitOnlyValidator implements IValidator {
  5.  
  6.         @Override
  7.         public boolean validate(char c) {
  8.                 return Character.isDigit(c);
  9.         }
  10. }
  11. class AllPassValidator implements IValidator {
  12.  
  13.         @Override
  14.         public boolean validate(char c) {
  15.                 return true;
  16.         }
  17.        
  18. }
  19. class LineEdit2 {
  20.         private JFrame frame;
  21.         private StringBuilder builder = new StringBuilder();
  22.         private IValidator iValidator;
  23.        
  24.         public void setValidator(IValidator iv) {
  25.                 iValidator = iv;
  26.         }
  27.         public LineEdit2() {
  28.                 frame = new JFrame();
  29.                 frame.setSize(300200);
  30.                 frame.setTitle("EditBox");
  31.                 iValidator = new AllPassValidator(); //default
  32.                
  33.                 Container cp = frame.getContentPane();
  34.                 cp.setLayout(new FlowLayout());
  35.                
  36.                 final JLabel label = new JLabel("");
  37.                 cp.add(label);
  38.                
  39.                 frame.addKeyListener(new KeyListener() { //inner class
  40.                        
  41.                         @Override
  42.                         public void keyTyped(KeyEvent e) { //키를 입력했다. (Press + Release)
  43.                                 char c = e.getKeyChar();
  44.                                 System.out.println(c);
  45.                                 if(== '\n') {
  46.                                         builder = new StringBuilder();
  47.                                         label.setText("");
  48.                                 }
  49.                                 if(iValidator.validate(c)) {
  50.                                         builder.append(c);
  51.                                         label.setText(builder.toString());
  52.                                 }
  53.                         }
  54.                         @Override
  55.                         public void keyReleased(KeyEvent e) {} // 키를 뗐다.
  56.                         @Override
  57.                         public void keyPressed(KeyEvent e) {} // 키를 눌렀다.
  58.                 });
  59.                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 프로세스 종료시
  60.                
  61.         }
  62.         public boolean validate(char c) {
  63.                 return Character.isDigit(c);
  64.         }
  65.  
  66.         public void show() {
  67.                 frame.setVisible(true);
  68.  
  69.         }
  70. }
  71. public class Ex2 {
  72.        
  73.         public static void main(String...args) {       
  74.                 LineEdit2 lineEdit2 = new LineEdit2();
  75.                 lineEdit2.setValidator(new DigitOnlyValidator());
  76.                 lineEdit2.show();
  77.         }
  78. }


'java > design_pattern' 카테고리의 다른 글

Decorator Pattern  (0) 2014.06.27
Composite Pattern  (0) 2014.06.27
Template Method Pattern  (0) 2014.06.27
Adapter 패턴  (0) 2014.06.27
Java Singleton 선언하는법  (0) 2014.06.18

+ Recent posts