Skip to main content

Primitive Obsession with Example


Primitive Obsession is the name of a code smell that occurs when we use primitive data types to represent domain ideas. For example, we use a string to represent a message or an integer to represent an amount of money.
For Example: Code with Primitive Obsession

// primitiveObsession.java

public class primitiveObsession {

	public static void main(String args[]) {

		Integer[] cityPopulations = { 13000000, // London
				21903623, // New York
				12570000, // Tokyo
				1932763, // Stockholm
				1605602, // Barcelona
				4119190 // Sydney
		};

		for (Integer cityPopulation : cityPopulations) {
			System.out.println(cityPopulation);
		}

	}

}

public class City {

	private final String name;
	private final int population;
	private final Continent continent;

	public String getName() {
		return name;
	}

	public int getPopulation() {
		return population;
	}

	public Continent getContinent() {
		return continent;
	}

	public City(String name, int population, Continent continent) {
		this.name = name;
		this.population = population;
		this.continent = continent;
	}

	public String toString() {
		return String.format("%s has a popluation of %s and is located in %s",
				name, population, continent);
	}

	public static final City[] ALL_CITIES = { 
			new City("London", 13000000, Continent.EUROPE),
			new City("New York", 21903623, Continent.AMERICA), 
			new City("Tokyo", 12570000, Continent.ASIA),
			new City("Stockholm", 1932763, Continent.EUROPE), 
			new City("Barcelona", 1605602, Continent.EUROPE),
			new City("Sydney", 4119190, Continent.AUSTRALIA)
	};

}

//Continent.java

public enum Continent {
	AMERICA,
	EUROPE,
	AFRICA,
	ASIA,
	AUSTRALIA
}

// withOutPrimitiveObsession.java

public class withOutPrimitiveObsession {

	public static void main(String args[]) {

		for (City city : City.ALL_CITIES) {
			System.out.println(city.toString());
		}

	}

}

Popular posts from this blog

Singleton Pattern

Lazy Initialization :- The instantiation of an object can be delayed until it is actually needed. Usage: This especially beneficial when the constructor is doing a costly job like, accessing a remote database. Example: This code demonstrates how the Singleton pattern can be used to create a counter to provide unique sequential numbers, such as might be required for use as primary keys in a Database:   Sequence.java   public class Sequence { private static Sequence instance; private static int counter; private Sequence() { counter = 0; // May be necessary to obtain // starting value elsewhere... } public static synchronized Sequence getInstance() { if(instance==null) // Lazy instantiation { instance = new Sequence(); } return instance; } public static synchronized int getNext() { return ++counter; } }   Some things to note about this implementation: Synchronized methods are used to ensure that the class is thread-safe. This class cannot be subclassed because the constructor is private ...

MVC Design Patterns

Context MVC is an architectural pattern that is used when developing interactive application such as a shopping cart on the Internet. Problem User interfaces change often, especially on the internet where look-and-feel is a competitive issue. Also, the same information is presented in different ways. The core business logic and data is stable . Solution Use the concept of dividing the concerns to divide the application into three areas Model :- Encapsulates the core data and the functionality View :- Encapsulates the presentation of the data there can be many views of the common data Controller:- accepts input from the user and makes request from the model for the data to produce a new view The model represents the structure of the data and the operations that can be performed on that data. The view represents the data that is in a presentable format. The controller translates the user action like mouse events, submit, keystrokes, words spoken with user input to call the call t...