Семь принципов серии Design Patterns - принцип открытия и закрытия

Самый важный принцип самых основных: другие принципы практики, для того, чтобы следовать принципу открытия и закрытия

① , чтобы открыть для расширения (провайдера), закрытый для модификации (потребитель)

② Когда программное обеспечение необходимо изменить, насколько это возможно , достигается за счет расширения, а не модификации существующего кода для реализации

③ другой принцип программирования следовать принципу открытия и закрытия

Я понимаю, вроде как ориентированный интерфейс программирования

Для классического рисования графики каштаны:

. 1  общественного  класс OCP {
 2  
3.      Общественный  статического  недействительного основной (String [] арг) {
 4.          // используется , чтобы увидеть проблемы 
5.          GraphicEditor graphicEditor = новый новый GraphicEditor ();
 6 .          GraphicEditor.drawShape ( новый новый прямоугольник ());
 7 .          GraphicEditor. drawShape ( новый новый круг ());
 8 .          graphicEditor.drawShape ( новый новый треугольник ());
 . 9      }
 10  
. 11  }
 12  
13  // класс это чертеж для потребителя [] 
14  класса{GraphicEditor
 15      // приема объектов Shape, в зависимости от типа и затем, чтобы сделать различные графические элементы 
16      общественности  пустоту drawShape (Форма S) {
 . 17          ПЧ (. S.m_type == 1 )
 18              DrawRectangle (S);
 . 19          остальное  ЕСЛИ (s.m_type 2 == )
 20              DrawCircle (S);
 21          остальное  ЕСЛИ . (s.m_type == 3 )
 22              drawTriangle (S);
 23      }
 24  
25      // нарисовать прямоугольник 
26      общественных  пустот DrawRectangle (форма Р & л) {
 27          System.out.println ( «нарисовать прямоугольник»);
 28      }
 29  
30      // нарисовать круг 
31      общественных  пустот DrawCircle (форма Р & л) {
 32          System.out.println ( "нарисовать круг" );
 33      }
 34      
35      // нарисовать треугольник 
36      общественных  пустот drawTriangle (форма R & Lt) {
 37 [         System.out.println ( "рисунок треугольник" );
 38      }
 39  }
 40  
41  // с фигурой класс, базовый класс 
42  класс с фигурой {
 43      INT m_type;
 44  }
 45  
46  классПрямоугольник простирается Shape {
 47      прямоугольник () {
 48          супер .m_type = 1 ;
49      }
 50  }
 51  
52  класс Круг простирается Форма {
 53      круг () {
 54          супер .m_type = 2 ;
55      }
 56  }
 57  
58  // 新增画三角形
59  класс треугольник расширяет Shape {
 60      Треугольник () {
 61          супер .m_type = 3 ;
62      }
63 }

Если добавить такой треугольник, исходный класс нужно будет изменить.

После улучшения

1  общественного  класс OCP {
 2  
3      общественных  статический  недействительный основной (String [] арг) {
 4          // 使用看看存在的问题
5          GraphicEditor graphicEditor = новый GraphicEditor ();
6          graphicEditor.drawShape ( новый прямоугольник ());
7          graphicEditor.drawShape ( новый круг ());
8          graphicEditor.drawShape ( новый треугольник ());
9          graphicEditor.drawShape ( новый OtherGraphic ());
10      }
 11  
12  }
13  
14  // Этот класс представляет собой чертеж для [потребителя] 
15  класса GraphicEditor {
 16      // приема метод объекта формы вызывает дро 
. 17      общественности  пустоту drawShape (Форма С) {
 18          s.draw ();
 . 19      }
 20  
21      
22  }
 23  
24  // класс формы, базовый класс 
25  абстрактный  класс с фигурой {
 26      INT m_type;
 27      
28      общественного  абстрактного  недействительными Draw (); // абстрактный метод 
29  }
 30  
31  классПрямоугольник простирается Shape {
 32      прямоугольник () {
 33          супер .m_type = 1 ;
34      }
 35  
36      @Override
 37      общественных  пустоты дро () {
 38          // TODO автоматической генерации метод заглушка 
39          System.out.println ( "绘制矩形" );
40      }
 41  }
 42  
43  класс Круг простирается Форма {
 44      круг () {
 45          супер .m_type = 2 ;
46      }
 47     @Override
 48      общественных  пустоты дро () {
 49          // TODO автоматической генерации метод заглушка 
50          System.out.println ( "绘制圆形" );
51      }
 52  }
 53  
54  // 新增画三角形
55  класс треугольник расширяет Shape {
 56      треугольника () {
 57          супер .m_type = 3 ;
58      }
 59      @Override
 60      общественных  пустоты дро () {
 61          // TODO автоматической генерации метод заглушка 
62         System.out.println ( "рисунок треугольника" );
 63      }
 64  }
 65  
66  // добавить графический 
67  класс OtherGraphic расширений с формы {
 68      OtherGraphic () {
 69          Супер .m_type = 4. ;
 70      }
 71  
72      @Override
 73      общественные  аннулируются ничья () {
 74          // TODO Auto-Сформирован метод заглушка 
75          System.out.println ( "рисование других графических" );
 76      }
 77 }

На самом деле, я все еще хочу подчеркнуть слово, это на самом деле ориентированный интерфейс / абстрактное программирование

На самом деле, я все еще хочу подчеркнуть слово, это на самом деле ориентированный интерфейс / абстрактное программирование

На самом деле, я все еще хочу подчеркнуть слово, это на самом деле ориентированный интерфейс / абстрактное программирование

 

рекомендация

отwww.cnblogs.com/zyzblogs/p/11274432.html
рекомендация