设计模式大杂烩之一

        模式是不断重复发生的问题、以及该问题的解决方案的核心的总和;而面向对象设计模式是在面向对象设计中对要你过来在特定场景下解决一般设计问题的类和互相通信的对象的描述。在面向对象设计中,万物皆为对象,每个对象都拥有其类型,类型即类,也就是说每个对象都是某个类的一个实例。使用面向对象编程语言编写的程序是对象的集合,那么也就是说面向对象语言编写的程序的构成基本单元是类,面向对象设计模式解决的是类的问题,类的问题有个体的,也有群体的(相互之间交互)。

        随着社会和世界信息化、数字化程度越来越高,软件架构从单机走向集中式客户端/服务端,再到分布式,程序规模呈现飙升趋势,原来几个类的程序变成今天的几万个类,甚至几千万个类,一方面,这显示了我们对这个世界的认识与抽象越来越多,而另一方面,在旧认识/旧抽象与新认识/新抽象这个演变过程中,如何处理这中间的融合问题成为程序演变的关键。在新旧交替过程中,出现了类的增加(新类型)、删除、替换,例如新类型何与已存在类型进行交互通信,替换的相同类型如何如何减少对整体的影响等等问题。针对已经涌现或可以预知的程序演变问题,前人不断摸索、整理、总结设计方案加以文档化,以供面向对象设计人员研究、参考,以便对他们进行改进,甚至提出新的设计模式解决新的设计问题,于是GoF设计模式在编程界引起不小的轰动。这样程序设计者有了设计方案参考,就可以未雨绸缪为未来的演变留下接口,同时对于已经存在解决方案的设计问题不再从头做起。

        设计模式在粒度和抽象层次上各不相同,分类准则有两条——目的和范围。模式依据目的准则可分为创建型、结构型和行为型三种,创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式处理类或对象怎样交互和怎样分配职责的问题。模式依据范围准则可以分为类模式和对象模式,范围指的是模式是主要用于类还是用于对象,类模式处理类与子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻就确定下来。对象模式处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。由于几乎所有模式都使用了继承机制,所以类模式只指那些集中于处理类间关系的模式。

        创建型类模式将对象的部分创建工作延迟到子类,而创建型对象模式则将它延迟到另一个对象中。属于创建型模式的有抽象工厂、生成器、工厂方法、原型和单例。其中工厂方法是属于创建型类模式,剩余创建型模式属于创建型对象模式。工厂方法模式主要是为了解耦,这种耦合是指接口与具体实现之间的耦合,每个对象都有一个接口,接口确定了对某一特定对象所能发出的请求,也就是说接口就是特定对象的可请求列表。如果接口使用具体类型代替,那么接口就与具体实现高度耦合在一起了,他们可能是具体实现类型一对一耦合,也可能是与具体类型子类一对多耦合,而较难与具有相同接口的其他具体类型替换(继承层次等同),这样在程序维护过程发生变更较大,不稳定,一般客户端程序使用的接口在类继承层次越高,实用性就越广。当然工厂方法解耦主要是将创建具体类型实例工作独立出来集中化处理,避免类型创建实例分散在各个客户端类中,只要是调用同一个工厂方法的实例都是一样的,一旦发生变动,在工厂方法修改,那么所以的客户端程序都及时得到最新类型实例。与工厂方法类似的还有抽象工厂模式,抽象工厂模式也是为了接口与具体实现的解耦,都是通过抽象对象的创建实例过程在实例化是建立接口和实现的透明连接,但与工厂方法不一样的是,抽象工厂是为了提供一个创建一系列相关或相互依赖对象的接口,而无需制定它们具体的类。对象由类型实例化而来,相关的的对象也即是相关的类型(具体实现),因此抽象工厂模式除了抽象对象创建过程,同时还提供了类型之间关联绑定。生成器模式是为了解决一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它强调的是一个复杂对象的构建,通过抽象复杂对象同样的构建过程,使得对象的构建统一起来,同时实现同样构建过程的具体生成器可以构建灵活多变的表示。以上三种创建型模式都是“针对私人定制”表示的创建过程抽象,而原型模式就是批量表示的创建抽象,根据某一特定表示的对象创建批量的克隆对象,添加不同的原型就可以得到不同表示类型的克隆对象。最后一种创建型模式是单例模式,单例模式与前面4创建型模式不一样,之前的都是抽象创建过程,而单例模式解决的就是保证一个类仅有一个实例,并提供一个访问实例的全局访问点。

      ~~~~待续 ~~~~~

      ~~~~为了博客文章不致过于臃肿,所以分段介绍,下一部分介绍结构型设计模式与行为型设计模式~~~~~~~~~~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值