设计模式 -- 建造者模式(Builder Pattern)
这个模式以前也义Android-kotlin的场景下讲过 Android 用建造者模式模式写一个Dialog-CSDN博客
不过用的是 变种的建造者模式
建造者模式: 属于创建型模式 提供了一种创建对象的最佳方式, 使用多个简单的对象一步一步构建成一个复杂的对象 。
介绍
意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
主要解决问题:一些基本部件不会变,而其组合经常变化的时候。需要生成的对象具有复杂的内部结构,需要生成的对象内部属性本身相互依赖。
关键代码:实现与被代理类组合。
优点:1、建造者独立,易扩展。 2、便于控制细节风险。
缺点:1、产品必须有共同点,范围有限制。 2、如果内部变化复杂,会有很多的建造类。
以建造一个三角形圆形矩形的图形为例
角色类:包含多个组成部件的复杂对象
public class Shape {
private String triangle;
private String circular;
private String rectangle;
public void setTriangle(String triangle) {
this.triangle = triangle;
}
public void setCircular(String circular) {
this.circular = circular;
}
public void setRectangle(String rectangle) {
this.rectangle = rectangle;
}
public void draw() {
//使用得到的具体的三角形圆形矩形绘制一个图形
}
}
抽象建造者:包含创建产品各个子部件的抽象方法
abstract class Builder {
protected Shape shape = new Shape();
public abstract void buildTriangle();
public abstract void buildCircular();
public abstract void buildRectangle();
public Shape getShape() {
return shape;
}
}
具体建造者:实现了抽象建造者接口
public class ConcreteBuilder1 extends Builder{
@Override
public void buildTriangle() {
shape.setTriangle("建造 红色三角形");
}
@Override
public void buildCircular() {
shape.setCircular("建造 蓝色圆形");
}
@Override
public void buildRectangle() {
shape.setRectangle("建造 绿色矩形");
}
}
public class ConcreteBuilder2 extends Builder{
@Override
public void buildTriangle() {
shape.setTriangle("建造 青色三角形");
}
@Override
public void buildCircular() {
shape.setCircular("建造 蓝色圆形");
}
@Override
public void buildRectangle() {
shape.setRectangle("建造 紫色矩形");
}
}
指挥者:调用建造者中的方法完成复杂对象的创建。
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
//产品构建与组装方法
public Shape construct() {
builder.buildTriangle();
builder.buildCircular();
builder.buildRectangle();
return builder.getShape();
}
}
使用
public static void main(String[] args) {
Builder builder = new ConcreteBuilder1();
Director director = new Director(builder);
Shape shape = director.construct();
shape.draw();
builder = new ConcreteBuilder2();
director = new Director(builder);
shape = director.construct();
shape.draw();
}
————————————————
版权声明:本文为CSDN博主「小铁-Android」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_50675668/article/details/134434590
不过用的是 变种的建造者模式
建造者模式: 属于创建型模式 提供了一种创建对象的最佳方式, 使用多个简单的对象一步一步构建成一个复杂的对象 。
介绍
意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
主要解决问题:一些基本部件不会变,而其组合经常变化的时候。需要生成的对象具有复杂的内部结构,需要生成的对象内部属性本身相互依赖。
关键代码:实现与被代理类组合。
优点:1、建造者独立,易扩展。 2、便于控制细节风险。
缺点:1、产品必须有共同点,范围有限制。 2、如果内部变化复杂,会有很多的建造类。
以建造一个三角形圆形矩形的图形为例
角色类:包含多个组成部件的复杂对象
public class Shape {
private String triangle;
private String circular;
private String rectangle;
public void setTriangle(String triangle) {
this.triangle = triangle;
}
public void setCircular(String circular) {
this.circular = circular;
}
public void setRectangle(String rectangle) {
this.rectangle = rectangle;
}
public void draw() {
//使用得到的具体的三角形圆形矩形绘制一个图形
}
}
抽象建造者:包含创建产品各个子部件的抽象方法
abstract class Builder {
protected Shape shape = new Shape();
public abstract void buildTriangle();
public abstract void buildCircular();
public abstract void buildRectangle();
public Shape getShape() {
return shape;
}
}
具体建造者:实现了抽象建造者接口
public class ConcreteBuilder1 extends Builder{
@Override
public void buildTriangle() {
shape.setTriangle("建造 红色三角形");
}
@Override
public void buildCircular() {
shape.setCircular("建造 蓝色圆形");
}
@Override
public void buildRectangle() {
shape.setRectangle("建造 绿色矩形");
}
}
public class ConcreteBuilder2 extends Builder{
@Override
public void buildTriangle() {
shape.setTriangle("建造 青色三角形");
}
@Override
public void buildCircular() {
shape.setCircular("建造 蓝色圆形");
}
@Override
public void buildRectangle() {
shape.setRectangle("建造 紫色矩形");
}
}
指挥者:调用建造者中的方法完成复杂对象的创建。
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
//产品构建与组装方法
public Shape construct() {
builder.buildTriangle();
builder.buildCircular();
builder.buildRectangle();
return builder.getShape();
}
}
使用
public static void main(String[] args) {
Builder builder = new ConcreteBuilder1();
Director director = new Director(builder);
Shape shape = director.construct();
shape.draw();
builder = new ConcreteBuilder2();
director = new Director(builder);
shape = director.construct();
shape.draw();
}
————————————————
版权声明:本文为CSDN博主「小铁-Android」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_50675668/article/details/134434590
本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com