Java デザイン パターン ファクトリ メソッド パターン

高洛峰
リリース: 2017-01-19 16:16:05
オリジナル
1345 人が閲覧しました

まとめ

デザインパターンは芸術です。この芸術を本当に理解すれば、世界はより美しくなることがわかります。

定義

オブジェクトを作成するためのインターフェースを定義し、そのサブクラスにインスタンス化するクラスを決定させます

使用シナリオ

複雑なオブジェクトが使用される場合はどこでも、ファクトリパターンを使用できます

UML

Java デザイン パターン ファクトリ メソッド パターン

1. 概要工場

工場の概要: 工場には通常、生産という 1 つの機能しかないことは誰もが知っています。たとえば、吉利自動車工場は吉利車を製造し、携帯電話メーカーは iPhone を製造します。
したがって、1 つの簡単な方法の概要を使用できます。 is create();
2. コンクリート自動車製造プラント

コンクリート自動車製造プラント: 自動車を製造するための実際のプロセスと方法を備えた抽象的な工場を実装します。

3. 抽象的な自動車: 私たちは一般的に知っています。これらは車の共通の機能です


4. 抽象的な車: コンクリートの車は抽象的な車を実装しており、当然、さまざまな車がその機能を備えている可能性があります。さまざまな機能

上記は簡単な紹介です。一般に、アウディの工場はアウディ車を製造し、フォルクスワーゲンの工場はフォルクスワーゲン車を製造するなど、特定の自動車工場が対応する自動車を製造します。

コードのデモ

その関係を明確に理解しました。次に、コード デモンストレーションを使用して、上記のアイデアとロジックをコードで表現します:

(1) 抽象的な車の工場

package com.zengtao.demo.factory;
 
/**
 * 抽象工厂
 */
public abstract class CarFactory {
 
  public abstract <T extends Car> T createCar(Class<T> cla);
 
}
ログイン後にコピー

(2) コンクリートの車の工場

package com.zengtao.demo.factory;
 
/**
 * 奥迪工厂
 */
public class AudiFactory extends CarFactory {
 
  @SuppressWarnings("unchecked")
  @Override
  public <T extends Car> T createCar(Class<T> cla) {
    Car car = null;
    try {
      car = (Car) Class.forName(cla.getName()).newInstance();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return (T) car;
  }
 
}
ログイン後にコピー

(3) 抽象的な車の定義

package com.zengtao.demo.factory;
 
public abstract class Car {
 
  public abstract void drive();
 
  public abstract void selfNagive();
 
  public abstract void playMusic();
 
}
ログイン後にコピー

(4) コンクリートカー

(アウディ q3)

package com.zengtao.demo.factory;
 
public class AudiQ3Car extends AudiCar {
 
  @Override
  public void drive() {
    System.out.println("AudiQ3Car 已经制造成功");
    System.out.println("AudiQ3Car drive");
  }
 
  @Override
  public void selfNagive() {
    System.out.println("AudiQ3Car selfNagive");
  }
 
  @Override
  public void playMusic() {
    System.out.println("AudiQ3Car playMusic");
    System.out.println("");
  }
}
ログイン後にコピー

(アウディ q5)

package com.zengtao.demo.factory;
 
public class AudiQ5Car extends AudiCar {
 
  @Override
  public void drive() {
    System.out.println("AudiQ5Car 已经制造成功");
    System.out.println("AudiQ5Car drive");
  }
 
  @Override
  public void selfNagive() {
    System.out.println("AudiQ5Car selfNagive");
  }
 
  @Override
  public void playMusic() {
    System.out.println("AudiQ5Car playMusic");
    System.out.println("");
  }
 
}
ログイン後にコピー

(5) 電話

package com.zengtao.demo;
 
import com.zengtao.demo.factory.AudiFactory;
import com.zengtao.demo.factory.AudiQ3Car;
import com.zengtao.demo.factory.AudiQ5Car;
 
public class Main {
 
  public static void main(String[] str) {
 
    // 创建工厂
    AudiFactory audiFactory = new AudiFactory();
 
    // 利用工厂制造q3车
    AudiQ3Car audiQ3Car = audiFactory.createCar(AudiQ3Car.class);
     // 利用工厂制造q5车
    AudiQ5Car audiQ5Car = audiFactory.createCar(AudiQ5Car.class);
 
    // 开始开车放音乐
    audiQ3Car.drive();
    audiQ3Car.playMusic();
 
    audiQ5Car.drive();
    audiQ5Car.playMusic();
 
  }
}
ログイン後にコピー

(6) 結果

上記は、ファクトリ メソッド パターンを使用して自動車を製造する簡単なプロセスです

Java デザイン パターン ファクトリ メソッド パターン

最初のポイント:


抽象ファクトリでは、createCar(Class cla) メソッドがあることがわかりますが、なぜこのように定義するのでしょうか、リフレクションを使用して特定の車を作成し、さまざまなタイプの車が対応する条件のみを必要とするようにします。すべてが生成されるわけではないため、多くの場合と同様に、このように記述すると有益です。アウディには q3、q5、a4、a6、 a7、a8 およびその他のシリーズ

2 番目のポイント:


BMW x1、320、x5 などの他の車がある場合も、非常に簡単に実装するだけで済みます。この拡張機能も非常に便利です

概要

ファクトリメソッドパターンは比較的シンプルで優れたデザインパターンです

。また、欠点もあります。たとえば、新しい他のタイプの車がある場合、抽象ファクトリーと抽象車を実装するだけで済み、それぞれのクラスを 2 つ作成する必要があります

しかし、それが車ではなく、携帯電話の場合は、それらをすべて記述する必要があります。これにより、ファクトリ メソッド パターンを使用するかどうかは、ニーズによって異なります。

注: 設計のためにデザイン パターンを適用しないでください。もちろん、次のようなファクトリ メソッド パターンもよく使用されます。また、定義した XML レイアウトに基づいて、対応するインターフェイスを読み込み、生成します。私たち自身など。

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。


Java デザイン パターンのファクトリ メソッド パターンに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!