重要な1
最大の違い1.1アダプタクラスとオブジェクトアダプタ
2コードのチュートリアル
2.1コードドリル1(クラスアダプタモード)
2.2コードドリル2(オブジェクトアダプタモード)
2.3コードエクササイズ3(特定のアプリケーションシナリオ)
重要な1
最大の違い1.1アダプタクラスとオブジェクトアダプタ
アダプタクラスの継承適応の目的は、によってアダプタとオブジェクトの組み合わせは、適応目的を達成します。
2コードのチュートリアル
2.1コードドリル1(クラスアダプタモード)
需要関連:
Bおよびクラスベース、クラスは、クラスBのクラスまたはメソッドBサブクラスを達成したいと思い
設計解析:
Cアダプタクラスは、継承アダプタクラスは、クラスBであり、インターフェースの目標は、対象クラスBのフィッタCクラスによってアダプタに適合さ達成しました。
Cアダプタクラスは親クラスのメソッドを呼び出すことにより、ターゲットクラスBを達成するために適合させたもののサブクラスであります
UMLのクラス図:
テストカテゴリ:
パッケージcom.geely.design.pattern.structural.adapter.classadapter、 パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ // の対象における印刷方法 ターゲット目標= 新しい新しいConcreteTarget(); target.request() ; // 印刷法アダプタ アダプタアダプタ= 新しい新しいアダプタ(); adapter.request(); } }
アダプタクラスアダプタ:
パッケージcom.geely.design.pattern.structural.adapter.classadapter。 パブリック クラスアダプタAdapteeが実装延びターゲット { @Override 公共 ボイド要求(){ スーパー。adapteeRequest(); } }
宛先インターフェイスターゲット:
パッケージcom.geely.design.pattern.structural.adapter.classadapter。 / ** *目标接口 * / パブリック インターフェイスターゲット{ ボイド要求(); }
ターゲット実装クラスConCreteTarget:
パッケージcom.geely.design.pattern.structural.adapter.classadapter; / ** *特定の実装クラス * / パブリック クラス ConcreteTarget 実装にターゲット{ @Override 公共 ボイド要求を(){ System.out.printlnは(「クラスそれぞれの目標を達成方法,,, " ); } }
クラスフィッターAdaptee:
パッケージcom.geely.design.pattern.structural.adapter.classadapterは、 / ** メソッド*クラスがターゲットクラスを達成したい人に適応される * / パブリック クラスをAdaptee { 公共 ボイドadapteeRequest(){ System.out.printlnは(「アダプタは、独自の方法で実行され...」); } }
印刷ログ:
"C:\プログラムファイル\のJava \ jdk1.7.0_79 \ビン\ののjava.exe"「-javaagent:D:\ Javaの\ devolopKitの\アイデア\ anZh \のIntelliJ IDEA Community Editionを2018年1月4日のlib \ \ idea_rt.jar = 33436 :D:\ Javaの\のdevolopKitの\アイデア\ anZhのIntelliJ IDEA Community Editionの\ binに2018年1月4日\ "の-Dfile.encoding = UTF-8 -classpath" C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ charsets.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ deploy.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\アクセス・ブリッジ-64。瓶; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ dnsns.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ jaccess.jar; C: \プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ localedata.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ sunec.jar; C:\プログラムファイル\ Javaの\ jdk1.7.0_79 \ JRE \ libに\ extに\ sunjce_provider.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ extに\ sunmscapi.jar; C:\プログラムファイル\のJava \ jdk1。 7。0_79 \ JRE \ libに\ extに\ zipfs.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ javaws.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jce.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jfr.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ jfxrt.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\のjsse.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1。 7.0_79 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.7.0_79 \ JRE \ libに\ RT .jar; F:\ xiangmu3 \新\アイデア\ design_pattern \ターゲット\クラス; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ \ tomcatに\ Tomcatのサーブレット-API \ 7.0.64 \ Tomcatのサーブレットのapache -api-7.0.64.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ springframework春-webmvc \の4.0.3.RELEASEの\春-webmvc-4.0.3.RELEASE.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ springframework春豆\ \ 4.0.3.RELEASEの\スプリング豆-4.0.3.RELEASE.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ ORG \ springframework春コンテキスト\ 4.0.3.RELEASEの\春-コンテキスト4.0.3.RELEASE.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ springframework春-AOP \ \ 4.0.3 .RELEASE \春-AOP-4.0.3.RELEASE.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ aopalliance \ aopalliance \ 1.0 \ aopalliance-1.0.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ LIB \ ORG \ springframeworkスプリングコアの\ 4.0.3.RELEASEの\スプリングコア4.0.3.RELEASE.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ LIB \ ORG \ springframeworkバネ式\ \ 4.0.3.RELEASE \春-表現-4.0.3.RELEASE.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ springframework \春 - ウェブの\ 4.0.3.RELEASEの\春 - ウェブ4.0 .3.RELEASE.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ springframework春-OXM \ 4.0.3.RELEASE \春-OXM-4.0.3.RELEASE.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ ORG \ springframework、ばねのJDBCの\ 4.0.3.RELEASEの\春-JDBC-4.0.3.RELEASE.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ springframework春-TX \ 4.0.3 \ .RELEASE \春-TX-4.0.3.RELEASE.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ springframework春-テスト\の\ 4.0.3.RELEASEの\スプリングテスト-4.0.3。 RELEASE.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ AspectJの\ \ 1.7.3 \ aspectjweaver aspectjweaver-1.7.3.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ ORG \ MyBatisの\ MyBatisのスプリング1.3.0 \ MyBatisのスプリング-1.3.0.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ MyBatisの\ MyBatisの\ 3.4.1 \ MyBatisの-3.4.1.jar ; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ AspectJの\ \ 1.6.11 \ aspectjrt-1.6.11.jar aspectjrt; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ Codehausの\ジャクソン\ジャクソンマッパー-ASL \ 1.9.12 \ジャクソンマッパー-ASL-1.9.12.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ LIB \ ORG \ Codehausの\ジャクソン\ジャクソンコア-ASL \ 1.9.12 \ジャクソンコア-ASL-1.9.12.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\コモンズ-DBCP \コモンズ、DBCP \ 1.4 \コモンズ-DBCP-1.4.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\コモンズ・プール\コモンズ・プール\ 1.5.4 \コモンズ・プール-1.5.4.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ CH \ QoSの\ \ 1.1.2 \ logback \ logback-古典logback-古典-1.1.2.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ SLF4J \ SLF4J-API \ 1.7.6 \ SLF4J-API-1.7.6.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ CH \ QoSの\ logback \ logback-コア\ 1.1.2 \ logback-コア - 1.1 .2.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ mysqlの\ mysqlのコネクタ-javaの\ 5.1.6 \ mysqlのコネクタ-のjava-5.1.6.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ COM \ Googleの\グアバ\グアバ20.0 \グアバ-20.0.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ Apacheのコモンズ・lang3の\ \ \コモンズ3.5 \コモンズ-lang3-3.5.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ 3.2.1 \コモンズ・コレクション-3.2.1.jar \コモンズ・コレクション\コモンズ・コレクション; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\のJUnitの\ JUnitの\ 4.12 \ JUnitの-4.12.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ジョダ時の\ジョダ-時間\ 2.3 \ジョダタイム-2.3.jar ; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ hashids \ hashids \ 1.0.1 \ hashids-1.0.1.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\コモンズネット\コモンズ-net \ 3.1 \コモンズネット-3.1.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\コモンズ・ファイルアップロードコモンズ・ファイルアップロード\ 1.2.2 \コモンズ・ファイルアップロード-1.2.2.jarが\; F: \ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\コモンズ-IO \コモンズ-IO \ 2.0.1 \コモンズ-IO-2.0.1.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ COM \ githubの\ pagehelper \ pagehelper \ 4.1.0 \ pagehelper-4.1.0.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ COM \ githubの\ miemiedev \ MyBatisの-ページネータ\ 1.2.17 \ MyBatisの-ページネータ - 1.2.17.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ COM \ githubの\ jsqlparser \ jsqlparser \ 0.9.4 \ jsqlparser-0.9.4.jar ; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\コモンズ・コーデック\コモンズ・コーデック1.10 \コモンズ・コーデック1.10.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\コモンズ・コンフィギュレーション・\コモンズ - 配置コモンズ・コンフィギュレーション・1.10.jar \ 1.10 \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\コモンズ-LANG \コモンズ - ラング\ 2.6 \コモンズ-LANG-2.6.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\コモンズロギング\コモンズロギング\ 1.1.1 \コモンズ・ログ-1.1.1.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ COM \ Googleの\ zxingコア\ \ 2.1 \コア-2.1.jar; F:\ xiangmu3新\アイデア\ design_Maven_Home \ libに\ COM \ Googleの\コード\ gson \ gson \ 2.3.1 \ gson-2.3.1.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ hamcrest \ hamcrestコア1.3 \ hamcrestコア-1.3.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ Redisの\クライアント\ jedis 2.6.0 \ jedis-2.6.0.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ apacheの\ 2.0 \ \コモンズ-POOL2 \コモンズコモンズ-pool2-2.0.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ projectlombokロンボク\ \ 1.16.18 \ロンボク-1.16.18.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ springframework \セッション\スプリング・セッション・データのRedis \ 1.2.5.RELEASE \春・セッション・データredis- 1.2.5.RELEASE.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ redisson \ redisson \ 2.9.0 \ redisson-2.9.0.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ LIB \ IO \ネッティー\ネッティー-共通\ 4.1.8.Final \ネッティー-共通4.1.8.Final.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ IO \ネッティー\ネッティー・コーデック\ 4.1.8.Final \ネッティー・コーデック・4.1.8.Final.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ IO \ネッティー\ネッティー・バッファ\ 4.1.8.Final \ネッティー・バッファ・4.1.8.Final.jar; F:4.1.8 \ \ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ IO \ネッティー\ネッティー輸送.Final \ネッティー輸送-4.1.8.Final.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ IO \ネッティー\ネッティー-リゾルバ\ 4.1.8.Final \ネッティー-リゾルバ-4.1.8。 Final.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ IO \ネッティー\ネッティー・ハンドラ\ 4.1.8.Final \ネッティー・ハンドラ・4.1.8.Final.jar; F:\ xiangmu3 \新\ 1.0.0 \キャッシュ-API-1.0.0.jar \ \ design_Maven_Home \ libに\のjavax \キャッシュ\キャッシュ-APIアイデア; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ IO \ projectreactor \原子炉ストリーム2.0 \ .8.RELEASE \リアクターストリーム-2.0.8.RELEASE.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ LIB \ IO \ projectreactor \リアクトルコアの\ 2.0.8.RELEASE \炉心-2.0。 8。RELEASE.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ reactivestreams \ reactivestreams \ 1.0.0 \ reactivestreams-1.0.0.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ LIB \ COM \ fasterxmlジャクソン\ \データ形式\ジャクソン・データ形式・YAMLジャクソン・データ形式・YAML-2.6.7.jar \ 2.6.7 \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ YAML \ snakeyaml \ 1.15 \ snakeyaml-1.15.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ COM \ fasterxml \ジャクソン\コア\ジャクソン・コア・ジャクソン・コア-2.6.7.jar \ \ 2.6.7; F: \ xiangmu3 \新\アイデア\ジャクソン-データバインド-2.6.7.jar \ 2.6.7 \ design_Maven_Home \ libに\ COM \ fasterxml \ジャクソン\コア\ジャクソン、データバインド; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ COM \ fasterxml \ジャクソン・データ形式・アブロ\ 2.9.0 \ジャクソン・データ形式・アブロ-2.9.0.jarデータ形式ジャクソン\ \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ COM \ fasterxml \ジャクソン\コア2.9.0 \ジャクソン注釈-2.9.0.jar \ \ジャクソン注釈; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ apacheの\アブロ\アブロ\ 1.8.1 \アブロ-1.8.1.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ COM \ ThoughtWorksの\ paranamer \ 2.7 \ paranamer-2.7.jar \ paranamer; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ xerial \てきぱき\てきぱき-javaの1.1.1.3 \てきぱき-javaの-1.1.1.3.jar \; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ orgの\ apacheの\コモンズ・圧縮\ 1.8.1 \コモンズ-圧縮-1.8.1.jar \コモンズ; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ ORG \ tukaani \ XZ \ 1.5 \ XZ-1.5.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ COM \太陽\ 1.2 \ JSF-API-1.2.jar」\ JSF-API \直面しています\ xiangmu3 \コモンズ・圧縮\ 1.8.1 \コモンズ-圧縮-1.8.1.jar \新\アイデア\ design_Maven_Home \ libに\ orgの\ apacheの\コモンズ; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ ORG \ tukaani \ XZ \ 1.5 \ XZ-1.5.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ comの太陽\ 1.2 \ JSF-API-1.2.jar \ \ JSF-API直面している\」\ xiangmu3 \コモンズ・圧縮\ 1.8.1 \コモンズ-圧縮-1.8.1.jar \新\アイデア\ design_Maven_Home \ libに\ orgの\ apacheの\コモンズ; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ ORG \ tukaani \ XZ \ 1.5 \ XZ-1.5.jar; F:\ xiangmu3 \新\アイデア\ design_Maven_Home \ libに\ comの太陽\ 1.2 \ JSF-API-1.2.jar \ \ JSF-API直面している\」com.geely.design.pattern.structural.adapter.classadapter.Test
ターゲット実装クラス自身の道,,,
独自のメソッドアダプタを実行しています。。。
コードの終了プロセスで仕上げた 0
2.2コードドリル2(オブジェクトアダプタモード)
需要:クラスとBクラスは、クラスは、クラスBのクラスやメソッドBのサブクラスを達成したいと思います
設計解析:
ことでの組み合わせ目的
関係:
のみ適応クラスが変更されている、他のクラスは変更されません。
UMLのクラス図:
アダプタクラス:
パッケージcom.geely.design.pattern.structural.apapter.objectadapter。 パブリック クラスアダプタが実装ターゲット{ Adapteeのadaptee =新しいAdapteeを(); @Override 公共 ボイド要求(){ adaptee.adapteeRequest()。 } }
テストカテゴリ:
パッケージcom.geely.design.pattern.structural.apapter.objectadapter、 パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ // の対象における印刷方法 ターゲット目標= 新しい新しいConcreteTarget(); target.request() ; // 印刷法アダプタ アダプタアダプタ= 新しい新しいアダプタ(); adapter.request(); } }
宛先インターフェイス:
パッケージcom.geely.design.pattern.structural.apapter.objectadapter。 / ** *目标接口 * / パブリック インターフェイスターゲット{ ボイド要求(); }
実装クラスをターゲット:
パッケージcom.geely.design.pattern.structural.apapter.objectadapter; / ** *特定の実装クラス * / パブリック クラス ConcreteTarget 実装にターゲット{ @Override 公共 ボイド要求を(){ System.out.printlnは(「クラスそれぞれの目標を達成方法,,, " ); } }
適応カテゴリ:
パッケージcom.geely.design.pattern.structural.apapter.objectadapterは、 / ** メソッド*クラスがターゲットクラスを達成したい人に適応される * / パブリック クラスをAdaptee { 公共 ボイドadapteeRequest(){ System.out.printlnは(「アダプタは、独自の方法で実行され...」); } }
印刷ログ:
彼らの目的クラスメソッドを達成,,,
独自のメソッドアダプタを実行しています。。。
コードの終了プロセスで仕上げた 0
2.3コードエクササイズ3(特定のアプリケーションシナリオ)
要件:
5V DCへのモバイル電源アダプタ、AC 220V
テストカテゴリ:
パッケージcom.geely.design.pattern.structural.adapter。 パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ DC5V DC5V = 新しいPowerAdapter()。 dc5V.outPutDC5V(); } }
電源アダプタクラス:
パッケージcom.geely.design.pattern.structural.adapter; インポートcom.geely.design.pattern.structural.adapter.AC220V; インポートcom.geely.design.pattern.structural.adapter.DC5V; / ** *電源アダプタ * / パブリック クラス PowerAdapter 実装DC5V { // AC 220Vの組み合わせを導入することにより AC220V AC220V =新しい新しいAC220Vを(); @Override 公共 INT outPutDC5V(){ int型 adapterInput = ac220V.outputAC220V(); // 変換トランス INT adapterOutput = adapterInput / 44です。 System.out.printlnは(+ adapterOutput + "V" "電源アダプタを使用して、最終的にDCに変換され、" ); 戻りadapterOutputを; } }
DC 5Vターゲットクラスのカテゴリ:
パッケージcom.geely.design.pattern.structural.adapter、 パブリック インターフェイスDC5V { // 出力5VのDC INT outPutDC5V(); }
アダプタによってAC 220Vクラス:
パッケージcom.geely.design.pattern.structural.adapter。 パブリック クラスAC220V { 公共 のint outputAC220V(){ int型 outputELE = 220 。 System.out.println( "输出交流电" + outputELE + "V" )。 返すoutputELE; } }
印刷ログ:
出力220VのAC
電源アダプタ、最終的にはDC 5Vに変換され、
完成プロセスの終了コードを 0