Java设计模式-建造者模式
来源:互联网 发布:百度云搜索源码 编辑:程序博客网 时间:2024/06/05 12:10
概念
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
角色说明
Product 产品类 : 具体产品类。
Builder : 抽象接口类, 规范产品的组建。
ConcreteBuilder : 具体的建造者,实现Builder接口,构造和装配各个部件。.
Director : 指挥着,构建一个使用Builde接口的对象。
实例
具体产品(product)
/** * <pre> * author : duyb * time : 2017/10/17 * desc : 具体产品类 * version: 1.0 * </pre> */public class Computer { public void setCpuCore(String partCore) { Log.e("打印电脑cpu核数--->", partCore); } public void setRamSize(String partSize) { Log.e("打印电脑内存大小--->", partSize); }}
建造者(builder)接口
/** * <pre> * author : duyb * time : 2017/10/17 * desc :建造者类接口 * version: 1.0 * </pre> */public interface IComputerBuilder { /** * cpu核数 */ void BuilderCpuCore(); /** * 内存大小 */ void BuilderRamSize();}
具体的建造者类
/** * <pre> * author : duyb * time : 2017/10/17 * desc : 具体的建造者类1 * version: 1.0 * </pre> */public class ConcreateBuilder1 implements IComputerBuilder { private Computer computer = new Computer(); @Override public void BuilderCpuCore() { computer.setCpuCore("4"); } @Override public void BuilderRamSize() { computer.setRamSize("2"); }}
/** * <pre> * author : duyb * time : 2017/10/17 * desc : 具体的建造者类2 * version: 1.0 * </pre> */public class ConcreateBuilder2 implements IComputerBuilder { private Computer computer = new Computer(); @Override public void BuilderCpuCore() { computer.setCpuCore("8"); } @Override public void BuilderRamSize() { computer.setRamSize("4"); }}
指挥着(Director)
/** * <pre> * author : duyb * time : 2017/10/17 * desc : 指挥着,构建使用builder接口对象 * version: 1.0 * </pre> */public class Director { public void Construct(IComputerBuilder builder) { builder.BuilderCpuCore(); builder.BuilderRamSize(); }}
测试代码
/** * <pre> * author : duyb * time : 2017/10/17 * desc : 测试类 * version: 1.0 * </pre> */public class TestMain { public void Test() { Director director = new Director(); IComputerBuilder b1 = new ConcreateBuilder1(); IComputerBuilder b2 = new ConcreateBuilder2(); director.Construct(b1); director.Construct(b2); }}
链式builder模式
/** * <pre> * author : duyb * time : 2017/10/17 * desc :链式建造者 * version: 1.0 * </pre> */public class Student { //final修饰:必须在构造中初始化 private final int stuId;//必须 private final String name;//必须 private final int age;//可选 private final int gender;//可选 private final String address;//可选 //注意:此处构造私有 private Student(StudentBuilder builder) { this.stuId = builder.stuId; this.name = builder.name; this.age = builder.age; this.gender = builder.gender; this.address = builder.address; } //此处省略各get方法(只提供get方法)..... public static class StudentBuilder { private final int stuId; private final String name; private int age; private int gender; private String address; //必填属性 public StudentBuilder(int stuId, String name) { this.stuId = stuId; this.name = name; } public StudentBuilder setAge(int age) { this.age = age; return this; } public StudentBuilder setGender(int gender) { this.gender = gender; return this; } public StudentBuilder setAddress(String address) { this.address = address; return this; } //结束方法 public Student build() { return new Student(this); } }}
public class TestMain { public Student Test() { return new Student.StudentBuilder(1,"duyb") .setAge(25) .setAddress("中国.北京") .build(); }}
分析:
return new Student.StudentBuilder(1,”duyb”)
.setAge(25)
.setAddress(“中国.北京”)
.build();
—————————————
.build()返回student实例, 调用Student构造:
private Student(StudentBuilder builder) {
this.stuId = builder.stuId;
this.name = builder.name;
this.age = builder.age;
this.gender = builder.gender;
this.address = builder.address;
},而Student(StudentBuilder builder)的参数是StudentBuilder 实例,故在调用.build()之前通过调用StudentBuilder 的构造Student.StudentBuilder(1,”duyb”)来初始化参数。
小结
使用场景:
相同的方法,不同的执行顺序,产生不同的执行效果
一个对象可以配置多个不同的零件,产生不同的效果
一个对象,参数方法极多,调用顺序不同则效果不同
参考
http://blog.csdn.net/nugongahou110/article/details/50395698
- JAVA-建造者设计模式
- Java设计模式-----Builder建造者模式
- Java设计模式-----Builder建造者模式
- JAVA设计模式--建造者模式
- java设计模式之建造者模式
- java设计模式之建造者模式
- 设计模式(JAVA)-------建造者模式
- java设计模式之建造者模式
- 【Java设计模式】之建造者模式
- java设计模式之建造者模式
- JAVA设计模式-建造者模式-Builder
- JAVA系列-设计模式-建造者模式
- Java--设计模式之建造者模式
- JAVA设计模式-建造者模式(Builder)
- java设计模式之-建造者模式
- java设计模式之建造者模式
- JAVA设计模式:建造者模式
- java设计模式之建造者模式
- io-nio-socket步步为营(七) IO模型-心得体会
- js 比较日期大小
- storyboard点击背景关闭键盘
- java 代码片段
- GraphQL初探:从REST到GraphQL,更完善的数据查询定义
- Java设计模式-建造者模式
- Objective-C 浅谈meta-class (元类)
- java注解(一)概念及JABX使用例子
- 在view上画一个button,自定义其按下和松开后的样式
- java注解(二)自定义注解……
- 删除oracle10G
- Codeforces Round #441 (Div. 2)
- 检查空表
- io-nio-socket步步为营(八)实践练习