우리는 종종이 상황에 직면합니다. 두 개의 기성품 클래스를 사용하면 그들 사이에 연결이 없지만 이제는 클래스의 방법 중 하나와 다른 방법 중 하나를 사용하고 싶습니다. 해당 인터페이스를 수정하기위한 해결 방법이 있지만 이것이 우리가 가장보고 싶은 것입니다. 현재 어댑터 모드는 편리합니다.
어댑터 모드를 어댑터 모드라고도하며 GOF가 제안한 23 개의 설계 모드 중 하나입니다. 어댑터 모드는 건설적인 모드 중 하나입니다. 어댑터 모드를 통해 기존 클래스 (또는 외부 클래스)의 인터페이스 형식을 변경할 수 있습니다.
어댑터 모드에는 세 가지 방법이 있으며, 하나는 객체 어댑터이고, 하나는 클래스 어댑터이고, 다른 하나는 인터페이스 어댑터입니다.
다음 예제가 제공됩니다.
1. 클래스 어댑터
클래스 다이어그램
공개 클래스 DrawRectangle {// Draw Public void DrawRectangle (String Msg) {System.out.println ( "Draw Rectangle :" + MSG); }} public interface idrawcircle {// 그리기 서클 인터페이스 void drawCircle (); } / ** * 클래스 어댑터는 정적 정의 메소드 인 객체 상속을 사용합니다. @author stone */ public class drawAdapter4class 확장 묘사 indrawcircle {// square 및 circe @override public void drawcircle () {System.out.println ( "drawAdapter4Class : DROWCICCLAS :"); }}2. 객체 어댑터
클래스 다이어그램 :
/*** 객체 어댑터 : 객체 조합을 사용하는 방법은 동적으로 결합하는 방법입니다. * 정사각형과 원을 그릴 수 있습니다 * @author stone * drawAdapter는 어댑터이며 DrawRectangle은 어댑터에 속하며 어댑터입니다. 어댑터는 어댑터와 어댑터 (DrawCircle)에 적응합니다. */ public class drawAdapter4object idrawcircle {// square 및 circles private drawrectangle drawrectangle; public drawadapter4object (drawRectangle DrawRectAngle) {this.DrawRectangle = DrawRectAngle; } @override public void drawCircle () {System.out.println ( "DrawAdapter4object : DrawCircle"); } public void drawRectAngle (String Msg) {DrawRectangle.DrawRectAngle (MSG); }} 3. 인터페이스 어댑터
클래스 다이어그램
/ * * 인터페이스 어댑터 : 인터페이스에는 추상적 인 메소드가 있습니다. 우리는 그 중 일부만 구현하고 싶지만 모두 구현하고 싶지는 않습니다. * 따라서 기본 빈 구현을 제공 한 다음 상속 한 다음 구현하려는 메소드를 다시 작성하십시오. */ public interface idraw {void drawCircle (); void drawrectangle (); } /** 인터페이스 어댑터의 기본 구현*/public class defaultDrawadapter는 idraw {// 제곱 및 원의 구현 @override public void drawcircle () {} @override public void drawRectangle () {}} 공개 클래스 테스트 {public static void main (string [] args) {// 객체 어댑터 drawAdapter4object objadapter = new DrawAdapter4object (new DrawRectangle ()); objadapter.drawcircle (); objadapter.DrawRectAngle ( "DrawAdapter4object"); System.out.println ( "------------------"); // 클래스 어댑터 DrawAdapter4class Clzadapter = 새로운 DrawAdapter4class (); clzadapter.drawcircle (); clzadapter.DrawRectAngle ( "drawAdapter4class"); System.out.println ( "------------------------------------------------- // 인터페이스 어댑터 myDrawAdapter myDrawAdapter = new MyDrawAdapter (); myDrawAdapter.DrawCircle (); myDrawAdapter.DrawRectangle (); } 정적 클래스 MyDrawAdapter 확장 기본 DrawAdapter {@override public void drawCircle () {System.out.println ( "myDrawAdapter의 DrawCircle"); }}}인쇄
DrawAdapter4object : DrawCircle Draw 직사각형 : in DrawAdapter4object -------------- DrawAdapter4class : DrawCircle Draw Rectangle : in DrawAdapter4class ------------ MyDrawAdapter의 DrawCircle
어댑터 모드의 세 가지 기능 :
1 어댑터 객체는 원래 인터페이스를 구현합니다
2 어댑터 객체는 새 인터페이스를 구현하는 객체를 결합합니다 (이 개체는 인터페이스를 구현할 수 없으며 간단한 개체 일뿐입니다).
3. 어댑터의 원래 인터페이스 메소드에 대한 호출이 새 인터페이스 인스턴스로 위임되는 특정 방법
어떤 사람들은 디자인 패턴을 설명하는 예제가 너무 간단하다고 생각하지만 그렇게 보이지만 프로젝트 개발에 실제로 사용하려면 실제로 적용 할 수 없습니다. 실제로 프로젝트에서 의도적으로 설계 패턴을 사용할 필요는 없지만 실제 설계 문제에서 시작하여 문제를 해결할 수있는 모델에서 시작해야합니다. 패턴을 사용하기 위해 패턴을 사용하지 말고 결론을 건너 뛰십시오. 일반적으로 특정 설계 원칙을 따르는 한 디자인 패턴도 이러한 원칙에 따라 요약됩니다. 이러한 원칙에 익숙하다면 패턴이 자연스럽게 존재합니다.