栄光の王からのデザインパターン(単純なファクトリパターン)を見て
I.はじめに
ゲームの開始前に、プレイヤーは自由プールから英雄の英雄を再生するために選択することができます
II。シンプルなファクトリパターン
シンプルなファクトリパターン(簡易ファクトリパターン)の革新的なモデルのクラスに属し、また、静的Factory Methodパターン(静的FactoryMethodパターン)として知られている、専門のクラスによって定義された他のクラスのインスタンスを作成する責任があり、インスタンスが作成され、通常は共通しています親。
- これらの設計原則の中で、次のとおりです。
- インスタンスを作成するプロセスに関与することが特別なクラスがあります。具体的には、製品がクラスのコレクションを見てシリーズで、これらのクラスは派生オブジェクトツリーの抽象クラスまたはインタフェースです。ファクトリクラスと顧客の要件を満たすために、適切なオブジェクトを生成します。
次のようにそれぞれの役割と責任に含まれているシンプルな工場出荷時のパターンは以下のとおりです。
工場の役割(クリエイター):これは、クラスを作成するには、すべての内部ロジックを担当してコアの簡単なファクトリパターン、です。もちろん、ファクトリクラスは、オブジェクトのために必要な製品を作成するために、世界の外に呼び出すことができなければなりません。
抽象画(プロダクト)製品の文字:シンプルなファクトリパターンによって作成されたすべてのオブジェクトの親クラスは、この親は、インターフェースはまた、すべてのインスタンスに共通の公開インタフェースを記述するための責任がある抽象クラスとすることができることができることに注意してください。
特定の製品(コンクリート製品)の役割:工場で作成された単純なオブジェクトの具体例としては、これらの特定の製品は、共通の親クラスを持っている傾向があります。
- シンプルな工場モードの利点は
、ユーザー缶ファクトリクラスは、これらのオブジェクトが作成され、それがどのように編成されているかを理解する必要がなく、使用中の必要なインスタンスを作成します。全体のソフトウェアアーキテクチャを最適化するのに役立ち - 欠点は、単純なファクトリパターン
- すべて1つのファクトリクラス内のロジック、あまり高くない凝集が生じ、だけでなく、「オープンクローズドの原則」に反するので、
- 単純な工場パターン法一般に静的であり、静的ファクトリメソッドは、サブクラスが継承することができない、従って、単純なファクトリパターンは、基本クラスの継承ツリーに基づいて形成することができません。
III。構造図
IV。図のデザインクラス
V.コードの実装
選択された選手に応じて対応するクラスのインスタンスを作成するHeroFactory(簡易ファクトリクラス)
package com.game.Factory;
/*
* 简单工厂类(提供创建接口)
*/
import com.game.domain.Hero;
import com.game.domain.HouYi;
import com.game.domain.LuBanQiHao;
public class HeroFactory {
public static Hero createHero(String HeroName) throws Exception {
//传入HouYi,工厂创建并返回HouYi实例
if(HeroName.equalsIgnoreCase("HouYi")) {
return new HouYi();
}else if(HeroName.equalsIgnoreCase("LuBanQiHao")){
//传入LuBanQiHao,工厂创建并返回LuBanQiHao实例
return new LuBanQiHao();
}else {
throw new Exception();//抛出异常
}
}
}
HeroFactoryTestテストクラス
package com.game.test;
/*
* 英雄工厂测试类
*/
import com.game.Factory.HeroFactory;
import com.game.domain.Hero;
public class HeroFactoryTest {
public static void main(String [] args) {
//使用工厂的创建工厂方法,传入英雄的名称,由工厂创建英雄
try {
//1.选择英雄后羿
System.out.println("=======choose1=======");
System.out.println("请选择你的英雄:");
//向工厂传入英雄的名称
Hero hero1 = HeroFactory.createHero("HouYi");
System.out.println("您选择的英雄是【"+hero1.getHeroName()+"】");
hero1.display();
//2.选择英雄鲁班七号
System.out.println("=======choose2========");
System.out.println("请选择你的英雄:");
//向工厂传入英雄的名称
Hero hero2 = HeroFactory.createHero("LuBanQiHao");
System.out.println("您选择的英雄是【"+hero2.getHeroName()+"】");
hero2.display();
}catch(Exception e) {//捕捉异常
System.out.println("不存在此英雄!");
}
}
}
業績