/**
*
*/
package com.sean.factory.abst;
import com.sean.factory.Sex;
/**
* @author Sean_Zhang
*
*/
public class PersonAbstractFactory {
public static IPerson getPerson(Sex sex,boolean isMarried) {
IPerson person = null;
if(sex == Sex.MALE) {
person = new Man(isMarried);
} else if(sex == Sex.FEMALE) {
person = new Woman(isMarried);
}
return person;
}
}
package com.sean.factory.abst;
import com.sean.factory.Sex;
public class Man extends Person {
public Man(boolean isMarried) {
super(isMarried);
}
public IName getName() {
return new ManName();
}
public IPartner getPartner() {
IPartner partner = null;
if(isMarried()) {
partner = new WomanPartner();
}
return partner;
}
public Sex getSex() {
return Sex.MALE;
}
}
package com.sean.factory.abst;
import com.sean.factory.Sex;
public class Woman extends Person {
public Woman(boolean isMarried) {
super(isMarried);
}
public IName getName() {
return new WomanName();
}
public IPartner getPartner() {
IPartner partner = null;
if(isMarried()) {
partner = new ManPartner();
}
return partner;
}
public Sex getSex() {
return Sex.FEMALE;
}
}
/**
*
*/
package com.sean.factory.abst;
import com.sean.factory.Names;
/**
* @author Sean_Zhang
*
*/
public class WomanName implements IName {
/* (non-Javadoc)
* @see com.sean.factory.abst.IName#getName()
*/
public String getName() {
return Names.WOMAN.getName();
}
}
/**
*
*/
package com.sean.factory.abst;
import com.sean.factory.Names;
/**
* @author Sean_Zhang
*
*/
public class ManName implements IName {
/* (non-Javadoc)
* @see com.sean.factory.abst.IName#getName()
*/
public String getName() {
return Names.MAN.getName();
}
}
/**
*
*/
package com.sean.factory.abst;
/**
* @author Sean_Zhang
*
*/
public class ManPartner implements IPartner {
/* (non-Javadoc)
* @see com.sean.factory.abst.IPartner#getPartner()
*/
public Partner getPartner() {
return Partner.HUSBAND;
}
}
/**
*
*/
package com.sean.factory.abst;
/**
* @author Sean_Zhang
*
*/
public enum Partner {
WIFE,HUSBAND;
}
/**
*
*/
package com.sean.factory.abst;
/**
* @author Sean_Zhang
*
*/
public class WomanPartner implements IPartner {
/* (non-Javadoc)
* @see com.sean.factory.abst.IPartner#getPartner()
*/
public Partner getPartner() {
return Partner.WIFE;
}
}
/**
*
*/
package com.sean.factory.abst;
/**
* @author Sean_Zhang
*
*/
public interface IPartner {
public Partner getPartner();
}
/**
*
*/
package com.sean.factory.abst;
/**
* @author Sean_Zhang
*
*/
public interface IName {
public String getName();
}
package com.sean.factory.abst;
import com.sean.factory.Sex;
public interface IPerson {
public IName getName();
public IPartner getPartner();
public boolean isMarried();
public Sex getSex();
}
JDK Examples:
- java.util.Calendar#getInstance()
- java.util.Arrays#asList()
- java.util.ResourceBundle#getBundle()
- java.sql.DriverManager#getConnection()
- java.sql.Connection#createStatement()
- java.sql.Statement#executeQuery()
- java.text.NumberFormat#getInstance()
- javax.xml.transform.TransformerFactory#newInstance()