**
1.建造者模式关系图
2.不多废话直接上代码
业务需求:
建造一个人类它拥有名字,年龄,喜欢的人
2.1充当角色类
public class Man {
private String love;
private String Name;
private String age;
public String getLove() {
return love;
}
public void setLove(String love) {
this.love = love;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
**
2.2构建建造者,这里我为了节约时间,把指挥者直接融入到了建造者中
public abstract class ManBuilder {
protected Man man = new Man();
public abstract void buildLove();
public abstract void buildName();
public abstract void buildAge();
public Boolean isLove(){
return false;
}
public Man construct(){
this.buildName();
this.buildAge();
if (this.isLove()){
this.buildLove();
}
return man;
}
}
2.3为这个人类设置属于它的特征
public class XiaoHeBuilder extends ManBuilder{
@Override
public void buildLove() {
man.setLove("小陈");
}
@Override
public void buildName() {
man.setAge("21");
}
@Override
public void buildAge() {
man.setName("小何");
}
//这里我使用了钩子函数表示如果这个人未满20岁不能够喜欢别人(是不是有点变态)
@Override
public Boolean isLove() {
if (Integer.parseInt(man.getAge())>20){
return true;
}
return false;
}
}
2.4 使用xml文件动态化配置创建的人类,springboot/spring …可以使用yml或者application文件
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<className>com.hehua.BuilderThree.XiaoHeBuilder</className>
</config>
2.5通过反射和document读取要创建的人类
public class XmlUtil {
public static Object getBean() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = null;
document = builder.parse(new File("src//com//hehua//BuilderThree//build.xml"));
String nodeValue = document.getElementsByTagName("className").item(0).getFirstChild().getNodeValue();
Class<?> aClass = Class.forName(nodeValue);
return aClass.newInstance();
}
}
2.6创建测试用例
public class Client {
public static void main(String[] args) throws Exception {
ManBuilder bean = (ManBuilder)XmlUtil.getBean();
Man man = bean.construct();
System.out.println(man.getName()+"在"+man.getAge()+"岁"+"喜欢"+man.getLove());
}
}
结语:多学多看多练,哈哈哈哈哈