博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式学习之路-建造者模式
阅读量:4165 次
发布时间:2019-05-26

本文共 1511 字,大约阅读时间需要 5 分钟。

建造者模式,使我们经常提到一个模式,而且很多地方都用到了,比如AlertDialog创建使用Builder。这也是建造者模式的体现,那么我们平时在写代码的时候也可以使用这个方式,来梳理代码逻辑。

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者的UML类图

基本代码

absract class Builder{ public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract Product GetResult();}

class ConcreteBuilder1 extends Builder{private Product product = new Product(); @Override public void BuilderPartA(){  product.add("A"); }@Override public void BuilderPartB(){  product.add("B"); }@Override public Product GetResult(){  return product; }}
 
class Director{ public void Construct(Builder builder){  builder.BuilderA();  builder.BuilderB(); }}
class Product { List
parts = new ArrayList
(); public void add(String a){ parts.add(a); } public void show(){ for(String : parts){ Log.i("TAG",parts.get(i)); } }}
class ConcreteBuilder2 extends Builder{private Product product = new Product(); @Override public void BuilderPartA(){  product.add("X"); }@Override public void BuilderPartB(){  product.add("Y"); }@Override public Product GetResult(){  return product; }}

客户端

static void main(){ Director d = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcreteBuilder2(); d.construct(b1); Product p1 = b1.Getresult(); p1.show();}

 我们以建造小人为例子。先创建一个抽象小人父类,里面有创建头,身体,手,脚等抽象方法。然后在新建一个具体的胖小人实体类和一个瘦小人实体类。新建一个Director指挥者,在里面有个创建人类的方法,调用抽象类的方法,这样只要通过指挥者创建人类,客户端不需要创建人类的复杂过程,只需要调用指挥者类的创建方法就可以了。 

看到这儿不禁让我想起了一个相似的模式,那就是策略模式。感觉有点异曲同工之妙。

这里有个造小人的代码例子,很简单。想看呢就下下来看看。

git:

你可能感兴趣的文章
java String于常量池中的介绍
查看>>
java Text 错误: 找不到或无法加载主类 Text
查看>>
XShell连接ubantu:给ubantu安装ssh
查看>>
c语言的null和0
查看>>
二进制详解:世界上有10种人,一种懂二进制,一种不懂。
查看>>
c语言一个字符变量存储多个字符
查看>>
java接口中方法的默认访问修饰符为public
查看>>
java多线程之并发synchronized
查看>>
java多线程之并发Lock
查看>>
微信公众平台基础配置
查看>>
jpa 和 hibernate 的联系
查看>>
SpringBoot之@SpringBootApplication注解
查看>>
ajax 传JSON 写法
查看>>
SpringBoot之web发展史
查看>>
SpringBoot之开发web页面
查看>>
SpringBoot之快速部署
查看>>
springBoot之jar包在后台(运行:编写start、stop脚本)
查看>>
redis学习
查看>>
SpringBoot之application.properties文件能配置的属性
查看>>
javaWeb监听器、过滤器、拦截器
查看>>