Hallo zusammen, ich bin Lao Tian, Heute werde ich Designmuster 原型模式 mit euch teilen. Verwenden Sie geeignete Lebensgeschichten und reale Projektszenarien, um über das Entwurfsmuster zu sprechen, und fassen Sie das Entwurfsmuster schließlich in einem Satz zusammen.
Geschichte
Ich erinnere mich noch daran, als ich in meinem Abschlussjahr auf Jobsuche war, zufällig eine relativ schöne Lebenslaufvorlage für Programmierer aus dem Internet gefunden habe und dann die ganze Klasse angefangen hat zu kopieren ihre Lebensläufe wie verrückt (U-Disk). Gleichzeitig gab es auch einen Witz, als mehrere Studenten ihre früheren Lebensläufe kopierten, ohne den Inhalt oder ihren Namen zu ändern. Später sollte jeder das Ergebnis erraten können. Alle machten ein Praktikum, und einige von ihnen waren noch auf der Suche nach einem Job. Feedback vom Interviewer im Unternehmen und anderen Klassenkameraden später: Ich habe mehrere Lebensläufe erhalten, die genau gleich waren. Als ich zurückkam, wussten alle, wo das Problem lag, nachdem wir darüber gesprochen hatten. Ich gab zu, dass ich es kopiert und eingereicht hatte ohne es überhaupt zu ändern. Schade.
Unterteilen Sie Lebenslaufkopien in zwei Arten:
Eine besteht darin, den Lebenslauf zu kopieren und dann die Informationen an Ihre eigenen anzupassen.
Die andere besteht darin, den Lebenslauf zu kopieren, ohne den Inhalt zu ändern. „Definition von Prototypmustern“ mit Prototyp-Instanztypen und erstellen Sie neue Objekte durch Kopieren dieser Prototypen. Prototyp-Modus: , ein kreativer Modus.
Der Aufrufer muss weder die Erstellungsdetails kennen, noch muss er den Konstruktor aufrufen, um das Objekt zu erstellen.
Nutzungsszenarien
Der Prototyp-Modus verfügt über die folgenden Nutzungsszenarien:
Die Klasseninitialisierung verbraucht mehr Ressourcen
Ein von new generiertes Objekt erfordert einen sehr langwierigen Prozess (Datenvorbereitung, Zugriffsberechtigungen usw.)
Der Konstruktor ist komplizierter
Wenn eine große Anzahl von Objekte werden innerhalb des Schleifenkörpers generiert
Im Frühjahr wird häufig das Prototypmuster verwendet, zum Beispiel: scope='prototype'scope='prototype'
Wir können einige Getter und Setter in eine Factory-Methode kapseln und dann für den Benutzer einfach die Methode aufrufen, Es ist nicht erforderlich, zu wissen, wie die darin enthaltenen Getter und Setter gehandhabt werden. Wir können auch Implementierung bereitgestellt durch JDK
Vier Möglichkeiten zum Erstellen von Objekten:
new,flection, Clone, serialize🎜
Tatsächlicher Fall
🎜Jemand ist mir darauf begegnet Häufiges Problem. Im Projekt ist festgelegt, dass die der Datenbanktabelle zugeordnete Entitätsklasse nicht an das Frontend zurückgegeben werden kann. Daher werden normalerweise verschiedene O an das Frontend zurückgegeben, z. B.: XxxVO, XxxBO, XxxDTO ... 🎜 🎜Zu diesem Zeitpunkt erscheint die folgende Szene, und jeder hat es vielleicht erraten. 🎜🎜Das Folgende ist die Zuordnung zur Datenbanktabelle以下是代码的实现:
//用户地址信息
public class UserAddress implements Serializable{
private String province;
private String cityCode;
public UserAddress(String province, String cityCode) {
this.province = province;
this.cityCode = cityCode;
}
}
//用户信息
public class User implements Cloneable {
private int age;
private String name;
//用户地址信息
private UserAddress userAddress;
//getter setter 省略
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
//测试
public class UserTest {
public static void main(String[] args) throws Exception {
User user = new User();
user.setAge(20);
user.setName("田维常");
UserAddress userAddress = new UserAddress("贵州", "梵净山");
user.setUserAddress(userAddress);
User clone = (User) user.clone();
System.out.println("克隆前后UserAddress比较:" + (user.getUserAddress() == clone.getUserAddress()));
}
}
Tiefe Kopie: Kopieren Sie einen Lebenslauf und ändern Sie dann die Informationen im Lebenslauf, um ihn zu Ihrem eigenen zu machen.
Flache Kopie: Kopieren Sie einen Lebenslauf, und der Inhalt des Lebenslaufs bleibt völlig unverändert.
Vorteile:
Der Java-Prototyp-Modus basiert auf dem Kopieren von Speicher-Binärströmen, was eine bessere Leistung als direkt neu bietet.
Sie können Deep Cloning verwenden, um den Objektstatus zu speichern, eine alte Kopie zu speichern (klonen) und beim Ändern als Rückgängig-Funktion zu fungieren.
Nachteile:
Während der Transformation müssen vorhandene Klassen geändert werden, was gegen das „Öffnungs- und Schließprinzip“ verstößt.
Wenn es mehrere verschachtelte Referenzen zwischen Objekten gibt, muss jede Ebene geklont werden.
Wir haben eine umfassende Erklärung des Prototypmusters anhand seiner Definition, Verwendungsszenarien, realen Fälle, flachem Klonen, tiefem Klonen, Vor- und Nachteilen usw. gegeben.
Das obige ist der detaillierte Inhalt vonMaster-Prototyp-Modus in fünf Minuten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
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