定义
将一个复杂的对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示。
适用范围
1.创建复杂对象的算法独立于该对象组成部分以及他们的装配方式
2.允许被构造者对象有不同表示
建造者模式中,有如下四种角色:
1.抽象建造者(Builder):用于规范产品的各个组成部分,并进行抽象,一般独立于应用程序的逻辑。
2.具体建造者(Concrete Builder):实现抽象建造者中定义的所有方法,并且返回一个组件好的产品实例。
3.产品(Product):该角色是建造者中的复杂对象,一个系统中会有多个产品类,这些产品类不一定有共同的接口,可以是完成不相关的。
4.导演者(Director):该角色负责安排已有模块的顺序,然后告诉Builder开始建造
建造者模式实例
(1).抽象建造者类(animalBuilder)
public interface animalBuilder{
void setName(String name);
void setColor(String color);
Animal createAnimal();
}
(2).抽象产品类Animal
public abstruct class Animal{
String name;
String color;
//get和set方法
public String getName() {
return color;
}
public void setName(String name) {
this.name = name;
}
//get和set方法
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
(3).具体建造者类catBuilder
public class catBuilder implements animalBuilder{
Animal animal=new Cat();
@Override
public void setColor(String color) {
animal.setColor(color);
}
@Override
public void setName(String name) {
animal.setName(name);
}
@Override
public Animal createAnimal() {
return animal;
}
}
(4).具体建造者类dogBuilder
public class dogBuilder implements animalBuilder{
Animal animal=new Dog();
@Override
public void setColor(String color) {
animal.setColor(color);
}
@Override
public void setName(String name) {
animal.setName(name);
}
@Override
public Animal createAnimal() {
return animal;
}
}
(5).具体对象类Cat
public class Cat extends Animal{
public Cat(){
System.out.println("这是一只猫");
}
@Override
public String toString(){
return "猫名字叫:"+name+
"颜色:"+color;
}
}
(6).具体对象类Dog
public class Dog extends Animal{
public Dog(){
System.out.println("这是一只狗");
}
@Override
public String toString(){
return "狗名字叫:"+name+
"颜色:"+color;
}
}
(7).导演类AnimalDirector
public class AnimalDirector{
private animalBuilder animalBuilder;
public Cat creatCat(){
animalBuilder = new catBuilder();//父类的对象,子类的实例化,多态的使用
animalBuilder.setName("猫1");
animalBuilder.setColor("红色");
return (Cat) animalBuilder.createAnimal();
}
public Dog creatDog(){
animalBuilder = new dogBuilder();//父类的对象,子类的实例化,多态的使用
animalBuilder.setName("狗1");
animalBuilder.setColor("粽色");
return (Dog) animalBuilder.createAnimal();
}
}
(7).调用者BuilderMethod
public class BuilderMetnod{
public static void main(String[] args){
AnimalDirector director = new AnimalDirector();
//生产小猫
Cat cat = director .creatCat();
System.out.println(cat.toString());
//生产小狗
Dog dog = director .creatDog();
System.out.println(dog.toString());
}
}