织梦CMS - 轻松建站从此开始!

罗索实验室

当前位置: 主页 > 基础技术 > Soft.Eng >

设计模式

落鹤生 发布于 2012-02-09 16:29 点击:次 
设计模式是前人专家总结的方法,以结构化的方式提供专家意见。设计模式已经成为了一种文化,全世界的程序员都明白,所以成为了一种交流工具。
TAG:

设计模式是前人专家总结的方法,以结构化的方式提供专家意见。
设计模式已经成为了一种文化,全世界的程序员都明白,所以成为了一种交流工具。

构造型——Creational Patterns
讨论如何构造对象

1.简单工厂模式 Simple Factory
见SimpleFactory.jpg
设计思想在于子类产品具有统一的接口,所以由工厂生产出的产品的使用方式是一样的。

2.工厂方法 Factory Method
见FactoryMethod.jpg
设计思想在于对简单工厂模式进行深一层的抽象,由Man子类来创建Namer子类产品,将实例化延迟到Man子类(而不是由工厂指定在某个地方生产特定产品)。选择Man某子类则选择了所要实例化的Namer子类。
适用范围:
Manfactory工厂不知道要实例化哪个Namer子类,或者希望由它的子类来做。

3、抽象工厂 Abastract Factory
见AbstractFactory.jpg
设计思想在于指定一系列的接口,而不需要理会真正的实现类。例如WestAppearanceFactory内有两个建立特定子类的方法。之所以为抽象工厂,因为该工厂生产的是不止一类的产品,而是一系列产品。
适用范围:
一个系统不需要理会产品的生产、组合和表示;只想显示产品的接口;生产的是一个集合的产品时。
如WestAppearanceFactory内生产的组合。

4.单例模式 Singleton(单件)
单例模式是为了让某类只存在唯一的实例且只有一个全局的访问点。
作用是限制创建实例,但却属于创建型设计模式。
实现方法一般是使用静态方法:
1)首先为了防止多个实例的出现,必须让该类的构造方法变为私有;
2)创建静态方法,构造(未实例化情况下)并返回为实例
也可以通过标识来进行实现单例模式
对于提供全局统一访问接口,一般建立单例的注册所,而获取单例一般也是使用静态方法。
单例模式的扩展:实例化对象不止一个。见SingletonExtented.java

5.构建者模式 Builder(生成器)
构建者模式是为了让复杂对象的构建和表示分离,使得同样的构建过程可以创建不同的表示。
MVC框架相关,需要将M和V分离时。
跟抽象工厂模式相似,同样提供了一组对象和方法,但是作用不同。工厂模式是为了产生一组对象以备调用;而构建者模式是为了隐藏显示的处理过程的细节。见ChoiceFactory.java

6.原型模式 Prototype
原型模式是先设置一个原型类,然后通过拷贝这些原型类对象来获取新的对象。
它跟构建者模式同样是建立多个对象,忽略内部构造过程,但是原型模式是利用拷贝来实现的,同时修改内部一些细节来满足新的需求。
适用于:需要到运行时刻再实例化,可以构建多个原型,组装这些原型可以避免手工实例化过程。

结构模式——Structual Patterns
讨论如何组装类和对象而形成更大的结构。
类模式讨论的是如何设计类的继承来提供更好的编程接口;
对象模式讨论的是如何组合或包容对象来形成更大的结构。

7.适配器模式——Adapter
适配器模式将一个类的接口转换成客户需要的接口。
适用于将一个已存在的类加工转换成你想使用的另一种接口。
类适配器:通过继承实现在一个类中包容需转换类的接口。
对象适配器:通过对被适配的对象的操作来实现特定的接口。
可以通过继承、实现接口的组合方式来生成对多个接口适配的适配器。

8.桥模式——Bridge(桥接模式)
桥模式就是所谓的针对接口编程,将接口与实现分离。一般接口稳定,只修改实现即可,不会影响到调用接口者。
桥模式跟适配器模式相似,但是适配器模式是为了兼容以存在的类而进行必要的转换,而桥模式是为了设计稳定的接口从而应对常变化的实现。
适用于除上以外的隐藏代码的具体实现。

9.组合模式——Composite
组合模式就是将对象组合利用树形结构来表示其“部分——整体”关系,其特点是整体和部分具有统一的接口,所以它们在使用上是一致的,只不过整体必须调用部分的接口来实现它自己的接口。
适用于想忽略整体带来的差异感,统一使用组合结构中的所有对象。即把组合体设计成了特殊的个体!

10.装饰者模式——Decorator
装饰者模式是动态的给一个对象增加额外的职责。
适用于以下情况:如果单靠子类的增加功能的话,许多不同类型的对象将产生大量的子类;另外如果类不允许生成子类的情况。比生成子类方法更加灵活。
适配器模式相当于“装饰”已存在类,但只是为了接口的兼容而已,而装饰者模式是为了扩展其中部分的功能而已。而组合模式其实质就是装饰者模式,但意图也是跟装饰者模式不同。
缺点:由于是动态的,所以无法确定对象而无法进行对象类型匹配测试,而且有纯修改代码的嫌疑,不便于维护。
门面(Facade)模式与该模式具有相同的架构,但是前者是为了将复杂的实现封装在简单的接口中,后者是为了通过增加方法来封装类。

11.门面模式——Facade(外观模式)
门面模式是将复杂的系统(实现)封装在简单的接口中,方便用户使用,但并不会阻止有更多需求的用户跨过门面层来调用内部实现接口。同时,因为简单的接口和复杂实现的分离,两个层次的解耦性性能加强使得内部实现的变化不会影响调用接口的客户程序。
桥模式也是为了接口和实现的分离,但是桥模式是为了应付多变的内部实现,而门面模式是为了封装复杂的实现。

12.轻量模式——Flyweight(享元)
轻量模式是运用共享技术来有效支持大量细粒度的对象。
如果大量的对象具有很大的相似度时,构造一个或少数对象,减少大量对象带来的开销。
共享的对象一般是功能部件,而不是数据部件,具有内部共同属性和各自外部属性。
缺点是共享技术带来的,如共享的内部属性的修改。
单例模式是为了构建一个(或几个)对象,而轻量模型是为了减少对象,所以可以有多个对象存在。

13.代理模式——Proxy
代理模式是为了控制对某对象的访问,所以代理类与被代理类具有相同的接口。
适用于:1)对象初始化需要时间比较长;2)从远端机器加载对象需要的时间长;3)对象的访问权限问题。
例子:EJB、数据库连接池
适配器模式与此模式都是在对象外部加上一层东西,但适配器与对象的接口不同;装饰者与代理一样跟对象的接口相同,但是前者是为了在已有对象上增加新的功能,而代理是为了控制对对象的访问。

行为模式——Behavioral Patterns
行为模式注重的是对象之间的通信。
原理在于让对象间的解耦性降到最低。

(仔华)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www1.rosoo.net/a/201202/15682.html]
本文出处:新浪博客 作者:仔华 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容