{"id":596,"date":"2024-11-13T11:31:46","date_gmt":"2024-11-13T02:31:46","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=596"},"modified":"2025-03-24T08:53:00","modified_gmt":"2025-03-23T23:53:00","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91java%e9%96%8b%e7%99%ba%e8%80%85%e3%81%ae%e3%81%9f%e3%82%81%e3%81%ae%e5%ae%9f%e8%b7%b5%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=596","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Java\u958b\u767a\u8005\u306e\u305f\u3081\u306e\u5b9f\u8df5\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u5165\u9580 \u301c\u73fe\u5834\u3067\u4f7f\u3048\u308b23\u500b\u306e\u30d1\u30bf\u30fc\u30f3\u3068\u5b9f\u88c5\u4f8b\u301c"},"content":{"rendered":"<div id=\"sgb-css-id-1\">\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">\u306f\u3058\u3081\u306b<\/a>  <\/li>  <li>    <a href=\"#i-1\">\uff11\uff0e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3068\u306f\u4f55\u304b\uff1f\u521d\u5fc3\u8005\u306b\u3082\u308f\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-2\">1.1 \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u8a2d\u8a08\u306b\u304a\u3051\u308b\u91cd\u8981\u6027<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">1.2 GoF\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u5168\u4f53\u50cf<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">\uff12\uff0eJava\u3067\u983b\u51fa\u3059\u308b5\u3064\u306e\u57fa\u672c\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">2.1 Singleton \u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u3068\u4f7f\u7528\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-9\">2.2 Factory Method \u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u67d4\u8edf\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u751f\u6210<\/a>      <\/li>      <li>        <a href=\"#i-10\">2.3 Observer \u30d1\u30bf\u30fc\u30f3\u3067\u30a4\u30d9\u30f3\u30c8\u51e6\u7406\u3092\u6539\u5584<\/a>      <\/li>      <li>        <a href=\"#i-11\">2.4 Strategy \u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5207\u308a\u66ff\u3048<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-12\">2.5 Decorator \u30d1\u30bf\u30fc\u30f3\u3067\u6a5f\u80fd\u3092\u52d5\u7684\u306b\u8ffd\u52a0<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-13\">\uff13\uff0e\u5b9f\u8df5\u7684\u306a\u5834\u9762\u3067\u4f7f\u3048\u308b\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u6d3b\u7528\u8853<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-14\">3.1 \u30b7\u30fc\u30f3\u5225\u304a\u3059\u3059\u3081\u30d1\u30bf\u30fc\u30f3\u306e\u9078\u3073\u65b9<\/a>      <\/li>      <li>        <a href=\"#i-15\">3.2 \u30d1\u30bf\u30fc\u30f3\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-16\">3.3 Spring Framework\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-17\">\uff14\uff0e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u9069\u7528\u6642\u306e\u6ce8\u610f\u70b9\u3068\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-18\">4.1 \u904e\u5270\u306a\u9069\u7528\u3092\u907f\u3051\u308b\u305f\u3081\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/a>      <\/li>      <li>        <a href=\"#i-21\">4.2 \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u5f71\u97ff\u3068\u5bfe\u7b56<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">4.3 \u30c1\u30fc\u30e0\u958b\u767a\u306b\u304a\u3051\u308b\u5408\u610f\u5f62\u6210\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-23\">\uff15\uff0e\u5b9f\u8df5\u6f14\u7fd2\uff1a\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u3063\u305f\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-24\">5.1 \u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u3078\u306e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u9069\u7528<\/a>      <\/li>      <li>        <a href=\"#i-27\">5.2 \u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306e\u66f8\u304d\u65b9\u3068\u5b9f\u88c5\u306e\u8a55\u4fa1<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-28\">5.3 \u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u30dd\u30a4\u30f3\u30c8\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-29\">\u307e\u3068\u3081\uff1a\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528\u306b\u5411\u3051\u3066<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-30\">\u672c\u8a18\u4e8b\u306e\u307e\u3068\u3081<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-33\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">\u306f\u3058\u3081\u306b<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-2\">\n<p>Java\u3067\u306e\u958b\u767a\u7d4c\u9a13\u3092\u91cd\u306d\u3066\u3044\u304f\u3068\u3001\u5fc5\u305a\u76f4\u9762\u3059\u308b\u8ab2\u984c\u304c\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u6d3b\u7528\u3067\u3059\u3002\u300c\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306f\u77e5\u3063\u3066\u3044\u308b\u3051\u3069\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3069\u3046\u4f7f\u3048\u3070\u3044\u3044\u306e\u304b\u308f\u304b\u3089\u306a\u3044\u300d\u300c\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u3044\u3059\u304e\u3066\u3001\u304b\u3048\u3063\u3066\u30b3\u30fc\u30c9\u304c\u8907\u96d1\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u300d\u3068\u3044\u3063\u305f\u60a9\u307f\u3092\u6301\u3064\u958b\u767a\u8005\u3082\u591a\u3044\u306e\u3067\u306f\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-3\">\n<p>\u672c\u8a18\u4e8b\u3067\u306f\u3001Java\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u5b9f\u52d9\u3067\u672c\u5f53\u306b\u5fc5\u8981\u306a\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u77e5\u8b58\u3068\u3001\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u57fa\u672c\u7684\u306a\u7406\u89e3\u304b\u3089\u3001\u73fe\u5834\u3067\u306e\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u4f8b\u3001\u3055\u3089\u306b\u306fSpring Framework\u3067\u306e\u6d3b\u7528\u307e\u3067\u3001\u4f53\u7cfb\u7684\u306b\u5b66\u3079\u308b\u5185\u5bb9\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-8\">\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u672c\u8a18\u4e8b\u3067\u5b66\u3079\u308b\u3053\u3068<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\"><div id=\"sgb-css-id-4\">\n<li>\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u57fa\u672c\u6982\u5ff5\u3068\u91cd\u8981\u6027<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-5\">\n<li>Java\u3067\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b5\u3064\u306e\u4e3b\u8981\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-6\">\n<li>\u5b9f\u8df5\u7684\u306a\u30d1\u30bf\u30fc\u30f3\u9078\u629e\u3068\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u624b\u6cd5<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-7\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u30d1\u30bf\u30fc\u30f3\u9069\u7528\u65b9\u6cd5<\/li>\n<\/div>\n\n\n<li>\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u3078\u306e\u30d1\u30bf\u30fc\u30f3\u9069\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n\n<div id=\"sgb-css-id-9\">\n<p>\u7d4c\u9a13\u30ec\u30d9\u30eb\u306b\u95a2\u308f\u3089\u305a\u3001\u3088\u308a\u826f\u3044\u30b3\u30fc\u30c9\u8a2d\u8a08\u3092\u76ee\u6307\u3059Java\u958b\u767a\u8005\u306e\u65b9\u3005\u306b\u3068\u3063\u3066\u3001\u5b9f\u8df5\u7684\u306a\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3068\u306a\u308b\u5185\u5bb9\u3092\u76ee\u6307\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u3067\u306f\u3001\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4e16\u754c\u3092\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-10\">\n<h2 class=\"wp-block-heading\" id=\"i-1\">\uff11\uff0e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3068\u306f\u4f55\u304b\uff1f\u521d\u5fc3\u8005\u306b\u3082\u308f\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-11\">\n<p>\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306b\u304a\u3044\u3066\u3001\u540c\u3058\u3088\u3046\u306a\u554f\u984c\u306f\u4f55\u5ea6\u3082\u7e70\u308a\u8fd4\u3057\u767a\u751f\u3057\u307e\u3059\u3002\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u305d\u3046\u3057\u305f\u4e00\u822c\u7684\u306a\u554f\u984c\u306b\u5bfe\u3059\u308b\u300c\u5b9a\u77f3\u300d\u3068\u3082\u8a00\u3048\u308b\u89e3\u6c7a\u7b56\u3092\u30d1\u30bf\u30fc\u30f3\u5316\u3057\u305f\u3082\u306e\u3067\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u57fa\u790e\u3068\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-12\">\n<h3 class=\"wp-block-heading\" id=\"i-2\">1.1 \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u8a2d\u8a08\u306b\u304a\u3051\u308b\u91cd\u8981\u6027<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-13\">\n<p>\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u539f\u5247\u306b\u57fa\u3065\u3044\u3066\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u8981\u7d20\u304c\u7279\u306b\u91cd\u8981\u3067\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-14\">\n<p>1. <strong>\u30ab\u30d7\u30bb\u30eb\u5316\uff08Encapsulation\uff09<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-15\">\n<p>\u3000\u25cf \u30af\u30e9\u30b9\u306e\u5185\u90e8\u5b9f\u88c5\u3092\u96a0\u853d<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-16\">\n<p>\u3000\u25cf \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u901a\u3058\u305f\u5b89\u5168\u306a\u64cd\u4f5c<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-17\">\n<p>\u3000\u25cf \u5909\u66f4\u306e\u5f71\u97ff\u7bc4\u56f2\u3092\u6700\u5c0f\u9650\u306b\u6291\u5236<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-18\">\n<p>2. <strong>\u7d99\u627f\uff08Inheritance\uff09<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-19\">\n<p>\u3000\u25cf \u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u5411\u4e0a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-20\">\n<p>\u3000\u25cf \u57fa\u672c\u6a5f\u80fd\u306e\u5171\u901a\u5316<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-21\">\n<p>\u3000\u25cf \u62e1\u5f35\u6027\u306e\u78ba\u4fdd<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-22\">\n<p>3. <strong>\u30dd\u30ea\u30e2\u30fc\u30d5\u30a3\u30ba\u30e0\uff08Polymorphism\uff09<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-23\">\n<p>\u3000\u25cf \u540c\u3058\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u7570\u306a\u308b\u5b9f\u88c5\u3092\u63d0\u4f9b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-24\">\n<p>\u3000\u25cf \u5b9f\u884c\u6642\u306e\u67d4\u8edf\u306a\u632f\u308b\u821e\u3044\u306e\u5909\u66f4<\/p>\n<\/div>\n\n\n<p>\u3000\u25cf \u4f9d\u5b58\u95a2\u4fc2\u306e\u5236\u5fa1<\/p>\n\n\n<div id=\"sgb-css-id-25\">\n<p>\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u3053\u308c\u3089\u306e\u539f\u5247\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:#009EF3;color:#FFF\" class=\"sgb-box-simple__title\">\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u30e1\u30ea\u30c3\u30c8<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:#009EF3;background-color:#FFF\">\n<ul class=\"wp-block-list\"><div id=\"sgb-css-id-26\">\n<li>\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u5411\u4e0a<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-27\">\n<li>\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-28\">\n<li>\u30c1\u30fc\u30e0\u9593\u306e\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u52b9\u7387\u5316<\/li>\n<\/div>\n\n\n<li>\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u54c1\u8cea\u5411\u4e0a<\/li>\n<\/ul>\n<\/div><\/div>\n\n\n<div id=\"sgb-css-id-29\">\n<h3 class=\"wp-block-heading\" id=\"i-3\">1.2 GoF\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u5168\u4f53\u50cf<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-30\">\n<p>GoF\uff08Gang of Four\uff09\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306f\u300123\u500b\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u4ee5\u4e0b\u306e3\u3064\u306e\u30ab\u30c6\u30b4\u30ea\u30fc\u306b\u5206\u985e\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-31\">\n<h4 class=\"wp-block-heading\" id=\"i-4\">1. \u751f\u6210\u30d1\u30bf\u30fc\u30f3\uff08Creational Patterns\uff09<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-36\">\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210\u65b9\u6cd5\u306b\u95a2\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\"><div id=\"sgb-css-id-32\">\n<li>Singleton\uff1a1\u3064\u306e\u30af\u30e9\u30b9\u304b\u3089\u306f\u3001\uff11\u3064\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u307f\u3092\u751f\u6210\u3055\u305b\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-33\">\n<li>Factory Method\uff1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210\u3068\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5177\u4f53\u7684\u306a\u51e6\u7406\u3092\u5206\u96e2\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-34\">\n<li>Abstract Factory\uff1a\u95a2\u9023\u3059\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\u3059\u308b\u51e6\u7406\u3092\u3001\u62bd\u8c61\u5316\u3057\u3066\u96c6\u7d04\u5316\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-35\">\n<li>Builder\uff1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u904e\u7a0b\u3092\u62bd\u8c61\u5316\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n\n<li>Prototype\uff1a\u30af\u30e9\u30b9\u304b\u3089\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3059\u308b\u306e\u3067\u306f\u306a\u304f\u3001\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304b\u3089\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30b3\u30d4\u30fc\u3092\u4f5c\u6210\u3067\u304d\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n\n<div id=\"sgb-css-id-37\">\n<h4 class=\"wp-block-heading\" id=\"i-5\">2. \u69cb\u9020\u30d1\u30bf\u30fc\u30f3\uff08Structural Patterns\uff09<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-44\">\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u30af\u30e9\u30b9\u3084\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u69cb\u6210\u306b\u95a2\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\"><div id=\"sgb-css-id-38\">\n<li>Adapter\uff1a\u95a2\u9023\u6027\u306e\u306a\u3044\u30af\u30e9\u30b9\u305f\u3061\u3092\u4f7f\u3044\u3084\u3059\u3044\u5f62\u3067wrap\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u4f7f\u3044\u3084\u3059\u304f\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-39\">\n<li>Bridge\uff1a\u6a5f\u80fd\u306e\u5b9f\u88c5\u30af\u30e9\u30b9\u3068\u8ffd\u52a0\u30af\u30e9\u30b9\u3092\u5225\u306b\u4f5c\u6210\u3057\u3001\u305d\u308c\u3092\u95a2\u9023\u4ed8\u3051\u308b\u30af\u30e9\u30b9\u3082\u4f5c\u6210\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-40\">\n<li>Composite\uff1a\u30c4\u30ea\u30fc\u69cb\u9020\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u968e\u5c64\u306e\u6df1\u3055\u306b\u95a2\u308f\u3089\u305a\u4e00\u5f8b\u306b\u6271\u3046\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-41\">\n<li>Decorator\uff1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u3001\u65b0\u3057\u3044\u6a5f\u80fd\u3084\u632f\u308b\u821e\u3044\u3092\u52d5\u7684\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-42\">\n<li>Facade\uff1a\u65e2\u5b58\u306e\u30af\u30e9\u30b9\u3092\u8907\u6570\u7d44\u307f\u5408\u308f\u305b\u3066\u4f7f\u3046\u624b\u9806\u3092\u3001\u547c\u3073\u51fa\u3057\u30af\u30e9\u30b9\u306b\u3066\u30b7\u30f3\u30d7\u30eb\u306b\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-43\">\n<li>Flyweight\uff1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u751f\u6210\u306b\u4f34\u3046\u30e1\u30e2\u30ea\u30b3\u30b9\u30c8\u3092\u524a\u6e1b\u3059\u308b\u305f\u3081\u306b\u5229\u7528\u3055\u308c\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n\n<li>Proxy\uff1a\u8981\u6c42\u3092\u4ee3\u7406\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u53d7\u3051\u53d6\u3063\u3066\u51e6\u7406\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n\n<div id=\"sgb-css-id-45\">\n<h4 class=\"wp-block-heading\" id=\"i-6\">3. \u632f\u308b\u821e\u3044\u30d1\u30bf\u30fc\u30f3\uff08Behavioral Patterns\uff09<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-56\">\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u9593\u306e\u76f8\u4e92\u4f5c\u7528\u306b\u95a2\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\"><div id=\"sgb-css-id-46\">\n<li>Chain of Responsibility\uff1a\u8907\u6570\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u9023\u9396\u3055\u305b\u3001\u305d\u306e\u4e2d\u306e\u3069\u308c\u304b\u304c\u51e6\u7406\u3092\u884c\u3046\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-47\">\n<li>Command\uff1a\u547d\u4ee4\u7cfb\u7d71\u3092\uff11\u3064\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u7ba1\u7406\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-48\">\n<li>Interpreter\uff1a\u89e3\u6790\u3057\u305f\u7d50\u679c\u5f97\u3089\u308c\u305f\u624b\u9806\u306b\u5247\u3063\u305f\u51e6\u7406\u3092\u5b9f\u884c\u3055\u305b\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-49\">\n<li>Iterator\uff1a\u7279\u5b9a\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u8981\u7d20\u306b\u5bfe\u3057\u3066\u9806\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3088\u3046\u306a\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-50\">\n<li>Mediator\uff1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u540c\u58eb\u304c\u304a\u4e92\u3044\u3092\u660e\u793a\u7684\u306b\u53c2\u7167\u3057\u5408\u3046\u3053\u3068\u304c\u306a\u3044\u3088\u3046\u306b\u3057\u3001 \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u7de9\u548c\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-51\">\n<li>Memento\uff1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4efb\u610f\u306e\u72b6\u614b\u3067\u4fdd\u5b58\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-52\">\n<li>Observer\uff1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u72b6\u614b\u3092\u76e3\u8996\u3057\u3001\u72b6\u614b\u5909\u5316\u306e\u969b\u306b\u901a\u77e5\u3092\u884c\u3046\u3088\u3046\u306b\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-53\">\n<li>State\uff1a\u72b6\u614b\u3092\u30af\u30e9\u30b9\u3068\u3057\u3066\u5207\u308a\u51fa\u3057\u3001\u3053\u306e\u72b6\u614b\u5909\u3048\u308b\u3053\u3068\u3067\u51e6\u7406\u3092\u5909\u3048\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-54\">\n<li>Strategy\uff1a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5b9f\u88c5\u3092\u3001\u4f7f\u3046\u5834\u5408\u306b\u5fdc\u3058\u3066\u5207\u308a\u66ff\u3048\u3089\u308c\u308b\u3088\u3046\u306b\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-55\">\n<li>Template Method\uff1a\u51e6\u7406\u306e\u67a0\u7d44\u307f\u306f\u30b9\u30fc\u30d1\u30fc\u30af\u30e9\u30b9\u3067\u547c\u3073\u51fa\u3057\u3001\u5b9f\u969b\u306e\u51e6\u7406\u306f\u5b50\u30af\u30e9\u30b9\u3067\u5b9f\u88c5\u3059\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/div>\n\n\n<li>Visitor\uff1aEntry\u30af\u30e9\u30b9\u3068Visitor\u30af\u30e9\u30b9\u3092\u5b9f\u88c5\u3057\u3001\u69cb\u9020\u3068\u51e6\u7406\u3092\u5206\u3051\u308b\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n\n<div id=\"sgb-css-id-57\">\n<p>\u5404\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u7279\u5b9a\u306e\u554f\u984c\u306b\u5bfe\u3059\u308b\u89e3\u6c7a\u7b56\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Strategy\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5207\u308a\u66ff\u3048\u3092\u5bb9\u6613\u306b\u3057\u3001Observer\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u9593\u306e\u758e\u7d50\u5408\u306a\u901a\u77e5\u30e1\u30ab\u30cb\u30ba\u30e0\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-61\">\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u5b66\u3076\u969b\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ol class=\"wp-block-list\"><div id=\"sgb-css-id-58\">\n<li>\u30d1\u30bf\u30fc\u30f3\u306e<strong>\u76ee\u7684<\/strong>\u3092\u7406\u89e3\u3059\u308b<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-59\">\n<li>\u9069\u7528\u3059\u3079\u304d<strong>\u72b6\u6cc1<\/strong>\u3092\u898b\u6975\u3081\u308b<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-60\">\n<li>\u30d1\u30bf\u30fc\u30f3\u306e<strong>\u30c8\u30ec\u30fc\u30c9\u30aa\u30d5<\/strong>\u3092\u628a\u63e1\u3059\u308b<\/li>\n<\/div>\n\n\n<li><strong>\u904e\u5270\u306a\u9069\u7528<\/strong>\u3092\u907f\u3051\u308b<\/li>\n<\/ol>\n<\/div><\/div>\n<\/div>\n\n<div id=\"sgb-css-id-62\">\n<p>\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Java\u3067\u7279\u306b\u983b\u51fa\u3059\u308b5\u3064\u306e\u57fa\u672c\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u3001\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u4f8b\u3092\u4ea4\u3048\u306a\u304c\u3089\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-63\">\n<h2 class=\"wp-block-heading\" id=\"i-7\">\uff12\uff0eJava\u3067\u983b\u51fa\u3059\u308b5\u3064\u306e\u57fa\u672c\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-64\">\n<p>\u5b9f\u52d9\u306eJava\u958b\u767a\u3067\u7279\u306b\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b5\u3064\u306e\u57fa\u672c\u7684\u306a\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u3001\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u4f8b\u3068\u3068\u3082\u306b\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-65\">\n<h3 class=\"wp-block-heading\" id=\"i-8\">2.1 Singleton \u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u3068\u4f7f\u7528\u4f8b<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-66\">\n<p>Singleton\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c1\u3064\u3060\u3051\u5b58\u5728\u3059\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3059\u308b\u30d1\u30bf\u30fc\u30f3\u3067\u3059\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class DatabaseConnection {\n    \/\/ volatile\u4fee\u98fe\u5b50\u3067\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u74b0\u5883\u3067\u306e\u53ef\u8996\u6027\u3092\u4fdd\u8a3c\n    private static volatile DatabaseConnection instance;\n    private Connection connection;\n\n    \/\/ \u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\u3092\u5236\u5fa1\n    private DatabaseConnection() {\n        \/\/ \u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u521d\u671f\u5316\u51e6\u7406\n    }\n\n    \/\/ Double-checked locking \u3067\u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306b\u5b9f\u88c5\n    public static DatabaseConnection getInstance() {\n        if (instance == null) {\n            synchronized (DatabaseConnection.class) {\n                if (instance == null) {\n                    instance = new DatabaseConnection();\n                }\n            }\n        }\n        return instance;\n    }\n\n    public Connection getConnection() {\n        return connection;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nDatabaseConnection db = DatabaseConnection.getInstance();<\/pre>\n\n\n<div id=\"sgb-css-id-69\">\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\"><strong>\u4f7f\u7528\u30b7\u30fc\u30f3<\/strong><\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\"><div id=\"sgb-css-id-67\">\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u7ba1\u7406<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-68\">\n<li>\u8a2d\u5b9a\u60c5\u5831\u306e\u4e00\u5143\u7ba1\u7406<\/li>\n<\/div>\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u30d7\u30fc\u30eb\u306e\u7ba1\u7406<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n\n<div id=\"sgb-css-id-70\">\n<h3 class=\"wp-block-heading\" id=\"i-9\">2.2 Factory Method \u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u67d4\u8edf\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u751f\u6210<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-71\">\n<p>Factory Method\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210\u3092\u5c02\u7528\u306e\u30d5\u30a1\u30af\u30c8\u30ea\u30af\u30e9\u30b9\u306b\u59d4\u8b72\u3059\u308b\u3053\u3068\u3067\u3001\u751f\u6210\u30ed\u30b8\u30c3\u30af\u306e\u96c6\u4e2d\u7ba1\u7406\u3068\u62e1\u5f35\u6027\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u88fd\u54c1\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\npublic interface NotificationService {\n    void sendNotification(String message);\n}\n\n\/\/ \u5177\u4f53\u7684\u306a\u88fd\u54c1\u30af\u30e9\u30b9\npublic class EmailNotification implements NotificationService {\n    @Override\n    public void sendNotification(String message) {\n        \/\/ \u30e1\u30fc\u30eb\u9001\u4fe1\u306e\u5b9f\u88c5\n    }\n}\n\npublic class SMSNotification implements NotificationService {\n    @Override\n    public void sendNotification(String message) {\n        \/\/ SMS\u9001\u4fe1\u306e\u5b9f\u88c5\n    }\n}\n\n\/\/ \u30d5\u30a1\u30af\u30c8\u30ea\u30af\u30e9\u30b9\npublic class NotificationFactory {\n    public NotificationService createNotification(String channel) {\n        switch (channel) {\n            case \"EMAIL\":\n                return new EmailNotification();\n            case \"SMS\":\n                return new SMSNotification();\n            default:\n                throw new IllegalArgumentException(\"Unknown channel \" + channel);\n        }\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nNotificationFactory factory = new NotificationFactory();\nNotificationService service = factory.createNotification(\"EMAIL\");\nservice.sendNotification(\"Hello!\");<\/pre>\n\n\n<div id=\"sgb-css-id-74\">\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\"><strong>\u4f7f\u7528\u30b7\u30fc\u30f3<\/strong><\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\">\n<ul class=\"wp-block-list\"><div id=\"sgb-css-id-72\">\n<li>\u30d7\u30e9\u30b0\u30a4\u30f3\u6a5f\u80fd\u306e\u5b9f\u88c5<\/li>\n<\/div>\n\n<div id=\"sgb-css-id-73\">\n<li>\u74b0\u5883\u4f9d\u5b58\u306e\u5b9f\u88c5\u5207\u308a\u66ff\u3048<\/li>\n<\/div>\n\n\n<li>\u30c6\u30b9\u30c8\u7528\u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210<\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n\n<div id=\"sgb-css-id-75\">\n<h3 class=\"wp-block-heading\" id=\"i-10\">2.3 Observer \u30d1\u30bf\u30fc\u30f3\u3067\u30a4\u30d9\u30f3\u30c8\u51e6\u7406\u3092\u6539\u5584<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-76\">\n<p>Observer\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u9593\u306e1\u5bfe\u591a\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u5b9a\u7fa9\u3057\u3001\u3042\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u72b6\u614b\u304c\u5909\u5316\u3057\u305f\u969b\u306b\u3001\u4f9d\u5b58\u3059\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u81ea\u52d5\u7684\u306b\u901a\u77e5\u3059\u308b\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import java.util.*;\n\n\/\/ Subject\uff08\u89b3\u5bdf\u5bfe\u8c61\uff09\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\npublic interface Subject {\n    void registerObserver(Observer observer);\n    void removeObserver(Observer observer);\n    void notifyObservers();\n}\n\n\/\/ Observer\uff08\u89b3\u5bdf\u8005\uff09\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\npublic interface Observer {\n    void update(String message);\n}\n\n\/\/ \u5177\u4f53\u7684\u306aSubject\u30af\u30e9\u30b9\npublic class NewsAgency implements Subject {\n    private List&lt;Observer&gt; observers = new ArrayList&lt;&gt;();\n    private String news;\n\n    @Override\n    public void registerObserver(Observer observer) {\n        observers.add(observer);\n    }\n\n    @Override\n    public void removeObserver(Observer observer) {\n        observers.remove(observer);\n    }\n\n    @Override\n    public void notifyObservers() {\n        for (Observer observer : observers) {\n            observer.update(news);\n        }\n    }\n\n    public void setNews(String news) {\n        this.news = news;\n        notifyObservers();\n    }\n}\n\n\/\/ \u5177\u4f53\u7684\u306aObserver\u30af\u30e9\u30b9\npublic class NewsChannel implements Observer {\n    private String name;\n\n    public NewsChannel(String name) {\n        this.name = name;\n    }\n\n    @Override\n    public void update(String news) {\n        System.out.println(name + \" received news: \" + news);\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nNewsAgency newsAgency = new NewsAgency();\nNewsChannel bbcNews = new NewsChannel(\"BBC\");\nNewsChannel cnnNews = new NewsChannel(\"CNN\");\n\nnewsAgency.registerObserver(bbcNews);\nnewsAgency.registerObserver(cnnNews);\nnewsAgency.setNews(\"Breaking News!\");<\/pre>\n\n\n<div id=\"sgb-css-id-77\">\n<h3 class=\"wp-block-heading\" id=\"i-11\">2.4 Strategy \u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5207\u308a\u66ff\u3048<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-78\">\n<p>Strategy\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u30ab\u30d7\u30bb\u30eb\u5316\u3057\u3001\u5b9f\u884c\u6642\u306b\u67d4\u8edf\u306b\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Strategy \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\npublic interface PaymentStrategy {\n    void pay(int amount);\n}\n\n\/\/ \u5177\u4f53\u7684\u306aStrategy\u5b9f\u88c5\npublic class CreditCardPayment implements PaymentStrategy {\n    private String cardNumber;\n\n    public CreditCardPayment(String cardNumber) {\n        this.cardNumber = cardNumber;\n    }\n\n    @Override\n    public void pay(int amount) {\n        System.out.println(\"Paid \" + amount + \" using Credit Card: \" + cardNumber);\n    }\n}\n\npublic class PayPalPayment implements PaymentStrategy {\n    private String email;\n\n    public PayPalPayment(String email) {\n        this.email = email;\n    }\n\n    @Override\n    public void pay(int amount) {\n        System.out.println(\"Paid \" + amount + \" using PayPal account: \" + email);\n    }\n}\n\n\/\/ Context \u30af\u30e9\u30b9\npublic class ShoppingCart {\n    private PaymentStrategy paymentStrategy;\n\n    public void setPaymentStrategy(PaymentStrategy strategy) {\n        this.paymentStrategy = strategy;\n    }\n\n    public void checkout(int amount) {\n        paymentStrategy.pay(amount);\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nShoppingCart cart = new ShoppingCart();\ncart.setPaymentStrategy(new CreditCardPayment(\"1234-5678-9012-3456\"));\ncart.checkout(100);<\/pre>\n\n\n<div id=\"sgb-css-id-79\">\n<h3 class=\"wp-block-heading\" id=\"i-12\">2.5 Decorator \u30d1\u30bf\u30fc\u30f3\u3067\u6a5f\u80fd\u3092\u52d5\u7684\u306b\u8ffd\u52a0<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-80\">\n<p>Decorator\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u65e2\u5b58\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u65b0\u3057\u3044\u6a5f\u80fd\u3092\u52d5\u7684\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\npublic interface Coffee {\n    String getDescription();\n    double getCost();\n}\n\n\/\/ \u57fa\u672c\u5b9f\u88c5\npublic class SimpleCoffee implements Coffee {\n    @Override\n    public String getDescription() {\n        return \"Simple Coffee\";\n    }\n\n    @Override\n    public double getCost() {\n        return 1.0;\n    }\n}\n\n\/\/ Decorator\u57fa\u5e95\u30af\u30e9\u30b9\npublic abstract class CoffeeDecorator implements Coffee {\n    protected Coffee decoratedCoffee;\n\n    public CoffeeDecorator(Coffee coffee) {\n        this.decoratedCoffee = coffee;\n    }\n\n    @Override\n    public String getDescription() {\n        return decoratedCoffee.getDescription();\n    }\n\n    @Override\n    public double getCost() {\n        return decoratedCoffee.getCost();\n    }\n}\n\n\/\/ \u5177\u4f53\u7684\u306aDecorator\npublic class MilkDecorator extends CoffeeDecorator {\n    public MilkDecorator(Coffee coffee) {\n        super(coffee);\n    }\n\n    @Override\n    public String getDescription() {\n        return super.getDescription() + \", with Milk\";\n    }\n\n    @Override\n    public double getCost() {\n        return super.getCost() + 0.5;\n    }\n}\n\n\/\/ \u4f7f\u7528\u4f8b\nCoffee coffee = new SimpleCoffee();\ncoffee = new MilkDecorator(coffee);\nSystem.out.println(coffee.getDescription() + \" costs: $\" + coffee.getCost());<\/pre>\n\n\n<div id=\"sgb-css-id-81\">\n<p>\u5404\u30d1\u30bf\u30fc\u30f3\u306e\u4f7f\u7528\u6642\u306e\u6ce8\u610f\u70b9\uff1a<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-82\">\n<p>\u30001. <strong>Singleton<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-83\">\n<p>\u3000\u3000\u25cf \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u74b0\u5883\u3067\u306e\u540c\u671f\u51e6\u7406\u306b\u6ce8\u610f<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-84\">\n<p>\u3000\u3000\u25cf \u30c6\u30b9\u30c8\u6642\u306e\u5f71\u97ff\u3092\u8003\u616e<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-85\">\n<p>\u30002. <strong>Factory Method<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-86\">\n<p>\u3000\u3000\u25cf \u30d5\u30a1\u30af\u30c8\u30ea\u30af\u30e9\u30b9\u306e\u8cac\u52d9\u3092\u660e\u78ba\u306b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-87\">\n<p>\u3000\u3000\u25cf \u904e\u5ea6\u306a\u968e\u5c64\u5316\u3092\u907f\u3051\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-88\">\n<p>\u30003. <strong>Observer<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-89\">\n<p>\u3000\u3000\u25cf \u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306b\u6ce8\u610f\uff08\u89b3\u5bdf\u8005\u306e\u89e3\u9664\u5fd8\u308c\uff09<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-90\">\n<p>\u3000\u3000\u25cf \u5faa\u74b0\u53c2\u7167\u3092\u907f\u3051\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-91\">\n<p>\u30004. <strong>Strategy<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-92\">\n<p>\u3000\u3000\u25cf \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u8a2d\u8a08\u3092\u614e\u91cd\u306b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-93\">\n<p>\u3000\u3000\u25cf \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u30b9\u30c8\u30e9\u30c6\u30b8\u30fc\u306e\u8cac\u52d9\u5206\u62c5<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-94\">\n<p>\u30005. <strong>Decorator<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-95\">\n<p>\u3000\u3000\u25cf \u30c7\u30b3\u30ec\u30fc\u30bf\u306e\u7d44\u307f\u5408\u308f\u305b\u9806\u5e8f\u306b\u6ce8\u610f<\/p>\n<\/div>\n\n\n<p>\u3000\u3000\u25cf \u904e\u5ea6\u306a\u88c5\u98fe\u3092\u907f\u3051\u308b<\/p>\n\n\n<div id=\"sgb-css-id-96\">\n<p>\u3053\u308c\u3089\u306e\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u9069\u5207\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u3068\u62e1\u5f35\u6027\u3092\u5927\u304d\u304f\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-97\">\n<h2 class=\"wp-block-heading\" id=\"i-13\">\uff13\uff0e\u5b9f\u8df5\u7684\u306a\u5834\u9762\u3067\u4f7f\u3048\u308b\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u6d3b\u7528\u8853<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-98\">\n<h3 class=\"wp-block-heading\" id=\"i-14\">3.1 \u30b7\u30fc\u30f3\u5225\u304a\u3059\u3059\u3081\u30d1\u30bf\u30fc\u30f3\u306e\u9078\u3073\u65b9<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-99\">\n<p>\u5b9f\u8df5\u7684\u306a\u958b\u767a\u3067\u306f\u3001\u554f\u984c\u306e\u6027\u8cea\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u3088\u304f\u3042\u308b\u958b\u767a\u30b7\u30fc\u30f3\u3068\u304a\u3059\u3059\u3081\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"id-a0642f0e-c8a4-4e73-80b4-3a5d432ca404\"><div id=\"sgb-css-id-100\">\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u958b\u767a\u30b7\u30fc\u30f3<\/th><th>\u304a\u3059\u3059\u3081\u30d1\u30bf\u30fc\u30f3<\/th><th>\u9078\u629e\u7406\u7531<\/th><\/tr><\/thead><tbody><tr><td>\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u5c64\u306e\u5b9f\u88c5<\/td><td>Factory Method, Abstract Factory<\/td><td>\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u306e\u5207\u308a\u66ff\u3048\u304c\u5bb9\u6613\u306b\u306a\u308b<\/td><\/tr><tr><td>Web API\u306e\u5b9f\u88c5<\/td><td>Strategy, Template Method<\/td><td>\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3054\u3068\u306e\u51e6\u7406\u3092\u67d4\u8edf\u306b\u5909\u66f4\u53ef\u80fd<\/td><\/tr><tr><td>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u5b9f\u88c5<\/td><td>Command, Chain of Responsibility<\/td><td>\u51e6\u7406\u306e\u9806\u5e8f\u5909\u66f4\u3084\u65b0\u898f\u8ffd\u52a0\u304c\u5bb9\u6613<\/td><\/tr><tr><td>\u5916\u90e8\u30b7\u30b9\u30c6\u30e0\u9023\u643a<\/td><td>Adapter, Facade<\/td><td>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u9055\u3044\u3092\u5438\u53ce\u3067\u304d\u308b<\/td><\/tr><tr><td>\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u69cb\u306e\u5b9f\u88c5<\/td><td>Proxy, Decorator<\/td><td>\u65e2\u5b58\u30b3\u30fc\u30c9\u3092\u5909\u66f4\u305b\u305a\u306b\u6a5f\u80fd\u8ffd\u52a0\u53ef\u80fd<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div><\/div>\n\n<div id=\"sgb-css-id-101\">\n<h3 class=\"wp-block-heading\" id=\"i-15\">3.2 \u30d1\u30bf\u30fc\u30f3\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-102\">\n<p>\u8907\u6570\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u67d4\u8edf\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u8a2d\u8a08\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306f\u5b9f\u8df5\u7684\u306a\u7d44\u307f\u5408\u308f\u305b\u4f8b\u3067\u3059\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Factory Method\u3068Strategy\u30d1\u30bf\u30fc\u30f3\u306e\u7d44\u307f\u5408\u308f\u305b\u4f8b\npublic interface DataProcessor {\n    void processData(String data);\n}\n\n\/\/ \u5177\u4f53\u7684\u306aStrategy\u5b9f\u88c5\npublic class CSVProcessor implements DataProcessor {\n    @Override\n    public void processData(String data) {\n        System.out.println(\"Processing CSV: \" + data);\n    }\n}\n\npublic class JSONProcessor implements DataProcessor {\n    @Override\n    public void processData(String data) {\n        System.out.println(\"Processing JSON: \" + data);\n    }\n}\n\n\/\/ Factory Method\npublic abstract class ProcessorFactory {\n    public abstract DataProcessor createProcessor();\n\n    \/\/ \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e1\u30bd\u30c3\u30c9\u30d1\u30bf\u30fc\u30f3\u3082\u7d44\u307f\u5408\u308f\u305b\u308b\n    public final void processDataWithLogging(String data) {\n        System.out.println(\"Start processing...\");\n        DataProcessor processor = createProcessor();\n        processor.processData(data);\n        System.out.println(\"End processing.\");\n    }\n}\n\n\/\/ \u5177\u4f53\u7684\u306aFactory\npublic class CSVProcessorFactory extends ProcessorFactory {\n    @Override\n    public DataProcessor createProcessor() {\n        return new CSVProcessor();\n    }\n}\n\n\/\/ Decorator\u30d1\u30bf\u30fc\u30f3\u3067\u30ed\u30b0\u3084Validation\u6a5f\u80fd\u3092\u8ffd\u52a0\npublic class LoggingDecorator implements DataProcessor {\n    private DataProcessor processor;\n\n    public LoggingDecorator(DataProcessor processor) {\n        this.processor = processor;\n    }\n\n    @Override\n    public void processData(String data) {\n        System.out.println(\"Logging: Start\");\n        processor.processData(data);\n        System.out.println(\"Logging: End\");\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-103\">\n<h3 class=\"wp-block-heading\" id=\"i-16\">3.3 Spring Framework\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-104\">\n<p>Spring Framework\u306f\u591a\u304f\u306e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u6d3b\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u4e3b\u8981\u306a\u4f8b\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-105\">\n<p><strong>1. Dependency Injection\uff08DI\uff09\u30d1\u30bf\u30fc\u30f3<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Service\npublic class UserService {\n    private final UserRepository userRepository;\n\n    \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\n    @Autowired\n    public UserService(UserRepository userRepository) {\n        this.userRepository = userRepository;\n    }\n\n    public User findById(Long id) {\n        return userRepository.findById(id)\n            .orElseThrow(() -&gt; new UserNotFoundException(id));\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-106\">\n<p><strong>2. Template Method\u30d1\u30bf\u30fc\u30f3\uff08JdbcTemplate\uff09<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Repository\npublic class JdbcUserRepository implements UserRepository {\n    private final JdbcTemplate jdbcTemplate;\n\n    @Autowired\n    public JdbcUserRepository(JdbcTemplate jdbcTemplate) {\n        this.jdbcTemplate = jdbcTemplate;\n    }\n\n    public User findById(Long id) {\n        return jdbcTemplate.queryForObject(\n            \"SELECT * FROM users WHERE id = ?\",\n            new Object[]{id},\n            (rs, rowNum) -&gt;\n                new User(\n                    rs.getLong(\"id\"),\n                    rs.getString(\"name\"),\n                    rs.getString(\"email\")\n                )\n        );\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-107\">\n<p><strong>3. Proxy \u30d1\u30bf\u30fc\u30f3\uff08AOP\uff09<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Aspect\n@Component\npublic class LoggingAspect {\n    private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);\n\n    @Around(\"execution(* com.example.service.*.*(..))\")\n    public Object logMethodExecution(ProceedingJoinPoint joinPoint) throws Throwable {\n        String methodName = joinPoint.getSignature().getName();\n        logger.info(\"Starting method: \" + methodName);\n\n        try {\n            Object result = joinPoint.proceed();\n            logger.info(\"Completed method: \" + methodName);\n            return result;\n        } catch (Exception e) {\n            logger.error(\"Error in method: \" + methodName, e);\n            throw e;\n        }\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-108\">\n<p><strong>4. Observer \u30d1\u30bf\u30fc\u30f3\uff08\u30a4\u30d9\u30f3\u30c8\u51e6\u7406\uff09<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Component\npublic class UserEventPublisher {\n    private final ApplicationEventPublisher publisher;\n\n    @Autowired\n    public UserEventPublisher(ApplicationEventPublisher publisher) {\n        this.publisher = publisher;\n    }\n\n    public void publishUserCreated(User user) {\n        UserCreatedEvent event = new UserCreatedEvent(this, user);\n        publisher.publishEvent(event);\n    }\n}\n\n@Component\npublic class UserEventListener {\n    @EventListener\n    public void handleUserCreatedEvent(UserCreatedEvent event) {\n        User user = event.getUser();\n        \/\/ \u30a4\u30d9\u30f3\u30c8\u51e6\u7406\u30ed\u30b8\u30c3\u30af\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-118\">\n<div class=\"wp-block-sgb-block-simple sgb-box-simple sgb-box-simple--title-normal sgb-box-simple--with-border\"><div style=\"background-color:var(--wp--preset--color--sango-main);color:#FFF\" class=\"sgb-box-simple__title\">\u5b9f\u8df5\u7684\u306a\u30d1\u30bf\u30fc\u30f3\u9069\u7528\u306e\u30dd\u30a4\u30f3\u30c8<\/div><div class=\"sgb-box-simple__body\" style=\"border-color:var(--wp--preset--color--sango-main);background-color:#FFF\"><div id=\"sgb-css-id-109\">\n<p><strong>1. \u6bb5\u968e\u7684\u306a\u5c0e\u5165<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-110\">\n<p>\u3000\u25cf \u4e00\u5ea6\u306b\u3059\u3079\u3066\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u5c0e\u5165\u305b\u305a\u3001\u5fc5\u8981\u6027\u306e\u9ad8\u3044\u3082\u306e\u304b\u3089\u9806\u6b21\u5c0e\u5165<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-111\">\n<p>\u3000\u25cf \u65e2\u5b58\u30b3\u30fc\u30c9\u3078\u306e\u5f71\u97ff\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-112\">\n<p><strong>2. \u30d1\u30bf\u30fc\u30f3\u306e\u7d44\u307f\u5408\u308f\u305b\u65b9<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-113\">\n<p>\u3000\u25cf \u5358\u4e00\u30d1\u30bf\u30fc\u30f3\u3067\u306f\u89e3\u6c7a\u3067\u304d\u306a\u3044\u554f\u984c\u306b\u5bfe\u3057\u3066\u8907\u6570\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u7d44\u307f\u5408\u308f\u305b\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-114\">\n<p>\u3000\u25cf \u30d1\u30bf\u30fc\u30f3\u9593\u306e\u76f8\u4e92\u4f5c\u7528\u3092\u8003\u616e\u3059\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-115\">\n<p><strong>3. \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u6574\u5408\u6027<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-116\">\n<p>\u3000\u25cf \u30ab\u30b9\u30bf\u30e0\u30d1\u30bf\u30fc\u30f3\u3068\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u30d1\u30bf\u30fc\u30f3\u306e\u4f75\u7528\u3092\u691c\u8a0e\u3059\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-117\">\n<p>\u3000\u25cf \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u63d0\u4f9b\u3059\u308b\u30d1\u30bf\u30fc\u30f3\u5b9f\u88c5\u3092\u6d3b\u7528\u3059\u308b<\/p>\n<\/div><\/div><\/div>\n<\/div>\n\n<div id=\"sgb-css-id-119\">\n<h2 class=\"wp-block-heading\" id=\"i-17\">\uff14\uff0e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u9069\u7528\u6642\u306e\u6ce8\u610f\u70b9\u3068\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-120\">\n<h3 class=\"wp-block-heading\" id=\"i-18\">4.1 \u904e\u5270\u306a\u9069\u7528\u3092\u907f\u3051\u308b\u305f\u3081\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-121\">\n<p>\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u904e\u5270\u9069\u7528\uff08\u30aa\u30fc\u30d0\u30fc\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\uff09\u306f\u3001\u304b\u3048\u3063\u3066\u30b3\u30fc\u30c9\u3092\u8907\u96d1\u306b\u3057\u3001\u4fdd\u5b88\u6027\u3092\u4f4e\u4e0b\u3055\u305b\u308b\u539f\u56e0\u3068\u306a\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u53c2\u8003\u306b\u3001\u9069\u5207\u306a\u9069\u7528\u3092\u5fc3\u304c\u3051\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-122\">\n<h4 class=\"wp-block-heading\" id=\"i-19\">1. \u30d1\u30bf\u30fc\u30f3\u9069\u7528\u306e\u5224\u65ad\u57fa\u6e96<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-123\">\n<p>\u4ee5\u4e0b\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3001\u30d1\u30bf\u30fc\u30f3\u9069\u7528\u306e\u5fc5\u8981\u6027\u3092\u5224\u65ad\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-124\">\n<p>\u3000\u25cf \u73fe\u5728\u306e\u5b9f\u88c5\u3067\u5177\u4f53\u7684\u306a\u554f\u984c\u304c\u767a\u751f\u3057\u3066\u3044\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-125\">\n<p>\u3000\u25cf \u5c06\u6765\u7684\u306a\u62e1\u5f35\u6027\u304c\u78ba\u5b9f\u306b\u5fc5\u8981\u3067\u3042\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-126\">\n<p>\u3000\u25cf \u30d1\u30bf\u30fc\u30f3\u9069\u7528\u306b\u3088\u308b\u5229\u70b9\u304c\u5b9f\u88c5\u30b3\u30b9\u30c8\u3092\u4e0a\u56de\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-127\">\n<p>\u3000\u25cf \u30c1\u30fc\u30e0\u30e1\u30f3\u30d0\u30fc\u304c\u30d1\u30bf\u30fc\u30f3\u3092\u7406\u89e3\u3067\u304d\u308b<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u904e\u5270\u306a\u30d1\u30bf\u30fc\u30f3\u9069\u7528\u306e\u4f8b\n\/\/ \u5358\u7d14\u306a\u51e6\u7406\u306b\u5bfe\u3057\u3066\u4e0d\u5fc5\u8981\u306bFactory\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\npublic class LoggerFactory {\n    public static Logger createLogger() {\n        return new SimpleLogger(); \/\/ \u4ed6\u306e\u5b9f\u88c5\u306e\u4e88\u5b9a\u306a\u3057\n    }\n}\n\n\/\/ \u3088\u308a\u9069\u5207\u306a\u5b9f\u88c5\npublic class Logger {\n    public void log(String message) {\n        System.out.println(message);\n    }\n}\n\n\/\/ \u30d1\u30bf\u30fc\u30f3\u9069\u7528\u304c\u9069\u5207\u306a\u4f8b\n\/\/ \u8907\u6570\u306e\u30ed\u30b0\u51fa\u529b\u5148\u304c\u5b58\u5728\u3057\u3001\u5b9f\u884c\u6642\u306b\u5207\u308a\u66ff\u3048\u304c\u5fc5\u8981\u306a\u5834\u5408\npublic interface Logger {\n    void log(String message);\n}\n\npublic class ConsoleLogger implements Logger {\n    @Override\n    public void log(String message) {\n        System.out.println(message);\n    }\n}\n\npublic class FileLogger implements Logger {\n    private String filePath;\n\n    public FileLogger(String filePath) {\n        this.filePath = filePath;\n    }\n\n    @Override\n    public void log(String message) {\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u3078\u306e\u66f8\u304d\u8fbc\u307f\u51e6\u7406\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-128\">\n<h4 class=\"wp-block-heading\" id=\"i-20\">\u3088\u304f\u3042\u308b\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\u3068\u305d\u306e\u5bfe\u51e6\u6cd5<\/h4>\n<\/div>\n\n<div id=\"id-f5c2d3e7-3a42-42f8-9d93-8af36b26b142\"><div id=\"sgb-css-id-129\">\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3<\/th><th>\u554f\u984c\u70b9<\/th><th>\u6539\u5584\u65b9\u6cd5<\/th><\/tr><\/thead><tbody><tr><td>\u30b7\u30f3\u30b0\u30eb\u30c8\u30f3\u306e\u4e71\u7528<\/td><td>\u30c6\u30b9\u30c8\u56f0\u96e3\u3001\u72b6\u614b\u7ba1\u7406\u306e\u8907\u96d1\u5316<\/td><td>\u4f9d\u5b58\u6027\u6ce8\u5165\u306e\u6d3b\u7528<\/td><\/tr><tr><td>\u904e\u5270\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u5206\u5272<\/td><td>\u30b3\u30fc\u30c9\u91cf\u5897\u52a0\u3001\u4fdd\u5b88\u6027\u4f4e\u4e0b<\/td><td>ISP\u539f\u5247\u306b\u57fa\u3065\u304f\u9069\u5207\u306a\u5206\u5272<\/td><\/tr><tr><td>\u30c7\u30b3\u30ec\u30fc\u30bf\u306e\u9023\u9396<\/td><td>\u51e6\u7406\u30d5\u30ed\u30fc\u306e\u8ffd\u8de1\u56f0\u96e3<\/td><td>Composite\u30d1\u30bf\u30fc\u30f3\u306e\u691c\u8a0e<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div><\/div>\n\n<div id=\"sgb-css-id-130\">\n<h3 class=\"wp-block-heading\" id=\"i-21\">4.2 \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u5f71\u97ff\u3068\u5bfe\u7b56<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-131\">\n<p>\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u9069\u7528\u306f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u4e3b\u306a\u5f71\u97ff\u3068\u5bfe\u7b56\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305fProxy\u5b9f\u88c5\u4f8b\npublic class ExpensiveObjectProxy implements ExpensiveObject {\n    private ExpensiveObject object;\n    private Map&lt;String, Object&gt; cache = new ConcurrentHashMap&lt;&gt;();\n\n    @Override\n    public Object heavyOperation(String param) {\n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30c1\u30a7\u30c3\u30af\n        if (cache.containsKey(param)) {\n            return cache.get(param);\n        }\n\n        \/\/ \u5fc5\u8981\u306a\u6642\u3060\u3051\u5b9f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\uff08\u9045\u5ef6\u521d\u671f\u5316\uff09\n        if (object == null) {\n            object = new ExpensiveObjectImpl();\n        }\n\n        Object result = object.heavyOperation(param);\n        cache.put(param, result);\n        return result;\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-132\">\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30dd\u30a4\u30f3\u30c8\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-133\">\n<p><strong>1. \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-134\">\n<p>\u3000\u25cf \u5fc5\u8981\u306a\u3068\u304d\u3060\u3051\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\uff08\u9045\u5ef6\u521d\u671f\u5316\uff09<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-135\">\n<p>\u3000\u25cf \u9069\u5207\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u63a1\u7528<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-136\">\n<p>\u3000\u25cf \u4e0d\u8981\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u65e9\u671f\u89e3\u653e<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-137\">\n<p><strong>2. \u5b9f\u884c\u901f\u5ea6\u306e\u6700\u9069\u5316<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u6700\u9069\u5316\u524d\n   public class ChainedValidators {\n       private List&lt;Validator&gt; validators;\n\n       public boolean validate(Object target) {\n           return validators.stream()\n                          .allMatch(v -&gt; v.validate(target));\n       }\n   }\n\n   \/\/ \u6700\u9069\u5316\u5f8c\n   public class ChainedValidators {\n       private List&lt;Validator&gt; validators;\n\n       public boolean validate(Object target) {\n           for (Validator validator : validators) {\n               if (!validator.validate(target)) {\n                   return false; \/\/ \u65e9\u671f\u30ea\u30bf\u30fc\u30f3\n               }\n           }\n           return true;\n       }\n   }<\/pre>\n\n\n<div id=\"sgb-css-id-138\">\n<h3 class=\"wp-block-heading\" id=\"i-22\">4.3 \u30c1\u30fc\u30e0\u958b\u767a\u306b\u304a\u3051\u308b\u5408\u610f\u5f62\u6210\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-139\">\n<p>\u30d1\u30bf\u30fc\u30f3\u9069\u7528\u306e\u6210\u529f\u306b\u306f\u30c1\u30fc\u30e0\u306e\u5408\u610f\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u610f\u8b58\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-140\">\n<p><strong>1. \u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u91cd\u8981\u6027<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/**\n * \u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u306eStrategy\u5b9f\u88c5\n * \n * &lt;h2&gt;\u30d1\u30bf\u30fc\u30f3\u9078\u629e\u7406\u7531&lt;\/h2&gt;\n * - \u8a8d\u8a3c\u65b9\u5f0f\u306e\u8ffd\u52a0\u30fb\u5909\u66f4\u304c\u983b\u7e41\u306b\u767a\u751f\n * - \u8a8d\u8a3c\u30ed\u30b8\u30c3\u30af\u306e\u5206\u96e2\u304c\u5fc5\u8981\n * \n * &lt;h2&gt;\u4f7f\u7528\u65b9\u6cd5&lt;\/h2&gt;\n * &lt;pre&gt;{@code\n * AuthenticationStrategy strategy = new OAuthStrategy();\n * authenticator.setStrategy(strategy);\n * authenticator.authenticate(credentials);\n * }&lt;\/pre&gt;\n *\/\npublic interface AuthenticationStrategy {\n    boolean authenticate(Credentials credentials);\n}<\/pre>\n\n\n<div id=\"sgb-css-id-141\">\n<p><strong>2. \u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u30dd\u30a4\u30f3\u30c8<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-142\">\n<p>\u3000\u25cf \u30d1\u30bf\u30fc\u30f3\u9069\u7528\u306e\u59a5\u5f53\u6027<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-143\">\n<p>\u3000\u25cf \u547d\u540d\u898f\u5247\u306e\u4e00\u8cab\u6027<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-144\">\n<p>\u3000\u25cf \u30c6\u30b9\u30c8\u306e\u5145\u5b9f\u5ea6<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-145\">\n<p>\u3000\u25cf \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5b8c\u5099<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-146\">\n<p><strong>3. \u30c1\u30fc\u30e0\u5185\u3067\u306e\u77e5\u8b58\u5171\u6709<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-147\">\n<p>\u3000\u25cf \u5b9a\u671f\u7684\u306a\u8a2d\u8a08\u30ec\u30d3\u30e5\u30fc<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-148\">\n<p>\u3000\u25cf \u30d1\u30bf\u30fc\u30f3\u9069\u7528\u4e8b\u4f8b\u306e\u5171\u6709<\/p>\n<\/div>\n\n\n<p>\u3000\u25cf \u65b0\u30e1\u30f3\u30d0\u30fc\u3078\u306e\u6559\u80b2\u30d7\u30e9\u30f3<\/p>\n\n\n<div id=\"sgb-css-id-149\">\n<p>\u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3\u306e\u5177\u4f53\u4f8b\u3068\u5bfe\u7b56\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30a2\u30f3\u30c1\u30d1\u30bf\u30fc\u30f3: God\u30af\u30e9\u30b9\npublic class UserManager {\n    public void createUser() { \/* ... *\/ }\n    public void updateUser() { \/* ... *\/ }\n    public void deleteUser() { \/* ... *\/ }\n    public void sendEmail() { \/* ... *\/ }\n    public void generateReport() { \/* ... *\/ }\n    public void validateData() { \/* ... *\/ }\n    \/\/ \u3055\u3089\u306b\u591a\u304f\u306e\u30e1\u30bd\u30c3\u30c9...\n}\n\n\/\/ \u6539\u5584\u5f8c: \u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247\u306b\u5f93\u3063\u305f\u8a2d\u8a08\npublic class UserService {\n    private final UserRepository repository;\n    private final EmailService emailService;\n    private final ReportGenerator reportGenerator;\n\n    public UserService(\n        UserRepository repository,\n        EmailService emailService,\n        ReportGenerator reportGenerator\n    ) {\n        this.repository = repository;\n        this.emailService = emailService;\n        this.reportGenerator = reportGenerator;\n    }\n\n    public User createUser(UserDto dto) {\n        return repository.save(dto.toEntity());\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-150\">\n<h2 class=\"wp-block-heading\" id=\"i-23\">\uff15\uff0e\u5b9f\u8df5\u6f14\u7fd2\uff1a\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u3063\u305f\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u4f8b<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-151\">\n<h3 class=\"wp-block-heading\" id=\"i-24\">5.1 \u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u3078\u306e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u9069\u7528<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-152\">\n<p>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3088\u304f\u906d\u9047\u3059\u308b\u3001\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306e\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u4f8b\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-153\">\n<h4 class=\"wp-block-heading\" id=\"i-25\">\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u524d\u306e\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8ab2\u984c\u306e\u3042\u308b\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\npublic class OrderProcessor {\n    private Connection dbConnection;\n\n    public void processOrder(Order order) {\n        \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u51e6\u7406\n        try {\n            dbConnection = DriverManager.getConnection(\"jdbc:mysql:\/\/localhost:3306\/shop\");\n            PreparedStatement stmt = dbConnection.prepareStatement(\n                \"INSERT INTO orders (customer_id, total_amount) VALUES (?, ?)\"\n            );\n            stmt.setLong(1, order.getCustomerId());\n            stmt.setDouble(2, order.getTotalAmount());\n            stmt.executeUpdate();\n\n            \/\/ \u30e1\u30fc\u30eb\u9001\u4fe1\u51e6\u7406\n            String to = order.getCustomerEmail();\n            String subject = \"\u6ce8\u6587\u78ba\u8a8d\";\n            String body = \"\u3054\u6ce8\u6587\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002\u6ce8\u6587\u756a\u53f7: \" + order.getId();\n            sendEmail(to, subject, body);\n\n            \/\/ \u5728\u5eab\u66f4\u65b0\n            updateInventory(order.getItems());\n\n        } catch (SQLException e) {\n            e.printStackTrace();\n        } finally {\n            try {\n                if (dbConnection != null) dbConnection.close();\n            } catch (SQLException e) {\n                e.printStackTrace();\n            }\n        }\n    }\n\n    private void sendEmail(String to, String subject, String body) {\n        \/\/ \u30e1\u30fc\u30eb\u9001\u4fe1\u306e\u5b9f\u88c5\n    }\n\n    private void updateInventory(List&lt;OrderItem&gt; items) {\n        \/\/ \u5728\u5eab\u66f4\u65b0\u306e\u5b9f\u88c5\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-154\">\n<h4 class=\"wp-block-heading\" id=\"i-26\">\u30d1\u30bf\u30fc\u30f3\u3092\u9069\u7528\u3057\u305f\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u5f8c\u306e\u30b3\u30fc\u30c9<\/h4>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\uff08Repository Pattern\uff09\npublic interface OrderRepository {\n    void save(Order order);\n}\n\n\/\/ \u30e1\u30fc\u30eb\u9001\u4fe1\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\uff08Strategy Pattern\uff09\npublic interface EmailService {\n    void sendEmail(String to, String subject, String body);\n}\n\n\/\/ \u5728\u5eab\u7ba1\u7406\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\uff08Strategy Pattern\uff09\npublic interface InventoryService {\n    void updateInventory(List&lt;OrderItem&gt; items);\n}\n\n\/\/ \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e1\u30bd\u30c3\u30c9\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u305f\u30d9\u30fc\u30b9\u51e6\u7406\npublic abstract class OrderProcessorTemplate {\n    protected abstract void saveOrder(Order order);\n    protected abstract void notifyCustomer(Order order);\n    protected abstract void updateInventory(Order order);\n\n    \/\/ \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e1\u30bd\u30c3\u30c9\n    public final void processOrder(Order order) {\n        try {\n            saveOrder(order);\n            notifyCustomer(order);\n            updateInventory(order);\n        } catch (Exception e) {\n            handleError(e, order);\n        }\n    }\n\n    protected void handleError(Exception e, Order order) {\n        \/\/ \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n    }\n}\n\n\/\/ \u5177\u4f53\u7684\u306a\u5b9f\u88c5\uff08Dependency Injection Pattern\uff09\n@Service\npublic class ModernOrderProcessor extends OrderProcessorTemplate {\n    private final OrderRepository orderRepository;\n    private final EmailService emailService;\n    private final InventoryService inventoryService;\n\n    @Autowired\n    public ModernOrderProcessor(\n        OrderRepository orderRepository,\n        EmailService emailService,\n        InventoryService inventoryService\n    ) {\n        this.orderRepository = orderRepository;\n        this.emailService = emailService;\n        this.inventoryService = inventoryService;\n    }\n\n    @Override\n    protected void saveOrder(Order order) {\n        orderRepository.save(order);\n    }\n\n    @Override\n    protected void notifyCustomer(Order order) {\n        emailService.sendEmail(\n            order.getCustomerEmail(),\n            \"\u6ce8\u6587\u78ba\u8a8d\",\n            \"\u3054\u6ce8\u6587\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002\u6ce8\u6587\u756a\u53f7: \" + order.getId()\n        );\n    }\n\n    @Override\n    protected void updateInventory(Order order) {\n        inventoryService.updateInventory(order.getItems());\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-155\">\n<h3 class=\"wp-block-heading\" id=\"i-27\">5.2 \u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306e\u66f8\u304d\u65b9\u3068\u5b9f\u88c5\u306e\u8a55\u4fa1<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-156\">\n<p>\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u5f8c\u306e\u30b3\u30fc\u30c9\u306b\u5bfe\u3059\u308b\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5\u4f8b\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@ExtendWith(MockitoExtension.class)\npublic class ModernOrderProcessorTest {\n    @Mock\n    private OrderRepository orderRepository;\n\n    @Mock\n    private EmailService emailService;\n\n    @Mock\n    private InventoryService inventoryService;\n\n    @InjectMocks\n    private ModernOrderProcessor orderProcessor;\n\n    @Test\n    void processOrder_ShouldExecuteAllSteps() {\n        \/\/ Given\n        Order order = new Order();\n        order.setId(1L);\n        order.setCustomerEmail(\"test@example.com\");\n        order.setItems(Arrays.asList(new OrderItem()));\n\n        \/\/ When\n        orderProcessor.processOrder(order);\n\n        \/\/ Then\n        verify(orderRepository).save(order);\n        verify(emailService).sendEmail(\n            eq(\"test@example.com\"),\n            eq(\"\u6ce8\u6587\u78ba\u8a8d\"),\n            contains(\"\u6ce8\u6587\u756a\u53f7: 1\")\n        );\n        verify(inventoryService).updateInventory(order.getItems());\n    }\n\n    @Test\n    void processOrder_WhenRepositoryFails_ShouldHandleError() {\n        \/\/ Given\n        Order order = new Order();\n        doThrow(new RuntimeException(\"DB Error\"))\n            .when(orderRepository)\n            .save(any());\n\n        \/\/ When\n        orderProcessor.processOrder(order);\n\n        \/\/ Then\n        verify(orderRepository).save(order);\n        verifyNoInteractions(emailService);\n        verifyNoInteractions(inventoryService);\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-157\">\n<h3 class=\"wp-block-heading\" id=\"i-28\">5.3 \u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u30dd\u30a4\u30f3\u30c8\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-158\">\n<p>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u6642\u306e\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u3068\u3001\u305d\u308c\u305e\u308c\u306e\u5b9f\u88c5\u4f8b\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-159\">\n<p><strong>1. \u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247\uff08SRP\uff09\u306e\u9075\u5b88<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Good: \u8cac\u4efb\u304c\u660e\u78ba\u306b\u5206\u96e2\u3055\u308c\u3066\u3044\u308b\npublic class OrderEmailService implements EmailService {\n    private final EmailTemplateEngine templateEngine;\n    private final EmailSender emailSender;\n\n    @Override\n    public void sendEmail(String to, String subject, String body) {\n        String processedBody = templateEngine.process(body);\n        emailSender.send(to, subject, processedBody);\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-160\">\n<p><strong>2. \u4f9d\u5b58\u6027\u306e\u6ce8\u5165<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Good: \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\n@Service\npublic class InventoryServiceImpl implements InventoryService {\n    private final InventoryRepository repository;\n    private final StockValidator validator;\n\n    public InventoryServiceImpl(\n        InventoryRepository repository,\n        StockValidator validator\n    ) {\n        this.repository = repository;\n        this.validator = validator;\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-161\">\n<p><strong>3. \u4f8b\u5916\u51e6\u7406\u306e\u9069\u5207\u306a\u5b9f\u88c5<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class OrderProcessingException extends RuntimeException {\n    private final Order order;\n\n    public OrderProcessingException(String message, Order order, Throwable cause) {\n        super(message, cause);\n        this.order = order;\n    }\n\n    public Order getOrder() {\n        return order;\n    }\n}\n\n\/\/ \u4f8b\u5916\u3092\u30e9\u30c3\u30d7\u3057\u3066\u610f\u5473\u306e\u3042\u308b\u4f8b\u5916\u306b\u5909\u63db\nprotected void saveOrder(Order order) {\n    try {\n        orderRepository.save(order);\n    } catch (DataAccessException e) {\n        throw new OrderProcessingException(\n            \"\u6ce8\u6587\u306e\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\",\n            order,\n            e\n        );\n    }\n}<\/pre>\n\n\n<div id=\"sgb-css-id-162\">\n<p><strong>4. \u30c6\u30b9\u30c8\u306e\u7db2\u7f85\u6027<\/strong><\/p>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Test\nvoid processOrder_ShouldRollbackOnError() {\n    \/\/ Given\n    Order order = new Order();\n    doThrow(new RuntimeException())\n        .when(emailService)\n        .sendEmail(any(), any(), any());\n\n    \/\/ When\n    orderProcessor.processOrder(order);\n\n    \/\/ Then\n    verify(orderRepository).rollback(order.getId());\n}<\/pre>\n\n\n<div id=\"sgb-css-id-163\">\n<p>\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-164\">\n<p><strong>1. \u6bb5\u968e\u7684\u306a\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-165\">\n<p>\u3000\u25cf \u4e00\u5ea6\u306b\u5927\u304d\u306a\u5909\u66f4\u3092\u52a0\u3048\u306a\u3044<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-166\">\n<p>\u3000\u25cf \u5404\u30b9\u30c6\u30c3\u30d7\u3067\u30c6\u30b9\u30c8\u3092\u5b9f\u884c<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-167\">\n<p>\u3000\u25cf \u5909\u66f4\u3092\u30b3\u30df\u30c3\u30c8\u3059\u308b\u524d\u306b\u52d5\u4f5c\u78ba\u8a8d<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-168\">\n<p><strong>2. \u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u5411\u4e0a<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-169\">\n<p>\u3000\u25cf \u9069\u5207\u306a\u547d\u540d\u898f\u5247\u306e\u9069\u7528<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-170\">\n<p>\u3000\u25cf \u30b3\u30e1\u30f3\u30c8\u306e\u8ffd\u52a0<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-171\">\n<p>\u3000\u25cf \u30e1\u30bd\u30c3\u30c9\u306e\u62bd\u51fa<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-172\">\n<p><strong>3. \u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\uff08TDD\uff09\u306e\u6d3b\u7528<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-173\">\n<p>\u3000\u25cf \u30c6\u30b9\u30c8\u3092\u5148\u306b\u66f8\u304f<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-174\">\n<p>\u3000\u25cf \u5c0f\u3055\u306a\u5909\u66f4\u3092\u7e70\u308a\u8fd4\u3059<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-175\">\n<p>\u3000\u25cf \u30ea\u30b0\u30ec\u30c3\u30b7\u30e7\u30f3\u3092\u9632\u3050<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-176\">\n<h2 class=\"wp-block-heading\" id=\"i-29\">\u307e\u3068\u3081\uff1a\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528\u306b\u5411\u3051\u3066<\/h2>\n<\/div>\n\n<div id=\"sgb-css-id-177\">\n<h3 class=\"wp-block-heading\" id=\"i-30\">\u672c\u8a18\u4e8b\u306e\u307e\u3068\u3081<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-178\">\n<p>\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306b\u304a\u3051\u308b\u91cd\u8981\u306a\u30c4\u30fc\u30eb\u3067\u3059\u304c\u3001\u305d\u306e\u672c\u8cea\u306f\u300c\u9069\u5207\u306a\u5834\u9762\u3067\u9069\u5207\u306b\u4f7f\u7528\u3059\u308b\u300d\u3053\u3068\u306b\u3042\u308a\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3092\u901a\u3058\u3066\u5b66\u3093\u3067\u304d\u305f\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u3092\u6574\u7406\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-179\">\n<h4 class=\"wp-block-heading\" id=\"i-31\">1. \u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u6d3b\u7528\u306e3\u3064\u306e\u539f\u5247<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-180\">\n<p>\u3000\u25cf <strong>\u76ee\u7684\u9069\u5408\u6027<\/strong>\uff1a \u30d1\u30bf\u30fc\u30f3\u306f\u554f\u984c\u89e3\u6c7a\u306e\u624b\u6bb5\u3067\u3042\u308a\u3001\u76ee\u7684\u305d\u306e\u3082\u306e\u3067\u306f\u306a\u3044<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-181\">\n<p>\u3000\u25cf <strong>\u30b7\u30f3\u30d7\u30eb\u6027<\/strong>\uff1a \u5fc5\u8981\u4ee5\u4e0a\u306b\u8907\u96d1\u306a\u8a2d\u8a08\u3092\u907f\u3051\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-182\">\n<p>\u3000\u25cf <strong>\u30c1\u30fc\u30e0\u7406\u89e3<\/strong>\uff1a \u30c1\u30fc\u30e0\u30e1\u30f3\u30d0\u30fc\u5168\u54e1\u304c\u7406\u89e3\u3057\u7dad\u6301\u3067\u304d\u308b\u8a2d\u8a08\u3092\u9078\u629e\u3059\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-183\">\n<h4 class=\"wp-block-heading\" id=\"i-32\">2. \u5b9f\u8df5\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h4>\n<\/div>\n\n<div id=\"sgb-css-id-184\">\n<p>\u3000\u25cf \u89e3\u6c7a\u3057\u305f\u3044\u5177\u4f53\u7684\u306a\u554f\u984c\u304c\u660e\u78ba\u304b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-185\">\n<p>\u3000\u25cf \u9078\u629e\u3057\u305f\u30d1\u30bf\u30fc\u30f3\u306f\u6700\u9069\u306a\u89e3\u6c7a\u7b56\u304b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-186\">\n<p>\u3000\u25cf \u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u306f\u78ba\u4fdd\u3055\u308c\u3066\u3044\u308b\u304b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-187\">\n<p>\u3000\u25cf \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u5f71\u97ff\u306f\u8a31\u5bb9\u7bc4\u56f2\u304b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-188\">\n<p>\u3000\u25cf \u30c6\u30b9\u30c8\u306f\u66f8\u304d\u3084\u3059\u3044\u5b9f\u88c5\u306b\u306a\u3063\u3066\u3044\u308b\u304b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-189\">\n<h3 class=\"wp-block-heading\" id=\"i-33\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h3>\n<\/div>\n\n<div id=\"sgb-css-id-190\">\n<p>\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u5b66\u7fd2\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b9\u30c6\u30c3\u30d7\u3067\u9032\u3081\u3066\u3044\u304f\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-191\">\n<p>1. <strong>\u57fa\u672c\u30d1\u30bf\u30fc\u30f3\u306e\u7fd2\u5f97<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-192\">\n<p>\u3000\u25cf \u672c\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f5\u3064\u306e\u57fa\u672c\u30d1\u30bf\u30fc\u30f3\u3092\u5b9f\u969b\u306e\u30b3\u30fc\u30c9\u3067\u8a66\u3059<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-193\">\n<p>\u3000\u25cf \u5404\u30d1\u30bf\u30fc\u30f3\u306e\u30e1\u30ea\u30c3\u30c8\u30fb\u30c7\u30e1\u30ea\u30c3\u30c8\u3092\u5b9f\u611f\u3059\u308b<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-194\">\n<p>2. <strong>\u65e2\u5b58\u30b3\u30fc\u30c9\u306e\u5206\u6790<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-195\">\n<p>\u3000\u25cf \u81ea\u793e\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30b3\u30fc\u30c9\u3067\u30d1\u30bf\u30fc\u30f3\u3092\u63a2\u3059<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-196\">\n<p>\u3000\u25cf Spring Framework\u306a\u3069\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u8aad\u3080<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-197\">\n<p>3. <strong>\u6bb5\u968e\u7684\u306a\u9069\u7528<\/strong><\/p>\n<\/div>\n\n<div id=\"sgb-css-id-198\">\n<p>\u3000\u25cf \u5c0f\u898f\u6a21\u306a\u6539\u5584\u304b\u3089\u59cb\u3081\u308b<\/p>\n<\/div>\n\n\n<p>\u3000\u25cf \u30c1\u30fc\u30e0\u5185\u3067\u306e\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u3092\u901a\u3058\u3066\u6539\u5584\u3092\u91cd\u306d\u308b<\/p>\n\n\n<div id=\"sgb-css-id-199\">\n<p>\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u9069\u5207\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u62e1\u5f35\u6027\u306e\u3042\u308b\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u305f\u3081\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3068\u306a\u308a\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f\u5185\u5bb9\u3092\u53c2\u8003\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7279\u6027\u3084\u30c1\u30fc\u30e0\u306e\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u3001\u6700\u9069\u306a\u30d1\u30bf\u30fc\u30f3\u3092\u9078\u629e\u3057\u6d3b\u7528\u3057\u3066\u3044\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/div>\n\n<div id=\"sgb-css-id-200\">\n<p>\u307f\u306a\u3055\u3093\u306eJava\u958b\u767a\u304c\u3001\u3088\u308a\u697d\u3057\u304f\u3001\u3088\u308a\u751f\u7523\u7684\u306b\u306a\u308b\u3053\u3068\u3092\u9858\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<\/div>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":2980,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,68],"tags":[],"class_list":{"0":"post-596","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-java","8":"category-java-best-practice"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/596","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=596"}],"version-history":[{"count":12,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/596\/revisions"}],"predecessor-version":[{"id":3019,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/596\/revisions\/3019"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/media\/2980"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}