设计模式——建造者模式
Posted 原地没有风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式——建造者模式相关的知识,希望对你有一定的参考价值。
分类
设计模式总体划分为三大类:
创建型模式:工厂模式,抽象工厂模式,单例模式,建造者模式,原型模式模式,共5种。
结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式,共7中。
行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式,共11种。
建造者模式(生成器模式)
GoF:建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
窝草,好抽象,那举个栗子吧
某汽车生产车间,一号汽车装配线,将各种零件按照工序组装在一起,生产出来一种型号的汽车,零件一变,就生产出另一种型号的汽车了。
建造者模式的本质:流程不变,但每个流程实现的具体细节则是经常变化的。
建造者模式保证了程序流程不会变化,即不会增加、也不会遗漏或者产生流程次序错误。
建造者模式又叫生成器模式。
组成部分
Product:复杂产品对象。
Builder:一个抽象接口,规范创建Product的组成成分。只暴露组成部分的创建接口,不涉及具体创建细节,依赖Product。
ConcreteBuilder:实现Builder接口,完成Product各个组成部分的具体创建细节,依赖Product。
Director:负责创建一个Product,依赖Builder,Product。
代码示例
Product:Person
package cn.leo.demo.mode.creator; public class Person { private String head; private String body; private String feet; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getFeet() { return feet; } public void setFeet(String feet) { this.feet = feet; } }
Builder:PersonBuilder
package cn.leo.demo.mode.creator;
public interface PersonBuilder {
void buildHead();
void buildBody();
void buildFeet();
Person buildPerson();
}
ConcreteBuilder:ManBuilder,WomenBuilder
package cn.leo.demo.mode.creator;
public class ManBuilder implements PersonBuilder{
private Person person;
public ManBuilder(Person person) {
this.person = person;
}
@Override
public void buildHead() {
person.setHead("强壮男人的Head");
}
@Override
public void buildBody() {
person.setHead("强壮男人的Body");
}
@Override
public void buildFeet() {
person.setHead("强壮男人的Feet");
}
@Override
public Person buildPerson() {
return this.person;
}
}
package cn.leo.demo.mode.creator;
public class WomenBuilder implements PersonBuilder{
private Person person;
public WomenBuilder(Person person) {
this.person = person;
}
@Override
public void buildHead() {
person.setHead("温柔女人的Head");
}
@Override
public void buildBody() {
person.setHead("温柔女人的Body");
}
@Override
public void buildFeet() {
person.setHead("温柔女人的Feet");
}
@Override
public Person buildPerson() {
return this.person;
}
}
Director:PersonDirector
package cn.leo.demo.mode.creator; public class PersonDirector { private PersonBuilder personBuilder; public PersonDirector(PersonBuilder personBuilder) { this.personBuilder = personBuilder; } public Person buildPerson(){ personBuilder.buildHead(); personBuilder.buildBody(); personBuilder.buildFeet(); return personBuilder.buildPerson(); } }
ManBuilder,WomenBuilder实现了构造复杂对象Person各个组成部分的具体细节。
以上是关于设计模式——建造者模式的主要内容,如果未能解决你的问题,请参考以下文章