Мы часто сталкиваемся с этой ситуацией. С двумя готовыми классами между ними нет никакой связи, но теперь мы хотим использовать один из методов класса, а другой. Существует обходной путь, чтобы изменить их соответствующие интерфейсы, но это то, что мы меньше всего хотим увидеть. В настоящее время режим адаптера пригодится.
Режим адаптера также называется режим адаптера, который является одним из 23 режимов проектирования, предложенных GOF. Режим адаптера является одним из конструктивных режимов. Через режим адаптера можно изменить форму интерфейса существующих классов (или внешних классов).
Есть три способа к режиму адаптера, один - адаптер объекта, один - адаптер класса, а другой - адаптер интерфейса
Приведены следующие примеры:
1. Класс -адаптер
Классная диаграмма
открытый класс DrawRectangle {// Draw Square Public Void DrawRectangle (String MSG) {System.out.println ("Draw Rectangle:" + MSG); }} public interface idrawcircle {// рисовать интерфейс круговой интерфейс void draitcircle (); } / ** * Адаптер класса использует наследование объекта, которое представляет собой метод статического определения * @author Stone * */ public Class DrawAdapter4Class расширяет DrawRectangle реализует Idrawcircle {// может нарисовать квадрат и круг @override public void drawcircle () {system.out.println ("drawdapter4class: drawcircle"); }}2. Адаптер объекта
Классовая диаграмма:
/*** Адаптер объекта: способ использования комбинации объектов - это способ динамического объединения. * Может нарисовать квадратные и круги * @author Stone * Drawdapter - это адаптер, DrawRectangle принадлежит адаптеру и является адаптером. Адаптер будет адаптироваться к адаптеру и адаптеру (DrawCircle) * */ Public Class DrawAdapter4object реализует Idrawcircle {// может нарисовать квадрат и круги частной рисунки; public DrawAdapter4object (DrawRectangle DrawRectangle) {this.drawrectangle = drawRectangle; } @Override public void draitcircle () {System.out.println ("DrawAdapter4object: DrawCircle"); } public void drawRectangle (String msg) {drawRectangle.drawrectangle (msg); }} 3. Адаптер интерфейса
Классная диаграмма
/ * * Адаптер интерфейса: в интерфейсе есть абстрактные методы. Мы хотим реализовать только некоторые из них, но мы не хотим реализовать их все. * Итак, предоставьте пустую реализацию по умолчанию, а затем наследуйте от нее и переписывайте метод, который мы хотим реализовать */ public indraw {void draitcircle (); void drawRectangle (); } /** Реализация интерфейса адаптера интерфейса*/открытый класс defaultdrawadapter реализует Idraw {// реализация квадратных и кругов @Override public void drawCircle () {} @Override public void drawRectangle () {}} Общедоступный тест класса {public static void main (string [] args) {// адаптер объекта DrawDapter4object objadapter = new DrawAdapter4object (new DrawRectAngle ()); objadapter.drawcircle (); objadapter.drawrectangle ("в DrawAdapter4object"); System.out.println ("-------------------"); // класс адаптер DrawAdapter4Class clzadapter = new DrawAdapter4class (); clzadapter.drawcircle (); clzadapter.drawrectangle («в DrawAdapter4class»); System.out.println ("---------------------"); // Адаптер интерфейса myDrawadapter myDrawadapter = new MyDrawadapter (); mydrawadapter.drawcircle (); mydrawadapter.drawrectangle (); } статический класс myDrawadapter extends defaultDrawadapter {@Override public void draitcircle () {System.out.println ("DrawCircle в myDrawadapter"); }}}Печать
DrawDapter4object: DrawCircle Drait прямоугольник: в DrawAdapter4Object -------------- DrawAdapter4Class: DrawCircle Drait Rectangle: в DrawAdapter4Class -------------- DrawCircle в MyDraWadapter
Три функции режима адаптера:
1 Объект адаптера реализует исходный интерфейс
2 Объект адаптера объединяет объект, который реализует новый интерфейс (этот объект также не может реализовать интерфейс, это просто простой объект)
3. конкретный метод, в котором вызов к исходному методу интерфейса адаптера делегируется в экземпляр нового интерфейса
Некоторые люди думают, что примеры, объясняющие шаблон дизайна, слишком просты, и, кажется, так, но если вы действительно хотите использовать его в разработке проектов, он действительно не сможет применить его. На самом деле, нам не нужно намеренно использовать шаблоны проектирования в наших проектах, но должны начинаться с фактических задач проектирования и использования, которые модель может решить наши проблемы. Не используйте шаблон для использования шаблона, а затем просто пропустите землю. Вообще говоря, если вы следовали определенным принципам дизайна, шаблон дизайна также обобщен на основе этих принципов. Если вы знакомы с этими принципами, шаблон будет естественно существовать.