创建型设计模式简述

本文由java开发者Whim撰写,介绍了创建型设计模式,包括工厂模式(简单工厂、工厂方法、抽象工厂)、原型模式(浅克隆、深克隆)和构建者模式。文章强调了这些模式在业务bean创建中的应用,并提醒读者注意原型模式中克隆对象引用地址的问题。
摘要由CSDN通过智能技术生成

写在前面(如有不足或者错误的地方,希望大家指出,共同进步)

好!我是Whim,帝都的一个小小java,从业三年(其实是两年多一点,但说两年是不是亏了(手动滑稽)),在进阶过程中,可能有的知识点刚学的时候印象会比较深刻,但是大家都明白,应该没有一个公司或者说一个岗位会让你经常用到所有学过的东西,但需要用的时候你得能拿出来,所以萌生了我开始写博客,使用最能激到我的点的描述语句,记录自己的学习之路,也希望给有缘看到的技术工程师们,有那么一点点的帮助。

创建型设计模式

创建型设计模式大概分为以下几类:

  1. 工厂模式
  2. 原型模式
  3. 构建者模式
  4. 单例模式
    注:一般创建型设计模式,大多用来做业务bean,很少的构建者可能会用来做数据bean!!!

工厂模式

为了从某种意义上相同的bean,才可以称之为工厂
工厂模式又可以细分为:
1:简单工厂–>例如spring,用的就是简单工厂模式
2:工厂方法
3:抽象工厂

简单工厂

这种设计模式是一种很神奇的设计模式,如果你单单使用它的基础用法,这个玩意实在是太不好用了;
	基础用法,只要给它一个字符串,它就可以给你一个对象。
	createBean方法中接入参string类型的name,根据name对比到类名,直接实例化返回就可以了。
	例:	public Object creatTest(String name){
		        if(name.equalsIgnoreCase("D")){
		            return new D();
		        }else if(name.equalsIgnoreCase("E")){
		            return new E();
		        }
		        return null;
		    }
缺点:
1:违反了开闭原则,不利于扩展和维护
2:入参不明确
3:简单工厂老得加else if 这谁受得了呀?

改进方案:
1:spring用了xml配置,建立了映射,就不用单独写new了
2:入参不明确,就把入参固定设置为查找对象的类名呗
3:通过对象名称,去Map集合中直接查找,省去多余的代码

工厂方法

工厂方法模式说白了就是我先声明一个抽象类或者接口,告诉我的子类工厂,你这个方法能干啥,也
就是定义标准教给大家(其子类),--->自己去建工厂,我给你三规!!!
缺点:
		你需要A 产品,你就去A工厂拿
	   你需要B产品,你就去B工厂拿
个人感觉:这个东西真的不好用(手动捂脸)

抽象工厂

抽象工厂模式和工厂方法,想差不大,也是在定义标准;
区别在于工厂方法正对于某一个bean,也就是一个真正的工厂产生的是特定的bean
A 工厂产生A  ---- B 工厂产生B 
抽象工厂是多种bean,一个真正的工厂可以产生多种bean
比如手机:
	A 工厂产生A 的屏幕bean、A 的摄像头bean。。。。
	B工厂产生B的屏幕bean、B的摄像头bean。。。。

原型模式

1:浅克隆
2:深克隆

浅克隆(原型)

重点在于要实现Conleable,然后想要克隆的bean的类增加一个clone方法,直接调用super的clone方法,
当然这个clone方法其实是native方法!

浅克隆代码
注:此模式慎用!!!!! ,因为你要clone的类中如果有成员变量的类型是自定义类,A对象克隆之后的B对象,克隆前后的两个对象中的此成员变量的引用地址是同一个,也就是说 你更改了A 对象的此成员变量,B对象的此成员变量会发生响应的更改!!!!!!!!!!!!!!!!!!!!!!!!!!!!

深克隆(原型)

实现Serializable接口,使用字节流读写,完全克隆出一个新的对象

深克隆代码

构建者模式

build,一般用来创建特殊的bean,用此设计模式的地方很多,比如mybatis中的XMLStatementBuilder,映射文件中的一个crud标签,对应一个mapperstatement。
特点:
1:创建对象之前,先new一个他的构建者--创建A 先new Abuild();
2:构建者中含有私有成员变量A,也就是真正需要的对象
3:构建者中提供为私有成员变量的属性赋值一系列方法

优势:
不会像构造方法一样,每个属性都需要传,即使为null也要传null
在真正调用build()方法之前,私有的成员变量对象,不会被暴露

Whim7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值