package builderPattern;
/*
* 画一个小人
*/
public class Commonly {
public static void main(String[] args) {
Person person = new Person();
System.out.println("画一个小人:");
person.drawHand("小头");
person.drawHand("大手");
person.drawFoot("大脚");
//再画一个小人
System.out.println("再画一个小人:");
person.drawHand("大头");
person.drawHand("小手");
//对 没错忘了画脚了
}
}
/*
* 人 类 可以画 头 手 脚
*/
class Person{
/*
* 画头
*/
public void drawHead(String head){
System.out.println(head);
}
/*
* 画手
*/
public void drawHand(String hand){
System.out.println(hand);
}
/*
* 画脚
*/
public void drawFoot(String foot){
System.out.println(foot);
}
}
package builderPattern;
/**
* 建造者模式:
* 讲一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的标示
*
*@author LiMing E-mail:1151143484@qq.com
*@date 2017年6月17日 上午10:50:30
*/
public class BuilderPattern {
public static void main(String[] args) {
PersonSmallBuilder builder = new PersonSmallBuilder();
PersonBigBuilder bigBuilder = new PersonBigBuilder();
Director director = new Director(builder);
Director director2 = new Director(bigBuilder);
System.out.println("建造小人1:");
director.CreatPerson();
System.out.println("建造小人2:");
director2.CreatPerson();
/**
* 总结:
* PersonsBuilder是什么?
* PersonsBuilder是对各个部件指定的抽象接口
* PersonSmallBuilder是什么?
* PersonSmallBuilder是具体的构建者 实现PersonsBuilder接口 构造和装配各个部件
* Director是什么 ?
* Director是指挥者 根据用户需求构造产品(根据用户构造方法中传入的Builder具体类的类别)
* 什么时候使用建造者模式?
* 主要用于创建一些复杂的对象,这些对象内部构建的建造顺序通常是稳定的,但对象内部的构建通常是面临着复杂的变化
* 比如构造小人 每次构造只需要画头-画手-画脚 这几个步骤是固定不变的 但是 画头的时候有大有小有胖有瘦 这个事复杂变化的
* 所以需要用构建者模式 用户只需要实现builder类的接口 做具体的实现 然后调用指挥者来进行创建
*/
}
}
/*
* 抽象的建造人类
*/
abstract class PersonsBuilder{
public abstract void drawHead();
public abstract void drawHand();
public abstract void drawFoot();
}
/*
* 具体的实现类 画各种人物
*/
class PersonSmallBuilder extends PersonsBuilder{
public void drawHead() {
System.out.println("大头");
}
@Override
public void drawHand() {
System.out.println("小手");
}
@Override
public void drawFoot() {
System.out.println("小脚");
}
}
class PersonBigBuilder extends PersonsBuilder{
public void drawHead() {
System.out.println("小头");
}
@Override
public void drawHand() {
System.out.println("大手");
}
@Override
public void drawFoot() {
System.out.println("大脚");
}
}
/*
* 最重要的类 隆重登场!!! 没错 就是他 指挥者
*/
class Director{
private PersonsBuilder builder;
public Director(PersonsBuilder builder){
this.builder = builder;
}
/*
* 根据用户构造的时候传进来的 PersonsBuilder 类别来构造小人
*
* 注意这里!!! 一共三个步骤 调用CreatPerson 方法来画小人 是肯定不会少胳膊少腿儿的
*/
public void CreatPerson(){
builder.drawHead();
builder.drawHand();
builder.drawFoot();
}
}