grid liu在it先锋中担任资深顾问,负责j2ee技术的顾问咨询与培训工作。
关键词:设计模式? 创建型模式? 简单工厂? 工厂方法? 抽象工厂?? 【相关文章:Introduction】
摘要 【扩展阅读:使用TImage浏览与保存网络图像】
1.1??????? 创建对象 【扩展信息:关于自定义组件属性中的default、s】
1???????? 创建型模式
? 在面向对象语言中的创建对象,使用class的构造函数,通过操作生成一个对象(该类的实例instance)。如java语言的new,如我们创建一个customet类的实例,customer object=new customer();并且每个对象都有一个构造函数(可以是缺省的构造函数),它负责对象的创建,(有些语言还有析构函数,负责对象的释放,然而java使用垃圾收集器完成对象的回收)
1.2??????? 为什么需要创建型模式
?? 我们已经知道了在java语言中通过new来创建对象,但是什么还需要创建模式,其中有以下几个原因:
n???????? 由于设计模式的原则,面向接口进行编程,而不是实现(programming to an interface, not an implementation)
因为在实际的编程时使用了接口(interface)的概念,可是该接口一般有多个实现(implementation)类,因此就会存在如何选择的创建哪个实现的实例情况,如下图:
因此我们传统的创建对象,不利于扩展,修改。如interface object=new implementtion1();这样我们一旦修改为其他的实现类,需要多处修改代码,因此需要把创建对象外部化。
?
n???????? 名称必须是构造函数,名称受限
往往构造函数自身无法描述被返回的对象,而选用名字合适的工厂方法可以使类的使用更加容易,产生的代码容易阅读。
n???????? 每次创建都创造了一个新的对象
每次创建都返回一个新的对象,然而在实际项目中需要,某一类仅创建一个实例,或者为了使用cache,来进行反复使用已经创建的对象。
n???????? 每次的返回类型,都是一个具体对象
构造函数返回的类型,都是具体的类型。而使用工厂模式可以返回子类型。
n???????? 重用创建对象的过程
我们知道,有些对象的创建过程相当复杂,这里指的是通过new之后的object,必须经过一系列的赋值等操作之后才可使用。于是我们需要这些赋值等操作的过程。
1.3??????? 创建型模式目的
? 创建型模式目的就是抽象对象的实例化过程。它可以帮助一个系统独立于如何创建,谁创建,创建什么。它可以改变以前通过new class()这种硬编码方式转移为一个独立的行为集。因此这些行为可以实现复用,组合,使用创建对象的过程易于修改,维护,扩展。
1.4??????? ??创建型模式的考虑点
在实际的系统中使用创建型模式创建对象时需要考虑以下几点:
n???????? 动态的确定创建哪些对象(确定创建一个接口的那个实现类)
n???????? 是谁创建这些对象(是外部的对象,还是本身对象提供,或者静态的类继承)
n???????? 动态决定怎样创建对象(新建对象还使用cache,还是复制某个对象)
n???????? 决定怎样组合或者表示这些对象()
1.5??????? 创建模式的分类
n???????? 类的创建模式
类的创建模式使用继承关系,把类的创建延迟到子类,从而封装了客户端将得到哪些具体类的信息
n???????? 对象的创建模式
而对象的创建则是把对象的创建过程动态的委派给另一个对象,从而动态的决定客户端将得到哪些具体的类实例,以及这些类的实例是如何被创建与组合在一起
2???????? 简单工厂模式
2.1??????? ?意图
n???????? 简单工厂是由一个工厂对象决定创建出哪一种产品类的实例。
?简单工厂是最简单的一种模式(我认为还有template method模式),也最容易理解的模式,上面介绍使用传统方式创建对象的缺点,因此通过外部化行为创建对象,因此我们通过一个方法,它负责对象的创建。因此把这种传统的创建过程customer object=new customer()改为? customer object= createobject();
????
public customer createobject(){
?????? return new new customer();
}
这样我们在系统中创建对象改为使用一个函数来完成,因此一旦系统发生改变,我们仅需要修改这个函数即可完成。
... 下一页