A Practical Guide to Designing Object-Oriented Software
Introduction
Designing object-oriented software is hard,and designing reusable object-oriented software is even harder. You must find pertinent objects,factor them into classes at the right granularity,define class interfaces and inheritance hierarchies,and establish key relationships among them.Your design should be specific to the problem at hand but also general enough to address future problems and requirements.You also want to avoid redesign,or at least minimize it. Experienced object-oriented designers will tell you that a reusable and flexible design is difficult if not impossible to get "right" the first time. Before a design is finished,they usually try to reuse it several times,modifying it each time.
Yet experienced object-oriented designers do make good designs. Meanwhile new designers are overwhelmed by the options available and tend to fall back on non-object-oriented techniques they've used before. It takes a long time for novices to learn what good object-oriented design is all about. Experienced designers evidently know something inexperienced ones don't. What is it?
One thing expert designers know not to do is solve every problem from first principles. Rather,they reuse solutions that have worked for them in the past. When they find a good solution,they use it again and again. Such experience is part of what makes them experts. Consequently,you'll find recurring patterns of classes and communicating objects in many object-oriented systems.These patterns solve specific design problems and make object-oriented designs more flexible,elegant,and ultimately reusable. They help designers reuse successful designs by basing new designs on prior experience. A designer who is familiar with such patterns can apply them immediately to design problems without having to rediscover them.
An analogy will help illustrate the point. Novelists and playwrights rarely design their plots from scratch. Instead,they follow patterns like "Tragically Flawed Hero" (Macbeth,Hamlet,etc.) or "The Romantic Novel" (countless romance novels). In the same way,object-oriented designers follow patterns like "represent states with objects" and "decorate objects so you can easily add/remove features." Once you know the pattern,a lot of design decisions follow automatically.
We all know the value of design experience. How many times have you had design déjà-vu—that feeling that you've solved a problem before but not knowing exactly where or how? If you could remember the details of the previous problem and how you solved it,then you could reuse the experience instead of rediscovering it. However,we don't do a good job of recording experience in software design for others to use.
The purpose of this book is to record experience in designing object-oriented software as design patterns. Each design pattern systematically names,explains, and evaluates an important and recurring design in object-oriented systems. Our goal is to capture design experience in a form that people can use effectively. To this end we have documented some of the most important design patterns and present them as a catalog.
本文章更多内容:1 - 2 - 3 - 4 - 5 - 下一页>>