デザインパターン5、ファクトリパターン

ファクトリパターン
オブジェクトを作成するためのインターフェイスを定義し、サブクラスにインスタンス化するクラスを決定させます。ファクトリメソッドは、クラスのサブクラスへのインスタンス化を遅らせ、オープンクローズの原則に違反する単純なファクトリの欠点を克服し、オブジェクト作成プロセスをカプセル化する利点を維持します。

オープンクローズ原則:拡張のためにオープン、変更のためにクローズ

学生とボランティアは雷鋒クラスを継承します。学生ファクトリーとボランティアファクトリーは雷鋒ファクトリインターフェイスを実装します。インスタンス化されたオブジェクトを変更する必要がある場合は、ファクトリのみを変更する必要があります。新しいクラスを追加するときは、元のクラスのコードを変更せずに、新しいファクトリを追加するだけで済みます。

//雷锋
public class LeiFeng {
    
    
    public void wash() {
    
    
        System.out.println("洗衣服");;
    }

    public void cook() {
    
    
        System.out.println("做饭");;
    }
}

public class Student extends LeiFeng {
    
    
    public Student() {
    
    
        System.out.println("我是大学生");
    }

}

public class Volunteer extends LeiFeng{
    
    
    public Volunteer() {
    
    
        System.out.println("我是志愿者");
    }
}

//雷锋工厂
public interface MyFactory {
    
    
    public LeiFeng createLeiFeng();
}

public class StudentFactory implements MyFactory{
    
    
    @Override
    public LeiFeng createLeiFeng() {
    
    
        return new Student();
    }
}

public class VolunteerFactory implements MyFactory {
    
    
    @Override
    public LeiFeng createLeiFeng() {
    
    
        return new Volunteer();
    }

    public static void main(String[] args) {
    
    
        MyFactory myFactory = new StudentFactory();  //只需要改动这句,无需像简单工厂去改变已有的类。
        LeiFeng student = myFactory.createLeiFeng();

        myFactory = new VolunteerFactory();
        LeiFeng volunteer = myFactory.createLeiFeng();
    }
}

おすすめ

転載: blog.csdn.net/weixin_45401129/article/details/114629219