I have two classes A and B. Now, I have B "has a" A relationship. So, the most trivial thing to follow here is the Composition pattern. Now, one of the field of B is an object of A. The problem is some of the fields of A and B are common. So, in this case, those fields will be redundant. I can't create an abstract class out of the common fields and make A and B inherit it because they are already extending some abstract class. What would be the best practice in this case?
Avoiding redundancy in Composition pattern java
387 Views Asked by Pkeakh Joqo At
2
There are 2 best solutions below
0
Dickens A S
On
As you said that your A and B class already extended with an abstract class, You can try delegate the common fields with a non common function to differentiate it
For example
class B extends AbstractB {
private String myField;
public String getMyField(){
return myField;
}
}
class A extends AbstractA {
private String myField;
private B b;
public A(B b){
this.b = b;
}
public String getMyField(){
return myField;
}
public String getMyBField(){
return b.myField;
}
}
Related Questions in JAVA
- I need the BIRT.war that is compatible with Java 17 and Tomcat 10
- Creating global Class holder
- No method found for class java.lang.String in Kafka
- Issue edit a jtable with a pictures
- getting error when trying to launch kotlin jar file that use supabase "java.lang.NoClassDefFoundError"
- Does the && (logical AND) operator have a higher precedence than || (logical OR) operator in Java?
- Mixed color rendering in a JTable
- HTTPS configuration in Spring Boot, server returning timeout
- How to use Layout to create textfields which dont increase in size?
- Function for making the code wait in javafx
- How to create beans of the same class for multiple template parameters in Spring
- How could you print a specific String from an array with the values of an array from a double array on the same line, using iteration to print all?
- org.telegram.telegrambots.meta.exceptions.TelegramApiException: Bot token and username can't be empty
- Accessing Secret Variables in Classic Pipelines through Java app in Azure DevOps
- Postgres && statement Error in Mybatis Mapper?
Related Questions in OOP
- How do I apply the interface concept with the base-class in design?
- Creating multiple instances of a class with different initializing values in Flutter
- System.InvalidCastException while inheriting a class
- How to add logging to an abstract class in php
- creating cutscenes using OOP and pygame
- What effect does the `virtual` modifier have on an interface member?
- How to pass the value of a function of one class to a function of another with the @property decorator
- Creating a C++ Class Instance for every server request?
- Dart OOP programming
- Containing Object Design
- Clean architecture/OOP and optimization: how to organize for classes with same logic
- How to get 5 LEVEL hierarchy users from database using PHP and MYSQL
- TypeError: unsupported operand type(s) for /: 'property' and 'complex'
- How can I refer to this metaclass inside a metaclass without specifying its name in the code?
- Why customed "-eq" do twice in Powershell?
Related Questions in INHERITANCE
- System.InvalidCastException while inheriting a class
- What effect does the `virtual` modifier have on an interface member?
- Is it allowed to pass "this" of derived class to constructor of base class?
- Why parent no-arg constructor is called?
- Python super().__init__() doesn't call multiple inherited classes?
- How to query child models from parent model data?
- .NET Core : disable parent application web.config inheritance
- Is it appropriate to subclass the parent's parameters in subclass __init__'s within python?
- Inheritance - is it possible to 'force' variable values relative to the derived class?
- Need more parameters in subclass overridden method
- How to call a method on a generic type from inside the generic class?
- Dependency Injection with Generic Interface and Inheritance
- Sparx Enterprise Architect - sysml - how to model a configuration on a block definition diagram using specialization
- Generic "Create" method in .NET Core that creates two entities
- crud operation and function with a an abstract class of which it had two subclasses
Related Questions in DESIGN-PATTERNS
- Will it slow down the performance when Unit of work pattern is used with EF Core
- Design patterns - How Design patterns work with bulk data
- Using Repository pattern to fetch data from different places and build list of objects
- Suggest best design patterns to update or insert bulk data
- Mapping one collection of objects into another collection of objects
- How can I break down a large presenter in the Viper design pattern into smaller pieces?
- How to create under the label in Textformfield, not a border, in Flutter
- Own Pattern / framework for interfacing with components in C
- Common Method Implementation for Elasticsearch and OpenSearch Java SDK
- How can I decouple them?
- Understanding Potential Deadlock in Resource Pool Implementation Described in "Go in Action"
- Dependency Injection Patterns stand alone implementaion
- How to use GoF design pattern for software robustness?
- Pipeline data processing and code architecture
- Mocking inherited class where new object is created or how to unsmell my class
Related Questions in COMPOSITION
- Scala composition of partially-applied functions
- Dependency Injection with Generic Interface and Inheritance
- Difference Between StateList and List<State> in Jetpack Compose
- Composing React Providers with Value props in Typescript
- Component inheritance and sharing of elements in Angular with dynamic template
- How to make a comonad instance of list zipper of list zippers data type?
- Backpropagation through composition of neural networks where one has fixed parameters
- It is possible to reference to another JSON file for the value of a field?
- How to compose complex discriminated union types with generics into a single type in TypeScript?
- Using Real-time list of midi messages in this SCAMP script
- OOP problem: Relationship between category, sub category and product
- vue.js vue3: use a sub-component (formkit) in a self-defined component, render in App (main)
- C2027 use of undefined type 'Variable'
- Twilio compositions with different audio level per participant?
- class inheritance in python as fields - side effects / incorrect handling
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 # Hahtags
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?
If A and B can't have a common base class, you can't put the common fields in such a class.
One way to avoid the redundancy is to create a third class C that contains the common fields of A and B, and let both A and B have a member of class C.
Such a re-factoring would make sense only if the common fields make sense as a separate class (i.e. that class would represent some real life object or concept and not just an arbitrary group of fields). Otherwise I'll keep the redundant fields.
For example, an
Officeand aPersonprobably wouldn't have a common base class (other thanObject), but suppose both of them have properties such as street name, city, zip code, etc... You can easily see that these fields should be extracted to anAddressclass.