Jedermann. Dies ist der letzte Tag des Jahres. Ich habe vor ungefähr einem Monat in meinem Blog erklärt, dass ich innerhalb des Jahres wieder bei Qiita posten werde, und ich habe mich schließlich entschlossen, ganz am Ende des Jahres zu posten: heat_smile:
Normalerweise lerne ich hauptsächlich C #, aber die meisten Designmusterbücher waren JAVA, also habe ich mein Bestes versucht, mit JAVA zu schreiben.
Als unerfahrener Mensch habe ich dieses Jahr endlich etwas über "Designmuster" gelernt.
Das Designmuster schockierte mich genauso wie Vegitas Urknallangriff. Ich habe den Unterschied zwischen Staat und Strategie nicht wirklich verstanden, deshalb werde ich ihn selbst zusammenfassen. Entschuldigung, wenn das nicht stimmt.
Staat ist ein Staat und bewegt sich extern oder intern. Strategie ist eine Strategie, die extern entscheidet, welche Strategie zu verfolgen ist
Ich fühlte mich so.
Also kaufte ich diese beiden Muster dieses Mal mit einer Person namens Kyosuke Shindo. Bitte beachten Sie, dass es etwas länger dauern kann.
Zunächst zum Programm.
Es gibt nur eine Person, Kyosuke Shindo. Kyosuke Shindo entscheidet, ob er normal oder hart arbeitet. (Strategie) Und Sie erhalten Erfahrungswert durch Arbeit, und Kyosuke Shindo wird durch diesen Erfahrungswert höher eingestuft. (Zustand)
Es ist ein dummes Programm.
Schreiben Sie zuerst von Main, um ausgeführt zu werden.
Main.java
package Kyosuke;
public class Main {
public static void main(String[] args) {
Human kyosuke = new Kyosuke();
//Arbeite und sammle 1 Erfahrung
kyosuke.DoWork();
//Arbeite hart und erhalte 3 Erfahrungspunkte
kyosuke.ChangeWorkStyle(new HardWork());
kyosuke.DoWork();
//Immerhin arbeite ich normal
kyosuke.ChangeWorkStyle(new NomalWork());
kyosuke.DoWork();
kyosuke.DoWork();
kyosuke.DoWork();
//Ich meine es ernst von heute w
kyosuke.ChangeWorkStyle(new HardWork());
kyosuke.DoWork();
kyosuke.DoWork();
kyosuke.DoWork();
kyosuke.DoWork();
kyosuke.DoWork();
kyosuke.DoWork();
}
}
Rang ist jetzt B Rang
Ich habe 1 Erfahrung, weil ich normal gearbeitet habe
Ich habe 3 Erfahrungspunkte bekommen, weil ich hart gearbeitet habe
Ich habe 1 Erfahrung, weil ich normal gearbeitet habe
Ich habe 1 Erfahrung, weil ich normal gearbeitet habe
Ich habe 1 Erfahrung, weil ich normal gearbeitet habe
Ich habe 3 Erfahrungspunkte bekommen, weil ich hart gearbeitet habe
Rang ist jetzt Ein Rang
Ich habe 3 Erfahrungspunkte bekommen, weil ich hart gearbeitet habe
Ich habe 3 Erfahrungspunkte bekommen, weil ich hart gearbeitet habe
Ich habe 3 Erfahrungspunkte bekommen, weil ich hart gearbeitet habe
Ich habe 3 Erfahrungspunkte bekommen, weil ich hart gearbeitet habe
Ich war in der Lage
Ich habe 3 Erfahrungspunkte bekommen, weil ich hart gearbeitet habe
Ich war in der Lage
Der erste Rang ist B-Rang. Und Arbeit ist auch normal. Ich arbeite hart auf dem Weg und der Rang steigt und endlich kann ich zuschlagen
Schauen wir uns eine Person namens Kyosuke Shindo an.
Human.java
package Kyosuke;
interface Human {
void DoWork();
void SetRank(Rank newRank);
void ChangeWorkStyle(Work style);
int GetExperiencepoint();
}
Kyosuke.java
package Kyosuke;
public class Kyosuke implements Human{
private Rank rank;
private Work work;
private int experiencepoint;
public Kyosuke() {
this.rank = new BRank(this);
this.work = new NomalWork();
//Erleben Sie zuerst Wert 1
this.experiencepoint = 1;
}
@Override
public void DoWork() {
int point = work.DoWork();
this.experiencepoint += point;
//Überprüfen Sie den Rang hier
rank.CheckNextRank();
}
@Override
public void SetRank(Rank newRank) {
this.rank = newRank;
}
@Override
public void ChangeWorkStyle(Work style) {
this.work = style;
}
@Override
public int GetExperiencepoint() {
return this.experiencepoint;
}
}
Es hat einen Rang, der den aktuellen Rang darstellt, eine Arbeit, die einen Job darstellt (dh unbekannt), und einen Erfahrungspunkt.
Initialisieren Sie alle diese im Konstruktor. Aktionen, die tatsächlich funktionieren, Aktionen, die den Rang ändern, Aktionen, die den Arbeitsstil ändern, Aktionen, die Erfahrungswerte zurückgeben Überschreiben Sie diese.
Jetzt werde ich über den Arbeitsstil schreiben.
Work.java
package Kyosuke;
public abstract class Work {
public abstract int DoWork();
}
NomalWork.java
package Kyosuke;
public class NomalWork extends Work{
private final int experiencePoint =1;
@Override
public int DoWork() {
System.out.println("Ich habe 1 Erfahrung, weil ich normal gearbeitet habe");
return experiencePoint;
}
}
HardWork.java
package Kyosuke;
public class HardWork extends Work{
private final int experiencePoint = 3;
@Override
public int DoWork() {
System.out.println("Ich habe 3 Erfahrungspunkte bekommen, weil ich hart gearbeitet habe");
return experiencePoint;
}
}
Wenn Sie einfach arbeiten, wird dies Ihre Erfahrung zurückgeben. Wenn Sie dieses Muster nicht verwenden, benötigen Sie eine if-Anweisung und eine switch-Anweisung. Die spezifische Verarbeitung kann einfach umgeschaltet werden, indem sie in eine Unterklasse implementiert wird.
Rank.java
package Kyosuke;
public abstract class Rank {
protected int experinencepoint;
protected int nextLeve;
protected Human human;
public Rank(Human human){
this.human = human;
}
protected void SetExperinencepoint(){
this.experinencepoint =human.GetExperiencepoint();
}
protected abstract void CheckNextRank();
}
Und Rang. Das ist der Staat. Der Erfahrungswert von Kyosuke Shindo wird im Rang ausgedrückt. Der Konstrukteur erhält Kyosuke Shindo.
BRank.java
package Kyosuke;
public class BRank extends Rank{
public BRank(Human human){
super(human);
this.nextLeve = 8;
System.out.println("Rang ist jetzt B Rang");
}
@Override
protected void CheckNextRank() {
//Überprüfen Sie zunächst den Erfahrungswert
SetExperinencepoint();
//Level aufsteigen, wenn der Erfahrungswert das nächste Level überschreitet
if (experinencepoint > nextLeve){
human.SetRank(new ARank(this.human));
}
}
}
Die Unterklasse "Rang" überschreibt die erforderliche Methode. Rufen Sie im Konstruktor den Konstruktor der übergeordneten Klasse auf und legen Sie Kyosuke Shindo fest. Und setze nextLeve so, dass du 8 Erfahrungswerte bis zum nächsten Level benötigst (What is Next Leve)
Der Punkt ist die CheckNextRank-Methode. Wir lesen den Erfahrungswert von Kyosuke Shindo und ändern den Zustand entsprechend. Speziell SetExperinencepoint(); Wenn der Erfahrungswert mit gelesen wird und die Bedingung der nächsten im Konstruktor festgelegten Ebene überschritten wird, wird der Rang auf den Rang A erhöht. (Ändert den Zustand)
Auf der Seite der Hauptmethode ist es überhaupt nicht an dieser Zustandsänderung beteiligt. Alles bewegt sich intern.
ARank.java
package Kyosuke;
public class ARank extends Rank{
public ARank(Human human){
super(human);
nextLeve = 20;
System.out.println("Rang ist jetzt Ein Rang");
}
@Override
protected void CheckNextRank() {
//Überprüfen Sie zunächst den Erfahrungswert
SetExperinencepoint();
//Level aufsteigen, wenn der Erfahrungswert das nächste Level überschreitet
if (experinencepoint > nextLeve){
System.out.println("Ich war in der Lage");
}
}
}
Und ARank empfängt auch Kyosuke Shindo im Konstruktor. Der Verarbeitungsinhalt ist der gleiche wie bei BRank. Wenn Sie ohne Neigung zu BRank zurückkehren oder auf eine höhere Ebene gehen möchten, können Sie Kyosuke Shindo auf die gleiche Weise übergeben.
Ich habe es sehr einfach zusammengestellt, aber das war's.
Das Designmuster war magisch. Er ist auch so ein Lehrer, der mich denken lässt, dass ich immer mehr lernen sollte.
Nun, plötzlich Nächstes Jahr wird es arbeitslos: schwer:
Wie auch immer, ich werde üben und mein Bestes geben, damit ich durch Programmieren essen kann.
Recommended Posts