Javaオブジェクト向けの原理とSpring入門(Adapter Pattern)を理解する
1.アダプタモード
通常、コンバータのモードと呼ばれます.
例えば、充電器によっては、携帯電話の充電器が電源コンセントに直接接続できないため、充電器は携帯電話と電源コンセントの間で両者を接続するコンバータとして機能する.
すなわち,アダプタモードは,->SOLID(OCP)オープンクラックの原則と同じである.
アダプタモードを適用する前に
public class ServiceA {
void runServiceA(){
System.out.println("A");
}
}
public class ServiceB {
void runServiceB(){
System.out.println("B");
}
}
public class Main {
public static void main(String[] args) {
//어댑터 패턴 적용 X
ServiceA nota=new ServiceA();
ServiceB notb=new ServiceB();
nota.runServiceA()
notb.runServiceB();
}
}
アダプタモードを適用する
public class AdapterA {
ServiceA serviceA=new ServiceA();
void run(){
System.out.print("어댑터 패턴 적용 -> ");
serviceA.runServiceA();
}
}
public class AdapterB {
ServiceB serviceB=new ServiceB();
void run(){
System.out.print("어댑터 패턴 적용 -> ");
serviceB.runServiceB();
}
}
public class Main {
public static void main(String[] args) {
//어댑터 패턴
AdapterA a=new AdapterA();
//어댑터 패턴 적용 X
ServiceA nota=new ServiceA();
AdapterB b=new AdapterB();
ServiceB notb=new ServiceB();
a.run();
nota.runServiceA();
b.run();
notb.runServiceB();
}
}
プレイヤー1とプレイヤー2のソースコードを実行します。
変換後の出力はAdapterクラスで表示できます.
public interface Action {
/**
*
* 행동 인터페이스
*/
void eat(String food);
void attack(String weapon);
void buy(String name);
}
public class player1 implements Action{
@Override
public void eat(String food) {
System.out.println(food+"먹습니다.");
}
@Override
public void attack(String weapon) {
System.out.println(weapon+"공격!!");
}
@Override
public void buy(String name) {
System.out.println(name+"구입완료");
}
}
public class Adapter implements Action{
private Action action;
public Adapter(Action action){
this.action=action;
}
@Override
public void eat(String food) {
System.out.println("Using Adapter ---->");
action.eat(food);
}
@Override
public void attack(String weapon) {
System.out.println("Using Adapter ---->");
action.attack(weapon);
}
@Override
public void buy(String name) {
System.out.println("Using Adapter ---->");
action.buy(name);
}
}
public class player2 implements Action {
@Override
public void eat(String food) {
System.out.println(food+"먹습니다.");
}
@Override
public void attack(String weapon) {
System.out.println(weapon+"공격!!.");
}
@Override
public void buy(String name) {
System.out.println(name+"구입합니다.");
}
}
public class Main {
public static void main(String[] args) {
Adapter adapter1= new Adapter(new player1());
adapter1.attack("화살");
adapter1.eat("포션");
Adapter adapter2 =new Adapter(new player2());
adapter2.attack("칼");
adapter2.eat("포션");
}
}
おもちゃアイテムに適用してみる
既存のコードは、StationRepository、LineRepositoryからdeleteメソッドをロードすることで出力されます.
アダプタ・モードを適用すると、FormatAdapter、FormatAdapterLineクラスがそれぞれ作成され、StationRepostoryクラスとLineRepositoryクラスでdeleteメソッドが挿入および実行されます.
private FormatAdapter formatAdapter=new FormatAdapter();
private FormatAdapterLine formatAdapterLine=new FormatAdapterLine();
else if(name.equals("2")){
System.out.println("## 삭제할 역 이름을 입력하세요");
name=sc.nextLine();
formatAdapter.FormatDelete(name);
}
else if(name.equals("2")){
System.out.println("## 삭제할 노선 이름을 입력하세요");
String linename=sc.nextLine();
formatAdapterLine.FormatDelete(linename);
}
public class FormatAdapter{
void FormatDelete(String name){
StationRepository.deleteStation(name);
}
}
public class FormatAdapterLine{
public void FormatDelete(String name){
LineRepository.deleteLineByName(name);
}
}
Reference
この問題について(Javaオブジェクト向けの原理とSpring入門(Adapter Pattern)を理解する), 我々は、より多くの情報をここで見つけました https://velog.io/@ghks285/스프링-입문을-위한-자바-객체지향의-원리와-이해-디자인-패턴テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol