Самый важный принцип самых основных: другие принципы практики, для того, чтобы следовать принципу открытия и закрытия
① , чтобы открыть для расширения (провайдера), закрытый для модификации (потребитель)
② Когда программное обеспечение необходимо изменить, насколько это возможно , достигается за счет расширения, а не модификации существующего кода для реализации
③ другой принцип программирования следовать принципу открытия и закрытия
Я понимаю, вроде как ориентированный интерфейс программирования
Для классического рисования графики каштаны:
. 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 }
На самом деле, я все еще хочу подчеркнуть слово, это на самом деле ориентированный интерфейс / абстрактное программирование
На самом деле, я все еще хочу подчеркнуть слово, это на самом деле ориентированный интерфейс / абстрактное программирование
На самом деле, я все еще хочу подчеркнуть слово, это на самом деле ориентированный интерфейс / абстрактное программирование