java设计模式--Builder设计模式
发布日期:2021-07-19 01:25:47 浏览次数:2 分类:技术文章

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

在学习Builder设计模式的时候 ,发现 这个Builder 和 工厂设计模式十分相似 ,我甚至说不出来他们之间有着什么样的区别,但可以肯定的是 ,如果我们需要产生一个复杂的对象,这个对象中包含多个其他的对象,以及属性等 。

那么我们应该使用Builder 模式 ,Builder模式减少了 对象部件之间的耦合度 ,所谓的耦合度 也就是对象部件之间的联系 。

其实说的再多也不如自己认真的分析一段代码 并且自己着手实现一个Builder原型 。

下面一段代码实现的功能 是产生一个 MyProduct 对象 这MyProduct对象中包含了 PartA PartB PartC三个对象 ,我们不是像以往的一样,将所有操作在 MyProduct 完成 。

看下面操作吧 可能比我说的更好理解: 下面是结构

class MyProduct //我们的产品类 包含三个部件 。 PartA PartB PartC

{
private PartA a ;
private PartB b ;
private PartC c ;
MyProduct(PartA a,PartB b ,PartC c)
{
this.a=a;
this.b=b;
this.c=c;
}
public void showPart()
{
System.out.println(a.getClass().getName());
System.out.println(b.getClass().getName());
System.out.println(c.getClass().getName());
}
}
class PartA{}
class PartB{}
class PartC{}
interface Builder //Builder接口
{
public void buildPartA() ;
public void buildPartB() ;
public void buildPartC() ;
public MyProduct getResult(); //返回产品
}

class MyBuilderTest implements Builder

{
private PartA a =null;
private PartB b =null;
private PartC c =null;
@Override
public void buildPartA() {
if(a==null)
this.a= new PartA() ;
else
return ;
}
@Override
public void buildPartB() {
if(b==null)
this.b= new PartB() ;
else
return ;
}
@Override
public void buildPartC() {
if(c==null)
this.c= new PartC() ;
else
return ;
}
@Override
public MyProduct getResult() {
return new MyProduct(a,b,c);
}
}
class Director //一个代理
{

private MyBuilderTest t ;

Director(MyBuilderTest t)
{
this.t=t ;
}
public void build()
{
t.buildPartA() ;
t.buildPartB() ;
t.buildPartC() ;
}
}
class MyBuilder
{
public static void main(String []agrs)
{
MyBuilderTest test =new MyBuilderTest(); // 我们的构建器
Director d=new Director(test) ; //Director类
d.build() ; //通过Director构建
MyProduct product=(MyProduct)test.getResult() ; //调用Builer的 getResult返回结果
product.showPart() ; //产品的方法
}
}

转载地址:https://blog.csdn.net/iteye_6481/article/details/82309029 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JDK环境变量配置及其作用分析
下一篇:JSP中文乱码过滤器实例

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年03月16日 15时54分35秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

c语言Wndproc未定义,小弟我用c语言写了一个windows窗口,为什么有提示未定义的变量类型... 2021-06-24
c语言中malloc数组,如何在C中对malloc()数组进行一行赋值? 2021-06-24
c语言调存储过程,写留言板–调用存储过程出问题 2021-06-24
c语言编程max,C语言编程题及答案.doc 2021-06-24
android测试页面,自动执行界面测试 | Android 开发者 | Android Developers 2021-06-24
android 图片点击变色,Android开发实现ListView点击item改变颜色功能示例 2021-06-24
android增删改查布局,Android之父_增删改查 2021-06-24
vowifi android开关,如何配置VoLTE, ViLTE and VoWifi(IMS config for VoLTE, ViLTE and VoWifi) 2021-06-24
电脑端的mafsvr服务关掉_网吧才是电脑优化的精髓!学会3招你也不用羡慕网吧的流畅了... 2021-06-24
html获取文件路径_HTML 文件路径 2021-06-24
mysql滴的一声就关了_关于mysql数据库在输入密码后,滴的一声直接退出界面的解决办法(详细办法)... 2021-06-24
mysql in 有序_mysql中的in排序 mysql按in中顺序来排序 2021-06-24
mysql 行转列 显示_mysql 行转列 (结果集以坐标显示) 2021-06-24
由于连接方在一段时间后没有正确答复或连接的主机_新风换气机使用效果不佳,为何?掌握正确使用方法就好了... 2021-06-24
mysql 查询姓王_MySQL查询语句练习题,测试足够用了 2021-06-24
mysql多实例脚本_mysql多实例脚本 2021-06-24
python如何生成excel文件夹_用python脚本通过excel生成文件夹树结构 2021-06-24
python获取post请求中的所有参数_Django从POST reques获取请求参数 2021-06-24
mysql加密复制_MySQL主从复制使用SSL加密 2021-06-24
python启动远端 exe_python打包exe开机自动启动的实例(windows) 2021-06-24