Heim  >  Artikel  >  Java  >  Einführung und Verwendung von Factory-Pattern-Entwurfsmustern

Einführung und Verwendung von Factory-Pattern-Entwurfsmustern

零下一度
零下一度Original
2017-07-03 11:31:181673Durchsuche

Einfaches Factory-Muster

Das einfache Factory-Muster ist das Klassenerstellungsmuster, auch statisches Factory-Methodenmuster genannt. Das einfache Factory-Muster verwendet ein Factory-Objekt, um zu bestimmen, welche Produktklasseninstanzen produziert werden sollen.

Warum das einfache Fabrikmuster verwenden?

Der Grund ist einfach: Entkopplung.

LOL-Szenenanalyse:

Derzeit gibt es in LOL mehr als 100 Helden und die Fähigkeiten jedes Charakters sind unterschiedlich Die Implementierung bestimmter Helden muss unterschiedlich sein.

Aber die Fähigkeiten jedes Helden sind die vier Grundfähigkeiten Q, W, E, R und die Beschwörerfähigkeiten D und F.

Obwohl die Die ausgewählten Helden sind unterschiedlich. Der Rest des Spiels sollte genau gleich sein. Es ist unmöglich, die Logik anderer gemeinsamer Teile vollständig zu ändern, je nachdem, welchen Helden wir auswählen!

Wie man ein solches Anwendungsszenario umsetzt

Summoner Skill Constant Class

public class SummonerSkillName {  
  public static final String FLASH = "Flash";//闪现  public static final String HEAL = "Heal";//治疗  public static final String IGNITE = "Ignite";//引燃  public static final String REVIVE = "Revive";//惩戒  public static final String TELEPORT = "Teleport";//传送  public static final String EXHAUST = "ExhaustSS";//虚弱
  
}

Summoner Skill Interface

<span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span><span style="color: #000000"> SummonerSkill {  
  </span><span style="color: #0000ff">void</span><span style="color: #000000"> release();//释放技能
  
}<br></span>

Summoner Skill Implementation Class 1: Flash

public class FlashSS implements SummonerSkill {  
  public static final String NAME = "闪现";
  
  @Override  public void release() {
    System.out.println("闪现");
  }
  
}

Beschwörer-Fertigkeitsimplementierung Kategorie 2: Zündung

public class IgniteSS implements SummonerSkill {  public static final String NAME = "引燃";

  @Override  public void releaseSS() {
    System.out.println("引燃");
  }

}

Beschwörer-Fertigkeitsfabrik

public class SummonerSkillFactory {  
  public static SummonerSkill getSkillSS(String ssName) throws Exception {
    
    SummonerSkill ss;if (ssName.equals(SummonerSkillName.FLASH)) {
      ss = new FlashSS();
    } else if (ssName.equals(SummonerSkillName.TELEPORT)) {
      ss = new TeleportSS();
    } else if (ssName.equals(SummonerSkillName.HEAL)) {
      ss = new HealSS();
    } else if (ssName.equals(SummonerSkillName.IGNITE)) {
      ss = new IgniteSS();
    } else if (ssName.equals(SummonerSkillName.EXHAUST)) {
      ss = new ExhaustSS();
    } else {
      ss = new ReviveSS();
    }    return ss;
  }
  
}

Verbesserte Fabrik, Reflexion verwenden:

public class SummonerSkillFactory {  
  private static final String CLASS_NAME_SUFFIX = "SS";  
  public static SummonerSkill getSkillSS(String ssName) throws Exception {

    String className = ssName + classNameSuffix;
    String packageName = SummonerSkill.class.getPackage().getName();
    SummonerSkill ss = (SummonerSkill) Class.forName(packageName + "." + className).newInstance();    return ss;
  }
  
}

Stellen Sie sich vor, wie schön das Bild wäre, wenn mehr als 100 Helden auch sonst verwendet würden~

Die Vorteile davon sind nicht nur die Menge an zu schreibendem Code ist viel kleiner und vorausgesetzt, dass neue Beschwörerfähigkeiten hinzugefügt werden, muss der Werkscode nicht geändert werden und das Öffnungs- und Schließprinzip wird befolgt.

public class LeagueClient {
  
  @Test  public void selectHero() throws Exception {
    SummonerSkill flash = SummonerSkillFactory.getSkillSS(SummonerSkillName.FLASH);
    SummonerSkill ignite = SummonerSkillFactory.getSkillSS(SummonerSkillName.IGNITE); 
}

Der Fokus des einfachen Fabrikmusters oder Fabrikmusters liegt nicht darauf, wie die erforderlichen Klassen in der Fabrik produziert werden, Es geht darum, die Herstellung von Produkten vom Konsum von Produkten zu trennen.

Ich habe zuvor if...else if...else und Reflection verwendet. Zusätzlich zu diesen Methoden gibt es andere Möglichkeiten, Produkte zu erstellen, z. B. die Übergabe der Identifikation eines bestimmten Produkts und das Gehen zu Erfragen Sie die Datenbank anhand dieser Identifikation.

Vor- und Nachteile des Fabrikmodells

Vorteile:

1. Optimieren Sie einfach die Softwarearchitektur und klären Sie deren jeweilige Funktionen und Rechte des Moduls

2. Durch die Factory-Klasse muss die Außenwelt nicht direkt bestimmte Produktobjekte erstellen, sondern muss sich nur um den Verbrauch kümmern So erstellen Sie Objekte intern

Nachteile:

1. Die gesamte Erstellungslogik des einfachen Factory-Musters ist in einer Factory-Klasse konzentriert. Wenn Sie eine neue Klasse hinzufügen müssen, müssen Sie die Factory-Klasse ändern

2 Da die Anzahl spezifischer Produkte im einfachen Factory-Modell vor der Verbesserung weiter zunimmt, kann es erforderlich sein, verschiedene Instanzen davon zu erstellen Die gemeinsame Klasse nach unterschiedlichen Bedingungen ist mit der Beurteilung bestimmter Produkttypen verknüpft, was es schwierig macht, die Verbreitung von Funktionsmodulen zu vermeiden, was sich nachteilig auf die Systemwartung und -erweiterung auswirkt

3. Das Der verbesserte einfache Factory-Modus verwendet hauptsächlich Reflexion, die weniger effizient ist

Das obige ist der detaillierte Inhalt vonEinführung und Verwendung von Factory-Pattern-Entwurfsmustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn