I am reading about the Abstract Factory Pattern. As far as I understand, the client code is going to have references to the constructed objects via the abstract interface. This means that if you extend the abstract factory to make objects that have new methods, you can't call them. This seems like a tight restriction. Why have all these subclasses when the client won't even be able to access any new methods or variables?
(Abstract Factory) Why do this when you can't use new methods in the derived classes?
101 Views Asked by user442920 At
1
There are 1 best solutions below
Related Questions in OOP
- Access objects variable & method by name
- Why does compiler recognize while(true) at compile time but not if(true)
- Pass variables to extended class
- Cast a superclass type to a subclass type?
- Understanding difference in Swift properties for structs and classes in assignment
- Does exist any way to force child class to have at least one field with a specified attribute?
- Symfony : is it better to use a trait or an intermediary class to complete Controller one?
- (Java) What kind of argument is this? With a
- C++ Implementing a Queue of cars in OOP
- Inheritance in openERP (odoo)
- missing 1 required positional argument: 'key'
- how can Object class in ruby be an instance of it's subclass, class "Class"
- How to force others to obey a specific layout for a child class?
- Class variables in OOP
- define_method in a class method
Related Questions in DESIGN-PATTERNS
- Pass Data between two view controllers using 'Delegation' : Objective-C
- Revealing module pattern instantiation and naming convention
- Is using the same Redis instance for different applications against Separation of Concerns principle?
- Swift - Issue trying to access to Singleton object
- How to set data context of ViewModela View's xaml?
- How to use nested builder pattern in json?
- Is object casting a good practice?
- reference data class member visitor pattern
- variable global const "macros" in C++ and optimal design patterns
- How to design abstract listener and its implementation?
- DTOs with different granularity
- Object creation depending on caller
- What is the proper way to use inheritance when combined with factory method?
- Is this Java Enumeration Used/Designed Correctly?
- Design pattern for incremental code
Related Questions in ABSTRACT-FACTORY
- Applying abstract factory pattern for the login procedure?
- Abstract Factory: When a concrete factory needs additional data
- (Abstract Factory) Why do this when you can't use new methods in the derived classes?
- Polymorphic factory
- Is this a right or viable implementation of the Abstract Factory pattern?
- Java Abstract Factory - Singleton
- Client vs Creator in Factory Method and Abstract Factory patterns
- Avoiding all DI antipatterns for types requiring asynchronous initialization
- Why is factory method a class pattern, while an abstract factory an object pattern?
- What is the diffrence between strategy design pattern and abstract factory pattern?
- Unit testing an abstract factory that takes parameters
- Do Abstract Factories use "new"?
- Factory Method Vs Abstract Factory
- How to implement an [GoF]-ish Abstract Factory Pattern using an IoC like Ninject
- Why constructor of a statically created object is not executed before main function if the object is defined in library?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
The fact that the user of the Abstract Factory can't use the constructor of the classes and is forced to access them through the abstract interface is precisely one of the points of using that pattern.
Suppose you are implementing a class that will send emails to customers.
You can send the customer
QuoteEmailsandFollowUpEmails.You have two options:
new FollowUpEmail()andnew QuoteEmail()each time you want to send one of thoseEmailFactoryand callfactory.createFollowUpEmail()andfactory.createQuoteEmail()when you need to create themNow, if using the first choice, it'd be really hard to introduce different styles for FollowUpEmail and QuoteEmail.
Perhaps you want to send Christmas themed in December, or send formal emails in some particular situations.
So you could create
ChristmasQuoteEmailandFormalQuoteEmail, but you'd need to modify all the code that creates emails to use them.With the second option (abstract factory), your code does not know how the emails are created. So just by sending a
ChristmasEmailFactoryto your code, when your code usesfactory.createQuoteEmail(), the right email will be created.