设计模式举例-创建型

几个工厂模式的差异

创建型设计模式都多个,其中几个很容易搞混,Factory Method(工厂模式),Abstract Factory(抽象工厂模式)和Builder(建造者模式),但实际上这3个使用场景是不同的。工厂模式应用的最多,都是一些简单的对象构件场景;抽象工厂应用于复杂的构建场景,而且工厂和产品都需要实现扩展;建造者关键场景是需要进行很多组件的装配,实际场景下,可能会和抽象工厂模式一起混合使用。应用这几个模式的原则是,如果能够使用工厂模式完成,就不要使用后面两种,否则就是杀鸡用了牛刀。

 

Singleton(单例模式):运行环境中只建立一个,可以方便的进行全局访问,为了避免多线程问题,最好对象里面存放的都是只读数据,这样在程序一开始,只有主线程运行的时候就完成初始化,避免初始化过程中线程竞争问题。单例模式实现的方式有很多种,可以网上查询一下具体的实现方式,对比它们的优缺点,最好的单例模式实现不应该使用锁,锁会降低并发性能。应用场景全局:安卓的Application(单例对象),在该类的onCreate()方法可以初始化自己的全局缓存对象(单例对象),Activity之间通过全局缓存传递复杂数据,intent的只传递key值,这样可以减少数据的序列化和反序列化带来的性能消耗。

 

Prototype(原型模式):使用对象克隆一个新的对象,使用场景:单据的备份保存,原单和备份单有相同的数据结构,使用原单对象克隆一个备份单对象,具体的实现就是BEAN对象的拷贝和赋值,可以通过JAVA的反射原理在单据的基类当中实现,这样可以大大减少代码的开发量。

 

Factory Method(工厂模式):细分为两种,一个是简单工厂;一个是使用抽象方法,让子类决定生产什么对象。简单工厂运用场景:数据库Facade的建立,网络层Facade的建立,如下图,使用DataSourceFactory创建IDataSourceManager,通过传入的连接参数决定创建本地实现还是远程实现。

 

第二种方式适合创建更加复杂的场景,例如:单据GUI基类创建对应的单据实体类,因为基类是不知道创建什么单据实体类的,创建决定权交给了下面的GUI的子类。下面的图片案例里面,子类需要在构造函数里面设置单据对象m_orderClass来告知父类创建什么单据。

 

Abstract Factory(抽象工厂模式):抽象工厂用来处理比工厂模式更加复杂的对象构件场景,可以实现产品和工厂的独立演化,类图结构上有些类似桥接模式,当然应用的目的和场景都不同,下面是抽象工厂的类图结构:

 

应用抽象工厂模式的关键是抽象工厂类和抽象产品类的设计,设计过程考验着设计者的抽象归纳思维能力,比如这个UML工具的图形对象的抽象设计,每个图形对象都需要知道怎么绘制自己,抽象出函数paint(),都应该知道怎么计算自己尺寸,抽象出computeSize(),这个抽象过程也是一个不断完善的过程。

 

Builder(建造者模式):建造者模式也是应用于复杂的创建场景,和抽象工厂的区别就是,建造者模式有个Director来负责各个零件的装配,例如,在UML工具的例子当中,图形面板的创建就可以使用建造者,建造者的director负责把多个图形在面板上根据位置装配起来,形成一个整体的图形面板。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值