Core java - Advance Topics
  • Welcome
  • Schedule
  • 1) Exception Handling
    • 1) Introduction to Exception Handling
    • 2) Categories of Exceptions
    • 3) Creating a method that throws an exception
    • 4) Creating Custom Exception Classes
    • 5)What happens when an exception is thrown?
      • 5.1) Creating try-catch-finally blocks
      • 5.2) Using a method that throws a checked exception
      • 5.3) Using a method that throws a runtime exception
      • 5.4) Using a method that throws an error
      • 5.5) Will a finally block execute even if the catch block defines a return statement?
      • 5.6) What happens if both a catch and a finally block define return statement?
      • 5.7) What happens if a finally block modifies the value returned from a catch block?
      • 5.8) Can a try block be followed only by a finally block?
      • 5.9) Does the order of the exceptions caught in the catch blocks matter?
      • 5.10) Can I rethrow an exception or the error I catch?
      • 5.11) Can I declare my methods to throw a checked exception instead of handling it?
      • 5.12) I can create nested loops, so can I create nested try-catch blocks too?
      • 5.13) Should I handle errors?
    • 6) Best Practices
    • 7) Cheat Sheet
    • 8) Problems
  • 2) Wrapper Classes and Enums
    • 2.1) Creating objects of the wrapper classes
    • Enums
  • 3) Inner Classes
    • 3.1) Static nested class (also called static inner class)
    • 3.2) Inner class (also called member class)
    • 3.3) Anonymous inner class
    • 3.4) Method local inner classes
    • CheatSheet
  • 4) Generics
    • Multiple Type parameters in Generic classes
    • Inheritance using Generics
    • Generic interfaces
    • Generic Methods
    • Bounded type parameters
    • Applications
  • 5) Equals and Hashcode
    • Problems
  • CompareTo method overview
  • Basic DS
    • 1) Simple Array List
    • 2) Simple HashMap
  • 5) Collections Framework - Part 1
    • Introducing the collections framework
    • Working with the Collection interface
      • The core Collection interface
      • Methods of the Collection interface
    • Creating and using List, Set, and Deque implementations
      • List interface and its implementations
      • Iterators
      • Sorting List using custom sorting technique
      • Comparable Interface
      • Custom Sorting using comparator
      • ArrayList - Examples and practice problems
    • Stack
    • Linked List
    • LinkedList Operations
  • 6) Collections Framework - Part 2
    • Sets
      • Set Types
      • Array to Set (vice versa)
    • Maps
    • TreeMap
    • Autoboxing And Unboxing
  • Collections Framework - Part 3
    • Basics : DS , Number System
    • Internal Working
      • HashMap
      • HashSet
  • 7) Reflection API
  • 8) Annotations
  • 9) Reading Input From Various Sources
    • File Handling
    • Reading From Xml
    • Reading From JSON
  • 10) Multi-threading (Concurrency)
    • Protect shared data
    • Thread-safe access to shared data
  • 11) Design Patterns
    • Singleton
    • DI
  • 12) Internal Working of JVM
  • 13) Garbage Collection
  • 14) More on Strings (Buffer and Builder)
  • 15) Cloning and Immutable Class
    • 16) Serialization And Deserialization
    • Untitled
  • JAVA 8
    • Interface Changes
    • Lambda
    • Method Ref
    • Optional
    • Streams
    • Predicates
  • Practice Tests
    • Test - Collections
    • OOPS
    • S-OOPS
Powered by GitBook
On this page
  • Wrong:
  • Right:
  • ServiceFactory :

Was this helpful?

  1. 11) Design Patterns

DI

Wrong:

package com.gs.ilp.logic;

public class Car {
	private int carId;
	private FordWheel FordWheel;

	public Car() {
	}

	public Car(int carId, com.gs.ilp.logic.FordWheel fordWheel) {
		this.carId = carId;
		FordWheel = fordWheel;
	}

	public int getCarId() {
		return carId;
	}

	public void setCarId(int carId) {
		this.carId = carId;
	}

	public FordWheel getFordWheel() {
		return FordWheel;
	}

	public void setFordWheel(FordWheel fordWheel) {
		FordWheel = fordWheel;
	}

	@Override
	public String toString() {
		return "Car [carId=" + carId + ", FordWheel=" + FordWheel + "]";
	}

}
package com.gs.ilp.logic;

public class FordWheel {

	private int id;
	private String nameOfTheWheel;

	public FordWheel(int id, String nameOfTheWheel) {
		this.id = id;
		this.nameOfTheWheel = nameOfTheWheel;
	}

	public FordWheel() {
	}

	public int getId() {
		return id;
	}

	public void setId(int idd) {
		id = idd;
	}

	public String getNameOfTheWheel() {
		return nameOfTheWheel;
	}

	public void setNameOfTheWheel(String nameOfTheWheel) {
		this.nameOfTheWheel = nameOfTheWheel;
	}

	@Override
	public String toString() {
		return "FordWheel [id=" + id + ", nameOfTheWheel=" + nameOfTheWheel + "]";
	}

}
package com.gs.ilp.logic;

public class MakeCar {
	public static void main(String[] args) {
//
//		FordWheel fordWheel = new FordWheel(90, "Ford's Tyre");
//		Car genericCar = new Car(1, fordWheel);
//		System.out.print(figo);
		
		
		MarutiWheel marutiWheel = new MarutiWheel(90, "Maruti's Tyre");
		Car genericCar = new Car(1, marutiWheel);
		System.out.print(genericCar);
	}

}
package com.gs.ilp.logic;

public class MarutiWheel {

	private int id;
	private String nameOfTheWheel;

	public MarutiWheel(int id, String nameOfTheWheel) {
		this.id = id;
		this.nameOfTheWheel = nameOfTheWheel;
	}

	public MarutiWheel() {
	}

	public int getId() {
		return id;
	}

	public void setId(int idd) {
		id = idd;
	}

	public String getNameOfTheWheel() {
		return nameOfTheWheel;
	}

	public void setNameOfTheWheel(String nameOfTheWheel) {
		this.nameOfTheWheel = nameOfTheWheel;
	}

	@Override
	public String toString() {
		return "MarutiWheel [id=" + id + ", nameOfTheWheel=" + nameOfTheWheel + "]";
	}

}

Right:

package com.gs.ilp.logic;

public interface Wheel {

}
public class MarutiWheel implements Wheel {
.....
.....
.....
}
public class FordWheel implements Wheel {
.....
.....
.....
}
package com.gs.ilp.logic;

public class Car {
	private int carId;
	private Wheel wheel;

	public Car() {
	}

	public Car(int carId, Wheel wheel) {
		this.carId = carId;
		this.wheel = wheel;
	}

	@Override
	public String toString() {
		return "Car [carId=" + carId + ", wheel=" + wheel + "]";
	}

}
package com.gs.ilp.logic;

public class MakeCar {
	public static void main(String[] args) {

		Wheel fordWheel = (Wheel) new FordWheel(90, "Ford's Tyre");

		Car genericCar = new Car(1, fordWheel);
		System.out.println(genericCar);

		Wheel marutiWheel = (Wheel) new MarutiWheel(90, "Maruti's Tyre");
		Car genericCar1 = new Car(1, marutiWheel);
		System.out.println(genericCar1);
	}

}

ServiceFactory :

package com.gs.ilp.logic;

import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ServiceFactory {

	public static Object getInstance(Class classType) {

		try {

			File fXmlFile = new File("D:/factotybinding.xml");
			DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
			Document doc = dBuilder.parse(fXmlFile);

			// optional, but recommended
			// read this -
			// http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
			doc.getDocumentElement().normalize();

			System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

			NodeList nList = doc.getElementsByTagName("bean");

			System.out.println("----------------------------");

			for (int temp = 0; temp < nList.getLength(); temp++) {

				Node nNode = nList.item(temp);

				System.out.println("\nCurrent Element :" + nNode.getNodeName());

				if (nNode.getNodeType() == Node.ELEMENT_NODE) {

					Element eElement = (Element) nNode;
					if (classType.getName().equalsIgnoreCase(eElement.getAttribute("class"))) {

						System.out.println("bean id : " + eElement.getAttribute("id"));
						System.out.println("class  : " + eElement.getAttribute("class"));

						Constructor c = classType.getDeclaredConstructor();
						c.setAccessible(true); // solution
						Object obj = c.newInstance();

						// Wheel wheel = (Wheel)
						// Class.forName(eElement.getAttribute("class")).newInstance();

						NodeList nListd = (NodeList) eElement.getElementsByTagName("property");
						for (int temp1 = 0; temp1 < nListd.getLength(); temp1++) {
							Node nNode1 = nListd.item(temp1);
							if (nNode1.getNodeType() == Node.ELEMENT_NODE) {

								Element eElement1 = (Element) nNode1;

								String field = String.valueOf(eElement1.getAttribute("name"));
								String value = String.valueOf(eElement1.getAttribute("value"));

								System.out.println("name :" + field);

								Field[] fields = classType.getDeclaredFields();
								String fieldReturned = checkAndReturnFieldName(fields, field);
								fieldReturned = fieldReturned.substring(0, 1).toUpperCase()
										+ fieldReturned.substring(1);
								Class type = checkAndReturnFieldType(fields, field);

								try {
									Method method = obj.getClass().getMethod("set" + fieldReturned, type);
									if (isNumeric(value)) {
										int val = Integer.parseInt(value);
										method.invoke(obj, val);
									} else {

										method.invoke(obj, value);
									}
								} catch (Exception ex) {
									ex.printStackTrace();
								}

							}
						}

						return obj;
					}

				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	private static String checkAndReturnFieldName(Field[] fields, String field) {
		for (Field f : fields) {
			if (String.valueOf(f.getName()).equals(field)) {
				return field;
			}
		}
		return null;
	}

	private static Class checkAndReturnFieldType(Field[] fields, String field) {
		for (Field f : fields) {
			if (String.valueOf(f.getName()).equals(field)) {
				return f.getType();
			}
		}
		return null;
	}

	public static boolean isNumeric(String str) {
		for (char c : str.toCharArray()) {
			if (!Character.isDigit(c))
				return false;
		}
		return true;
	}
}
package com.gs.ilp.logic;

public class MakeCar {
	public static void main(String[] args) {

		Wheel fordWheel = (Wheel) ServiceFactory.getInstance(FordWheel.class);

		Car genericCar = new Car(1, fordWheel);
		System.out.println(genericCar);

		Wheel marutiWheel = (Wheel) ServiceFactory.getInstance(MarutiWheel.class);
		Car genericCar1 = new Car(1, marutiWheel);
		System.out.println(genericCar1);
	}

}
PreviousSingletonNext12) Internal Working of JVM

Last updated 6 years ago

Was this helpful?