ホームページ  >  記事  >  Java  >  Javaファクトリーメソッドのパターン学習

Javaファクトリーメソッドのパターン学習

黄舟
黄舟オリジナル
2017-10-13 10:25:051487ブラウズ

この記事は主に Java デザインパターン学習におけるファクトリメソッドパターンを紹介します。興味のある方は参考にしてください。

ファクトリメソッドパターン (Factory Method): オブジェクトを作成するためのインターフェイスを定義します。インスタンス化します。ファクトリ メソッドを使用すると、クラスのインスタンス化をそのサブクラスに延期できます。

ファクトリーメソッドパターン構造図:

プロジェクト要件、大学生が他の人を助けることができ、ボランティアも他の人が何かをするのを助けることができる雷峰工場を作成します。

1: 他の人が床を掃除したり、洗濯をしたり、お米を買ったりするのを手伝う機能を備えた Lei Feng クラスを作成します。


package FactoryMethodModel;

public class LeiFeng {

 public void Sweep(){
  System.out.println("扫地");
 }
 
 public void Wash(){
  System.out.println("洗衣");
 }
 
 public void BuyRice(){
  System.out.println("买米");
 }
}

2: Lei Feng から学ぶ大学生向けのクラスを作成し、Lei Feng クラスを継承し、独自の機能を追加します。


package FactoryMethodModel;

/**
 * 学雷锋的大学生
 * @author 我不是张英俊
 *
 */
public class UniversityStudent extends LeiFeng {
//里面可以增加专属大学生的功能
}

3: Lei Feng クラスを継承するコミュニティ ボランティア クラスを作成します。


package FactoryMethodModel;

/**
 * 学雷锋的社区人员
 * @author 我不是张英俊
 *
 */
public class Volunteer extends LeiFeng {

}

4: Lei Feng ファクトリ インターフェイスを作成します。


package FactoryMethodModel;

/**雷锋工厂的总接口。
 * @author 我不是张英俊
 *
 */
interface LeiFengFactory {
 LeiFeng CreatLenFeng();
}

5: Lei Feng から学ぶ大学生のための工場を作成します。


package FactoryMethodModel;

/**
 * 学雷锋的大学生工厂
 * @author 我不是张英俊
 *
 */
public class UniversityStudentFactory implements LeiFengFactory {

 @Override
 public LeiFeng CreatLenFeng() {
  return new UniversityStudent();
 }

 
}

6: Lei Feng から学ぶボランティア工場を作成します。


package FactoryMethodModel;

/**
 * 学雷锋的社区制志愿者
 * @author 我不是张英俊
 *
 */
public class VolunteerFactory implements LeiFengFactory {

 @Override
 public LeiFeng CreatLenFeng() {
 // TODO Auto-generated method stub
 return new Volunteer();
 }

 
}

7: テストクラス


package FactoryMethodModel;

/**
 * 建立一个雷锋工厂,大学生可以以雷锋的名义起帮助别人,社区志愿者也可以。
 * 工厂化模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
 * 工厂方法使一个类的实例化延迟到其子类。
 * @author 我不是张英俊
 *
 */
public class Test {

 public static void main(String[] args) {
 
 LeiFengFactory factory=new UniversityStudentFactory();
 LeiFeng student =factory.CreatLenFeng();
 
 student.BuyRice();
 student.Sweep();
 student.Wash();
 }

}

8: コンソール

お米を買う
床を掃除する
洗濯

概要: シンプルなファクトリメソッドはオープンクローズ原則に違反しますが、ファクトリメソッドはそれを克服しますこの問題では、小学生が Lei Feng から学ぶ場合など、新しいものを追加する必要がある場合、ファクトリ メソッドで新しい小学生ファクトリを追加し、それをテスト クラスで呼び出すことができます。

ファクトリ メソッド パターンは、オブジェクト作成プロセスをカプセル化するという利点も維持します。これにより、変更を加えずにオブジェクトを置き換えることができるため、クライアント プログラムと製品オブジェクトの間の結合が軽減されます。ファクトリ メソッド パターンは、単純なファクトリ パターンをさらに抽象化し、推進したものです。ポリモーフィズムの使用により、ファクトリ パターンは単純なファクトリ パターンの利点を保存し、欠点を克服します。ただし、プロダクトを追加しないとファクトリ クラスを追加する必要があり、追加の開発量が増加するという欠点があります。

以上がJavaファクトリーメソッドのパターン学習の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。