设计模式之创建型模式

前文:    

    好像在叙述创建型模式之前,咱们还有一件事没有做;设计模式是如何划分为这三大类的,这好像是一个很有意思的事,证明这几种类型应该存在某种共性;---依据“用途”

创建型模式描述如何创建对象即实例化对象
结构型模式描述如何实现类或对象的组合
行为型模式描述类或对象怎样交互以及怎样分配职责

创建型理论:

1、简单工厂(基础但不属于此类型):通过一个抽象的工厂类,利用一个具体的创建方法创建单一类实例;

优点:将客户端对象的使用和对象的创建隔离开;

缺点:工厂类中包含所有对象的创建,增删类都会导致更改整个系统,不利于扩展和维护;

用途:工厂类中包含的对象固定或者较少时;


2、工厂方法:通过一个抽象的工厂类,利用一个抽象的创建方法创建单一类实例;

优点:隐藏具体产品实例化的细节;工厂自主判断通过何种派生类来创建对象(多态特性);新增类的时候,无需修改客户端,只需要添加抽象的工厂和具体类;

缺点:系统中类的数目会成对的增加(具体类和具体工厂类);客户端中代码抽象定义,理解度降低;

用途:客户端不知道它所需要的类;


3、抽象工厂:通过一个抽象的工厂类,利用多个抽象方法创建一组相关联的类实例;

优点:抽象工厂模式隔离了具体类的生成,更换一个具体工厂和新的对象容易;

缺点:增加新具体对象等级结构麻烦;

用途:产品结构等级稳定,设计完成后不会向系统中增添已有的具体类;


4、单例模式:创建全局唯一的实例,并向全局提供该示例的访问接口;

优点:单例类封装了唯一的实例;节约系统的资源,无需频繁创建对象;扩展单利模式的创建过程,允许多个可变数目的实例;

缺点:没有抽象层,扩展困难;违背单一职责原则,充当了工厂和产品角色;容易被自动垃圾回收;

用途:全局仅仅需要创建一个对象;客户调用类只允许使用一个公共访问点;


5、建造者模式:将一个复杂对象的构件与它的表示分离,是的同样的额构件过程可以创建不同的表示

优点:相同的创建过程可以创建不同的产品对象;具体建造者耦合度低,方便增添新的建造者;创建过程更为清晰明了;

缺点:建造者创建的产品具又较多的共同点,差异性较低;产品内部结构复杂,增添具体建造者类困难;

用途:对象的创建过程独立于创建该对象的建造类;隔离复杂对象的创建和使用;


6:原型模式:用原型实例指定创建对象的种类,通过拷贝这个原型来创建新的对象

优点:创建新的对象比较复杂的时候,简化创建过程;无需专门的工厂来创建产品,产品的赋值封装在原型类的克隆方法里面;

缺点:对已经存在类进行扩充时,需要修改源代码;对象间存在多重嵌套的时候,克隆过程会更为复杂;

用途:创建新的产品成本大;避免分层工厂类创建分层次的对象;


创建型实例:

    背景:

    小雷走在成都的街头,碰巧室外下雨,遂于超市避雨,期间,防尴尬,便买了些水果,突然,想把这一场景和设计模式相结合,性大悟,迷之微笑;

    工厂方法模式:

    该商店有苹果和橘子,但是没有香蕉,偏偏我喜欢吃这个,于是乎和老板商量可以在进购些香蕉;增加一种品种的水果,对应的需要增加一个抽象的买香蕉的进购地点。

    抽象工厂模式:

    偶然间发现该商店竟然有两种产地的苹果和橘子,刚好可以弥补没有香蕉吃的悲伤;两种产地是不同的抽象工厂,同一产地的苹果和橘子构成了一个产品系列。

    单例模式:

    还发现盛放苹果和橘子的塑料袋都是一样的,仅仅用来盛放水果;此时塑料袋就是一个单例;

    建造者模式:

    起初我以为超市老板是通过零售商配送水果给他呢,后来在聊天的过程中,发现原来老板亲自去水果生产地进行购置,这样既保证了货源,也降低了成本;老板就是建造者模式中的指挥者,而盛产水果的产地便是建造者。

    原型模式:

    如果老板每次都需要这样去挑选水果多麻烦啊,原来老板有自己的安排,事先和产地的果农约定好几种模板水果(尺寸、重量),每次果农按照这个模板进行配送即可;模板水果便是原型。

末尾:

    雨停了,小雷发现该回家了,顺便好好沉淀下自己学习的内容,于是乎上文中的场景便被记录了下来,如果读者感觉有意思的话,可以点赞,点关注吆,后期我们定时更新,五一七天乐,设计模式全搞定。

评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值