
causes for redesign
design for change
- creating an object by specifying a class explicitly -- Abstract Factory, Factory Method, Prototype
- dependence on specific operations Chain of Responsibilty, Command
- dependence on hardware & software platforms -- Abstract Factory, bridge
- dependence on object implementation or representation Abstract Factory, Bridge, Memento, Proxy
- algorithm dependence -- Builder, Iterator, Strategy, Template Method, Visitor
- extending functionality by subclassing -- Bridge, Chain, Composite, Decorator, Observer
- tight coupling -- Abstract Factpry, Bridge, Chain of Responsibilities, Command, Facade, Mediator, Observer
- inability to alter classes conveniently -- Adaptor, Decorator, Visitor