スタティツクファクトリメソッド


静的メソッドバー


パッケージングオブジェクトの作成方法
より具体的なオブジェクト作成方法を作成し、静的と宣言する方法
ex)
BigInteger answer = BigInteger.valueOf(50L); //BigInger 50을 리턴함
valueOfも静的宣言の方法で、新しいBigInteger(...)ビルダーの非表示

静的方法の長所と短所

  • の利点
  • 1.名前があるので、生成者よりも読みやすさが良い。


    ex)
    class Character {
    
        int intelligence, strength, hitPoint, magicPoint;
    
        public Character(int intelligence, int strength, int hitPoint, int magicPoint) {
            this.intelligence = intelligence;   // 지능
            this.strength = strength;           // 힘
            this.hitPoint = hitPoint;           // HP
            this.magicPoint = magicPoint;       // MP
        }
    宣言クラスのAllArgsConstructor作成者
     // 정적 팩토리 메소드
        public static Character newWarrior() {
            return new Character(5, 15, 20, 3);     // 전사는 힘과 HP가 높다
        }
    
        // 정적 팩토리 메소드
        public static Character newMage() {
            return new Character(15, 5, 10, 15);    // 마법사는 지능과 MP가 높다
        }
    }
    ジェネレータを使用して戦士またはウィザードを作成する場合は、
    Character warrior = new Character(5, 15, 20, 3);
    Character mage = new Character(15, 5, 10, 15);
    コードだけを見るとパラメータ数なので、キャラクターの職業がわかりにくいです.
    ただし、静的ファクトリメソッドを使用すると
    Character warrior = Character.newWarrior();
    Character mage = Character.newMage();

    2.呼び出しのたびに新しいオブジェクトを作成する必要はありません。


    前述したように、静的ファクトリメソッドを呼び出すたびに、作成ウィザードと戦士のコードがnew Character(...)を使用します.呼び出し
    ただし,キャッシュが可変オブジェクトを使用する場合,newなどの煩雑な演算をいちいち使用する必要はない.

    3.サブデータ型オブジェクトを返します。


    ex)
    class OrderUtil {
    
        public static Discount createDiscountItem(String discountCode) throws Exception {
            if(!isValidCode(discountCode)) {
                throw new Exception("잘못된 할인 코드");
            }
            // 쿠폰 코드인가? 포인트 코드인가?
            if(isUsableCoupon(discountCode)) {
                return new Coupon(1000);
            } else if(isUsablePoint(discountCode)) {
                return new Point(500);
            }
            throw new Exception("이미 사용한 코드");
        }
    }
    
    class Coupon extends Discount { }
    class Point extends Discount { }
    
    割引コードのルールに従って、CoonとPointオブジェクトを選択的に返します.
    このため、2つのサブクラスに同じインタフェースを実装したり、同じ親クラスを所有したりすることができます.