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?
42 views Asked by user442920 At
1
There are 1 answers
Related Questions in OOP
- Why does Azure Auto-Scale scale go lower then minimum amount of instances?
- Data execution plan ended with error on DB restore
- Why does Azure CloudConfigurationManager.GetSetting return null
- Do I need other roles than Worker Role for a web site and service layer in Azure?
- Azure Web App PATH Variable Modification
- Azure Data Factory: LinkedService for AzureSql in failed state
- How To Update a Web Application In Azure and Keep The App Up the whole time
- Using Azure MobileServices library with my own LAN WebApi
- ionCube loader error on Azure IIS
- App crash (if closed) after click on notification
Related Questions in DESIGN-PATTERNS
- Why does Azure Auto-Scale scale go lower then minimum amount of instances?
- Data execution plan ended with error on DB restore
- Why does Azure CloudConfigurationManager.GetSetting return null
- Do I need other roles than Worker Role for a web site and service layer in Azure?
- Azure Web App PATH Variable Modification
- Azure Data Factory: LinkedService for AzureSql in failed state
- How To Update a Web Application In Azure and Keep The App Up the whole time
- Using Azure MobileServices library with my own LAN WebApi
- ionCube loader error on Azure IIS
- App crash (if closed) after click on notification
Related Questions in ABSTRACT-FACTORY
- Why does Azure Auto-Scale scale go lower then minimum amount of instances?
- Data execution plan ended with error on DB restore
- Why does Azure CloudConfigurationManager.GetSetting return null
- Do I need other roles than Worker Role for a web site and service layer in Azure?
- Azure Web App PATH Variable Modification
- Azure Data Factory: LinkedService for AzureSql in failed state
- How To Update a Web Application In Azure and Keep The App Up the whole time
- Using Azure MobileServices library with my own LAN WebApi
- ionCube loader error on Azure IIS
- App crash (if closed) after click on notification
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?
Popular Tags
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)
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
QuoteEmails
andFollowUpEmails
.You have two options:
new FollowUpEmail()
andnew QuoteEmail()
each time you want to send one of thoseEmailFactory
and 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
ChristmasQuoteEmail
andFormalQuoteEmail
, 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
ChristmasEmailFactory
to your code, when your code usesfactory.createQuoteEmail()
, the right email will be created.