Merge branch 'master' of https://github.com/themoffster/java-design-patterns into themoffster-master
Conflicts: dao/pom.xml
This commit is contained in:
		@@ -3,6 +3,8 @@ package com.iluwatar.dao;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.apache.log4j.Logger;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * Data Access Object (DAO) is an object that provides an abstract interface to some type of database or other 
 | 
			
		||||
@@ -17,43 +19,38 @@ import java.util.List;
 | 
			
		||||
 */
 | 
			
		||||
public class App {
 | 
			
		||||
 | 
			
		||||
	private static Logger LOGGER = Logger.getLogger(App.class);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Program entry point
 | 
			
		||||
	 * @param args command line args
 | 
			
		||||
	 * Program entry point.
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @param args command line args.
 | 
			
		||||
	 */
 | 
			
		||||
	public static void main(String[] args) {
 | 
			
		||||
 | 
			
		||||
		CustomerDaoImpl customerDao = new CustomerDaoImpl(generateSampleCustomers());
 | 
			
		||||
 | 
			
		||||
		System.out.println("customerDao.getAllCustomers(): " + customerDao.getAllCustomers());
 | 
			
		||||
		System.out.println("customerDao.getCusterById(2): " + customerDao.getCusterById(2));
 | 
			
		||||
 | 
			
		||||
		Customer customer = new Customer(4, "Dan", "Danson");
 | 
			
		||||
	public static void main(final String[] args) {
 | 
			
		||||
		final CustomerDaoImpl customerDao = new CustomerDaoImpl(generateSampleCustomers());
 | 
			
		||||
		LOGGER.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers());
 | 
			
		||||
		LOGGER.info("customerDao.getCusterById(2): " + customerDao.getCustomerById(2));
 | 
			
		||||
		final Customer customer = new Customer(4, "Dan", "Danson");
 | 
			
		||||
		customerDao.addCustomer(customer);
 | 
			
		||||
 | 
			
		||||
		System.out.println("customerDao.getAllCustomers(): " + customerDao.getAllCustomers());
 | 
			
		||||
 | 
			
		||||
		LOGGER.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers());
 | 
			
		||||
		customer.setFirstName("Daniel");
 | 
			
		||||
		customer.setLastName("Danielson");
 | 
			
		||||
		customerDao.updateCustomer(customer);
 | 
			
		||||
 | 
			
		||||
		System.out.println("customerDao.getAllCustomers(): " + customerDao.getAllCustomers());
 | 
			
		||||
 | 
			
		||||
		LOGGER.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers());
 | 
			
		||||
		customerDao.deleteCustomer(customer);
 | 
			
		||||
 | 
			
		||||
		System.out.println("customerDao.getAllCustomers(): " + customerDao.getAllCustomers());
 | 
			
		||||
		LOGGER.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Generate customers
 | 
			
		||||
	 * @return list of customers
 | 
			
		||||
	 * Generate customers.
 | 
			
		||||
	 * 
 | 
			
		||||
	 * @return list of customers.
 | 
			
		||||
	 */
 | 
			
		||||
	public static List<Customer> generateSampleCustomers() {
 | 
			
		||||
		Customer customer1 = new Customer(1, "Adam", "Adamson");
 | 
			
		||||
		Customer customer2 = new Customer(2, "Bob", "Bobson");
 | 
			
		||||
		Customer customer3 = new Customer(3, "Carl", "Carlson");
 | 
			
		||||
 | 
			
		||||
		List<Customer> customers = new ArrayList<Customer>();
 | 
			
		||||
		final Customer customer1 = new Customer(1, "Adam", "Adamson");
 | 
			
		||||
		final Customer customer2 = new Customer(2, "Bob", "Bobson");
 | 
			
		||||
		final Customer customer3 = new Customer(3, "Carl", "Carlson");
 | 
			
		||||
		final List<Customer> customers = new ArrayList<Customer>();
 | 
			
		||||
		customers.add(customer1);
 | 
			
		||||
		customers.add(customer2);
 | 
			
		||||
		customers.add(customer3);
 | 
			
		||||
 
 | 
			
		||||
@@ -6,65 +6,63 @@ package com.iluwatar.dao;
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class Customer {
 | 
			
		||||
	
 | 
			
		||||
    private int id;
 | 
			
		||||
    private String firstName;
 | 
			
		||||
    private String lastName;
 | 
			
		||||
 | 
			
		||||
    public Customer(int id, String firstName, String lastName) {
 | 
			
		||||
        this.id = id;
 | 
			
		||||
        this.firstName = firstName;
 | 
			
		||||
        this.lastName = lastName;
 | 
			
		||||
  private int id;
 | 
			
		||||
  private String firstName;
 | 
			
		||||
  private String lastName;
 | 
			
		||||
 | 
			
		||||
  public Customer(final int id, final String firstName, final String lastName) {
 | 
			
		||||
    this.id = id;
 | 
			
		||||
    this.firstName = firstName;
 | 
			
		||||
    this.lastName = lastName;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public int getId() {
 | 
			
		||||
    return id;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public void setId(final int id) {
 | 
			
		||||
    this.id = id;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public String getFirstName() {
 | 
			
		||||
    return firstName;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public void setFirstName(final String firstName) {
 | 
			
		||||
    this.firstName = firstName;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public String getLastName() {
 | 
			
		||||
    return lastName;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public void setLastName(final String lastName) {
 | 
			
		||||
    this.lastName = lastName;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public String toString() {
 | 
			
		||||
    return "Customer{" + "id=" + getId() + ", firstName='" + getFirstName() + '\'' + ", lastName='"
 | 
			
		||||
        + getLastName() + '\'' + '}';
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public boolean equals(final Object o) {
 | 
			
		||||
    boolean isEqual = false;
 | 
			
		||||
    if (this == o) {
 | 
			
		||||
      isEqual = true;
 | 
			
		||||
    } else if (o != null && (getClass() == o.getClass())) {
 | 
			
		||||
      final Customer customer = (Customer) o;
 | 
			
		||||
      if (getId() == customer.getId())
 | 
			
		||||
        isEqual = true;
 | 
			
		||||
    }
 | 
			
		||||
    return isEqual;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    public int getId() {
 | 
			
		||||
        return id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setId(int id) {
 | 
			
		||||
        this.id = id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getFirstName() {
 | 
			
		||||
        return firstName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFirstName(String firstName) {
 | 
			
		||||
        this.firstName = firstName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getLastName() {
 | 
			
		||||
        return lastName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setLastName(String lastName) {
 | 
			
		||||
        this.lastName = lastName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String toString() {
 | 
			
		||||
        return "Customer{" +
 | 
			
		||||
                "id=" + id +
 | 
			
		||||
                ", firstName='" + firstName + '\'' +
 | 
			
		||||
                ", lastName='" + lastName + '\'' +
 | 
			
		||||
                '}';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean equals(Object o) {
 | 
			
		||||
        if (this == o) return true;
 | 
			
		||||
        if (o == null || getClass() != o.getClass()) return false;
 | 
			
		||||
 | 
			
		||||
        Customer customer = (Customer) o;
 | 
			
		||||
 | 
			
		||||
        if (id != customer.id) return false;
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int hashCode() {
 | 
			
		||||
        int result = id;
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
  @Override
 | 
			
		||||
  public int hashCode() {
 | 
			
		||||
    int result = getId();
 | 
			
		||||
    return result;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,10 +8,14 @@ import java.util.List;
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public interface CustomerDao {
 | 
			
		||||
	
 | 
			
		||||
    public List<Customer> getAllCustomers();
 | 
			
		||||
    public Customer getCusterById(int id);
 | 
			
		||||
    public void addCustomer(Customer customer);
 | 
			
		||||
    public void updateCustomer(Customer customer);
 | 
			
		||||
    public void deleteCustomer(Customer customer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  List<Customer> getAllCustomers();
 | 
			
		||||
 | 
			
		||||
  Customer getCustomerById(int id);
 | 
			
		||||
 | 
			
		||||
  void addCustomer(Customer customer);
 | 
			
		||||
 | 
			
		||||
  void updateCustomer(Customer customer);
 | 
			
		||||
 | 
			
		||||
  void deleteCustomer(Customer customer);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,54 +4,59 @@ import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 
 | 
			
		||||
 * The data access object (DAO) is an object that provides an abstract interface to some type of database or other persistence mechanism.
 | 
			
		||||
 * By mapping application calls to the persistence layer, DAO provide some specific data operations without exposing details of the database.
 | 
			
		||||
 * This isolation supports the Single responsibility principle. It separates what data accesses the application needs, in terms of
 | 
			
		||||
 * domain-specific objects and data types (the public interface of the DAO), from how these needs can be satisfied with a specific DBMS,
 | 
			
		||||
 * database schema, etc.
 | 
			
		||||
 * The data access object (DAO) is an object that provides an abstract interface to some type of
 | 
			
		||||
 * database or other persistence mechanism. By mapping application calls to the persistence layer,
 | 
			
		||||
 * DAO provide some specific data operations without exposing details of the database. This
 | 
			
		||||
 * isolation supports the Single responsibility principle. It separates what data accesses the
 | 
			
		||||
 * application needs, in terms of domain-specific objects and data types (the public interface of
 | 
			
		||||
 * the DAO), from how these needs can be satisfied with a specific DBMS, database schema, etc.
 | 
			
		||||
 * 
 | 
			
		||||
 */
 | 
			
		||||
public class CustomerDaoImpl implements CustomerDao {
 | 
			
		||||
 | 
			
		||||
    // Represents the DB structure for our example so we don't have to managed it ourselves
 | 
			
		||||
    // Note: Normally this would be in the form of an actual database and not part of the Dao Impl.
 | 
			
		||||
    private List<Customer> customers;
 | 
			
		||||
  // Represents the DB structure for our example so we don't have to managed it ourselves
 | 
			
		||||
  // Note: Normally this would be in the form of an actual database and not part of the Dao Impl.
 | 
			
		||||
  private List<Customer> customers;
 | 
			
		||||
 | 
			
		||||
    public CustomerDaoImpl(List<Customer> customers) {
 | 
			
		||||
        this.customers = customers;
 | 
			
		||||
  public CustomerDaoImpl(final List<Customer> customers) {
 | 
			
		||||
    this.customers = customers;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public List<Customer> getAllCustomers() {
 | 
			
		||||
    return customers;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public Customer getCustomerById(final int id) {
 | 
			
		||||
    Customer customer = null;
 | 
			
		||||
    for (final Customer cus : getAllCustomers()) {
 | 
			
		||||
      if (cus.getId() == id) {
 | 
			
		||||
        customer = cus;
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return customer;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<Customer> getAllCustomers() {
 | 
			
		||||
        return customers;
 | 
			
		||||
  @Override
 | 
			
		||||
  public void addCustomer(final Customer customer) {
 | 
			
		||||
    if (getCustomerById(customer.getId()) == null) {
 | 
			
		||||
      customers.add(customer);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Customer getCusterById(int id) {
 | 
			
		||||
        for (int i = 0; i < customers.size(); i++) {
 | 
			
		||||
            if (customers.get(i).getId() == id) {
 | 
			
		||||
                return customers.get(i);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // No customer found
 | 
			
		||||
        return null;
 | 
			
		||||
 | 
			
		||||
  @Override
 | 
			
		||||
  public void updateCustomer(final Customer customer) {
 | 
			
		||||
    if (getAllCustomers().contains(customer)) {
 | 
			
		||||
      final int index = getAllCustomers().indexOf(customer);
 | 
			
		||||
      getAllCustomers().set(index, customer);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void addCustomer(Customer customer) {
 | 
			
		||||
        customers.add(customer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void updateCustomer(Customer customer) {
 | 
			
		||||
        if (customers.contains(customer)) {
 | 
			
		||||
            customers.set(customers.indexOf(customer), customer);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void deleteCustomer(Customer customer) {
 | 
			
		||||
        customers.remove(customer);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
  @Override
 | 
			
		||||
  public void deleteCustomer(final Customer customer) {
 | 
			
		||||
    getAllCustomers().remove(customer);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user