Ich nehme eine Designmusterklasse in der Schule und habe einige Kapitel von Head First Design Patterns gelesen. Was ich herausfinden möchte, ist, bis zu welchem Grad Designmuster das Umschreiben von bestehendem Code verhindern können.Bis zu welchem Grad können Sie verhindern, dass bei der Verwendung von Entwurfsmustern der vorhandene Code geändert wird?
Nehmen wir Duck
Klassen und FlyBehavior
Klassen zum Beispiel. Ich habe in public static void main(String[] args)
den folgenden Code:
Duck mallard = new MallardDuck(new FlyWithWings());
Bin ich zu Recht sagen, dass es unvermeidlich ist, dass Sie zu finden Ihre main()
Methode ändern, wenn Sie eine neue Strategie hinzufügen? Auf diese Weise sind Sie sind ändern bestehenden Code, richtig? Ich beziehe mich insbesondere auf den Teil, wo eine konkrete Strategie Klasse erwähnt wird: new FlyWithWings().
Wenn Sie die Factory-Methode Muster in Ihrem Code implementiert, Sie verhindern könnten eine konkrete Klasse, die (FlyWithWings
) von überhaupt erwähnt werden:
public FlyBehavior returnBehavior(FlyBehaviorFactory factory, String behaviorType) {
return factory.getFlyBehavior(behaviorType);
}
Und so haben die folgende Codezeile:
Duck mallard = new MallardDuck(returnBehavior(flyFactory, "wings"));
auf diese Weise wird ein bestimmter Teil des Programms muss wissen nicht, was FlyBehaviorFactory zu verwenden. Ihre Methode main()
muss jedoch bestimmte Parameter in der Methode returnBehavior angeben, um zu ermitteln, welche Factory welche Strategie erstellt. Also, bin ich richtig zu sagen, dass Sie noch ändern müssen main()
, wenn ich eine neue FlyBehavior-Klasse hinzugefügt, und wollte das als Parameter zu returnBehavior()
hinzufügen?
Kann man diese Situation noch verbessern?
Sie sollten sich [_dependency injection_] (http://en.wikipedia.org/wiki/Dependency_injection) und die verschiedenen Frameworks dafür ansehen. – Seelenvirtuose
@Synchro Bitte lesen Sie: [Was soll ich tun, wenn jemand meine Frage beantwortet] (http://stackoverflow.com/help/someone-answers) – CKing