2017-10-23 10 views
-2

です。私はJavaの初心者です。最近、私は春のフレームワークを学びます。私はいくつかの質問があります。それらを解決するために私を助けてください:Javaクラスのインターフェイスクラスは

  1. 私は1つのコントローラといくつかのクラスを作成します。ここにコントローラがあります:

    @Controller 
    @RequestMapping("/man") 
    public class manController { 
        private SwordImp Sword = new SwordImp(); 
        private GunImp Gun = new GunImp(); 
        private String mainWeapon; 
        private String subWeapon; 
        @RequestMapping(value = "set/{weapon:[a-z A-Z 0-9]+}", method = RequestMethod.GET) 
        public String setWeapon(@PathVariable String weapon, Model model){ 
         System.out.println(weapon); 
         if(weapon.equals("gun")){ 
          Gun.set(weapon); 
          mainWeapon = Gun.getWeapon(); 
          subWeapon = Gun.getSubWeapon(); 
         }else{ 
          if(weapon.equals("sword")){ 
           Sword.set(weapon); 
           mainWeapon = Sword.getWeapon(); 
           subWeapon = Sword.getSubWeapon(); 
          }else{ 
           mainWeapon = "no weapon"; 
           subWeapon = "no sub weapon"; 
          } 
         } 
         model.addAttribute("weapon_status", mainWeapon); 
         model.addAttribute("sub_weapon_status", subWeapon); 
         return "man/index"; 
        } 
    } 
    
  2. 私もいくつかのクラスを作成します。

    武器インタフェース

    public interface Weapon { 
        public void set(String weaponName); 
        public String getWeapon(); 
        public String getSubWeapon(); 
    } 
    

    剣クラス

    public class SwordImp implements Weapon { 
        private String weaponName = null; 
        public void set(String weapon) { 
         this.weaponName = "fire "+weapon; 
        } 
        public String getWeapon() { 
         return this.weaponName; 
        } 
        public String getSubWeapon() { 
         return "no sub weapon"; 
        }  
    } 
    

    ガンクラス

    public class GunImp implements Weapon { 
        private String weaponName = null; 
        private String bullet = null; 
        public void set(String weapon) { 
         this.weaponName = "ice "+weapon; 
         this.bullet = "need bullet"; 
        } 
        public String getWeapon() { 
         return this.weaponName; 
        } 
        public String getSubWeapon() { 
         return this.bullet; 
        } 
    } 
    

質問は、私が持っている:

  1. 以下のように武器クラスと剣クラスにWeaponクラスを実装していないと、その機能がまだ機能しているように思えます...なぜインタフェースを使用する必要がありますか?

    剣クラス

    public class SwordImp {...} 
    

    ガンクラス

    public class GunImp {...} 
    
  2. 私は、リポジトリフォルダにクラスのすべてを入れてみてください。これは正しいパスですか?モデルフォルダに入れる必要がありますか?まず

  3. 、このように、私は武器インターフェースに銃クラスと剣クラスであることweaponName変数と弾丸の変数を入れてみてください、私はすべてのクラスでそれらを宣言する必要はありません。

    武器インタフェース

    public interface Weapon { 
        private String weaponName = null; 
        private String bullet = null; 
        public void set(String weaponName); 
        public String getWeapon(); 
        public String getSubWeapon(); 
    } 
    

    剣クラス

    public class SwordImp implements Weapon { 
        public void set(String weapon) { 
         this.weaponName = "fire "+weapon; 
         this.bullet = "no sub weapon"; 
        } 
        public String getWeapon() { 
         return this.weaponName; 
        } 
        public String getSubWeapon() { 
         return this.bullet; 
        }  
    } 
    

    ガンクラス

    public class GunImp implements Weapon { 
        public void set(String weapon) { 
         this.weaponName = "ice "+weapon; 
         this.bullet = "need bullet"; 
        } 
        public String getWeapon() { 
         return this.weaponName; 
        } 
        public String getSubWeapon() { 
         return this.bullet; 
        } 
    } 
    

しかし、これは間違っているようです...誰でも私に理由を教えていただけますか?

おかげ

+0

OOPに関するいくつかの理論をお読みください。クラスとインターフェースの理解は非常に限られているように見えるので、デザインパターンに関する理論的な議論は意味をなさない。 –

+0

私は、あなたがOOPとコントロールIOCの反転を読むことは有用であると思います。そして、インターフェイスの使い方を理解するのに最適なことは、いくつかのデザインパターンを学ぶことだと思います –

答えて

0
  1. あなたは、コントローラでそれらをハードコーディングするのではなく、実行時に特定の武器を注入するAbstract Factoryパターンを使用することができます。

あなたは100種類の武器を持っていると考えてください。すべての武器の実装クラスをコントローラに追加するのは難しいでしょう。あなたは、このパターンの例と実装をgoogleで見つけることができます。それはベストプラクティスとみなされます。

  1. ベストプラクティスに従ってください。それはあなたがよりよく学び、きちんと整備可能なコードを書くのに役立ちます。はい、モデルフォルダに移動する方が良いです。

  2. OOPでは、オブジェクトを適切に定義することが重要です。インターフェイスは定数フィールドとメソッドのみを持つことができます。インタフェースで定義された状態は変更できません。

関連する問題