- 浏览: 211538 次
- 性别:
- 来自: 北京
文章分类
创建类对象虽然可以使用new(底层也是通过反射创建对象的),但是在一些情况下使用工厂模式确实最合适的。
情况一:如果一个对象拥有很多子类,那么创建该对象的子类使用工厂模式是最合适的,不但可以面向接口的编程,为维护以及开发带来方便。
情况二:如果创建某个对象时需要进行许多额外的操作,如查询数据库然后将查询到的值赋予要创建的对象(单例初始化时使用比较多),或是需要许多额外的赋值等等。如果查看JDK源码中,会发现许多成员变量在对象构造时,通过工厂方法进行创建的。因为这些成员变量本身的创建也很复杂。不可能创建对象时,在该对象的构造方法里创建成员变量然后再赋值给该成员变量。而且使用工厂模式也提高了代码的重用性。
如果创建对象时只需要对简单的成员变量可以直接通过构造方法传入即可。
面向对象设计思想就是分派和分装。即将长代码分派分隔成段,然后对每段进行封装。这样如果需要修改只修改每段即可,而不会牵一发而动全身。一定不要将多个鸡蛋放到一个篮子里面。
工厂模式分为工厂方法(factory method)和抽象工厂(abstract factory)
区别在于被创建对象的负责程度。
如果相关联的产品只有一个,那么不需要对工厂对象进行抽象了。使用工厂方法就可以了(即返回对象,根据传入的值然后生成不同的子类)。
如果关联的产品有多个,可以将工厂类进行抽象。让具体创建业务相关类的工作交给子类实现。如工厂子类1创建产品a的x业务对象和产品b的x业务对象,工厂子类2创建产品a的y业务对象和产品b的y业务对象.这样就实现了创建对象的垂直切断(这种方式是以业务为主导的)。
使用抽象工厂时,通常创建产品a和创建产品b的方法有一定的联系,因此才将两个对象捆绑在一起,作为抽象工厂的主导元素。
实际开发中,工厂模式使用比较多,并且和动态类装作器结合到一起也是非常多。
如Jlive就是这样实现。
//这里假如生成的对象就是该类本身,借助单例模式
public class FactoryMethod{
private static FactoryMethod instance = null;
private static Object lock = new Object();//因为使用懒汉式,这里生产一个对象锁
String className = "com.xxx.FactoryMethod";
public FactoryMethod getInstance(xxxx yyy){//yyy可以是传入的条件
if(instance == null){
synchronized(lock){
instance = (FactoryMethod)Class.forName (className).newInstance();
return instance;
}
}
return instance;
}
}
注意对象锁使用非常多,例如ConcrentHashMap在添加或是删除数据的时候也是对存放元素的数组对象进行的锁定。
情况一:如果一个对象拥有很多子类,那么创建该对象的子类使用工厂模式是最合适的,不但可以面向接口的编程,为维护以及开发带来方便。
情况二:如果创建某个对象时需要进行许多额外的操作,如查询数据库然后将查询到的值赋予要创建的对象(单例初始化时使用比较多),或是需要许多额外的赋值等等。如果查看JDK源码中,会发现许多成员变量在对象构造时,通过工厂方法进行创建的。因为这些成员变量本身的创建也很复杂。不可能创建对象时,在该对象的构造方法里创建成员变量然后再赋值给该成员变量。而且使用工厂模式也提高了代码的重用性。
如果创建对象时只需要对简单的成员变量可以直接通过构造方法传入即可。
面向对象设计思想就是分派和分装。即将长代码分派分隔成段,然后对每段进行封装。这样如果需要修改只修改每段即可,而不会牵一发而动全身。一定不要将多个鸡蛋放到一个篮子里面。
工厂模式分为工厂方法(factory method)和抽象工厂(abstract factory)
区别在于被创建对象的负责程度。
如果相关联的产品只有一个,那么不需要对工厂对象进行抽象了。使用工厂方法就可以了(即返回对象,根据传入的值然后生成不同的子类)。
如果关联的产品有多个,可以将工厂类进行抽象。让具体创建业务相关类的工作交给子类实现。如工厂子类1创建产品a的x业务对象和产品b的x业务对象,工厂子类2创建产品a的y业务对象和产品b的y业务对象.这样就实现了创建对象的垂直切断(这种方式是以业务为主导的)。
使用抽象工厂时,通常创建产品a和创建产品b的方法有一定的联系,因此才将两个对象捆绑在一起,作为抽象工厂的主导元素。
实际开发中,工厂模式使用比较多,并且和动态类装作器结合到一起也是非常多。
如Jlive就是这样实现。
//这里假如生成的对象就是该类本身,借助单例模式
public class FactoryMethod{
private static FactoryMethod instance = null;
private static Object lock = new Object();//因为使用懒汉式,这里生产一个对象锁
String className = "com.xxx.FactoryMethod";
public FactoryMethod getInstance(xxxx yyy){//yyy可以是传入的条件
if(instance == null){
synchronized(lock){
instance = (FactoryMethod)Class.forName (className).newInstance();
return instance;
}
}
return instance;
}
}
注意对象锁使用非常多,例如ConcrentHashMap在添加或是删除数据的时候也是对存放元素的数组对象进行的锁定。
发表评论
-
多种单例模式的分析
2012-03-28 18:06 0blog.csdn.net/derpvailzhangfan/ ... -
JDK中的设计模式
2012-03-14 22:56 01.Abstract Factory •java.util.C ... -
简单工厂模式使用心得(使用场景)
2012-02-23 18:24 11481在实际项目中,简单工厂模式是我们使用的最多的设计模式之一,简单 ... -
AbstractList中Iterator模式的妙用
2012-01-13 11:51 942AbstractList中为了实现顺序访问AbstractLi ... -
适合使用命令模式的情景
2012-01-13 11:31 884情景1.当借个类都拥有 ... -
Iterator模式
2012-01-13 10:57 855我个人常叫它游标模式,该模式的主要目的就是,顺序访问集合中的各 ... -
JDK中使用的设计模式
2012-01-13 10:04 14151.抽象工厂模式 实 ... -
JDK中使用的设计模式代码实例
2012-01-05 17:38 0http://stackoverflow.com/questi ... -
享元模式
2011-12-23 10:22 1001通常情况下,我们会需 ... -
策略模式
2011-12-22 17:07 836所谓策略模式就是定义了多种算法,而让不同算法之间的切换不会影响 ... -
合成设计模式
2011-12-22 16:28 942如果要将对象组织到树中,使用树来表示对象之间的关系,请考虑使用 ... -
责任链模式
2011-12-20 18:35 800此文转正于http://wenku.baidu.com/vie ... -
桥梁设计模式
2011-12-19 18:19 802如果有很多对象要处理,而又有很多操作要做。这时可以考虑使用桥梁 ... -
多线程设计模式(Thread-Specific storage)
2011-12-12 15:29 5817引用自http://www.riabook.cn/doc/de ... -
代理模式
2011-11-30 15:26 904代理模式实际上是对对象的一种代理,以控制对象的访问。 有些情况 ... -
观察者模式
2011-11-16 14:48 1368声明转载的,简单易懂,呵呵 观察者模式的构造 l 抽 ... -
命令模式
2011-11-16 14:11 1220今天想学学命令模式,看见了一个文章讲的就是命令模式,感觉实例比 ... -
建造模式
2011-11-14 12:03 879建造模式是将负责对象 ... -
设计模式之适配器模式
2011-11-09 18:24 931适配器模式:主要是为了解决,老的对象在新的环境中不兼容的现象。 ... -
设计模式之模版方法
2011-11-09 16:31 781模版方法是一种非常简单的设计模式:简单的理解就是将关键的业务方 ...
相关推荐
工厂设计模式是一种创建型设计模式,它的主要目标是将对象的创建和使用分离,使得代码更具有可维护性和可扩展性。该模式通常会定义一个工厂接口或抽象类,由具体的工厂类实现该接口或抽象类来创建相应的产品。工厂...
java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...
设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述Spring源码中运用到的一些设计模式 ...
创建者模式中的工厂模式
java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是抽象工厂模式及应用场景和应用场景的代码事例。及各工厂模式的区别。
抽象工厂模式的实现源代码,清晰易懂,还有详细的说明
通过实际例子说明工厂方法模式,并解释工厂方法的原理,特点和使用场景。
使用人群:软件开发工程师、Java程序员、架构师、设计模式爱好者 用途:帮助读者了解抽象工厂模式的定义、使用场景、主要角色以及相应的类图,并通过Java示例代码演示其实现方法,从而在实际开发中运用该模式提高...
工厂方法设计模式,某系统日志记录器要求支持多种日志记录方式,如文件日志记录和到数据库日志记录等,且用户在应用场景下可以根据要求动态选择日志记录方式,现使用工厂方法设计模式设计该系统。
2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
java设计模式【之】建造者模式【源码】【场景:车辆组装】 将复杂的对象构建,与对象的使用进行分离 用户只需要通过简单流程即可创建出对象 方法调用顺序,步骤的不同实现 优点:封装性号,创建和使用分离,扩展性...
23种设计模式的特点定义、优缺点、使用场景,源码中如何使用,资料思维导图。总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七...
1)程序功能:用简单工厂模式实现计算器功能,采用PHP编写。...3)原创作品,出自"CleverCode的博客",分类为《设计模式之PHP项目应用》。 4)欢迎大家关注博客更多精彩的内容:http://blog.csdn.net/CleverCode。
C++设计模式原理与实战视频课 1-1 课程介绍 1-2 导论UML和设计模式导论 2-1 简单工厂方法的定义场景与实现-针对接口编程的设计思想剖析 2-2 简单工厂实用工程技术:C++对象动态创建技术与配置化开发 2-3 单例模式的...
3. 设计模式是用来解决某些场景下的某一类问题--------通用的解决方案 4. 有了设计模式之后,可以让代码更容易被理解,确保了复用性、可靠性、可扩展性 单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式...
5. **策略模式(Strategy Pattern)**:策略模式是一种行为设计模式,定义了一系列算法,并使其可以相互替换,使得算法的变化独立于使用算法的客户端。 6. **适配器模式(Adapter Pattern)**:适配器模式是一种...
抽象工厂模式是一种创建型设计模式,它提供了一种将相关的对象家族分组创建的方式,而无需指定具体类。在该模式中,我们定义一个抽象工厂接口,该接口声明了一组创建不同类型对象的方法。每个具体工厂都实现了这个...
│ 2.3多个业务场景浏览-设计模式使用前后的区别.mp4 │ ├─第三章 创建型设计模式-单例设计模式和应用 │ 3.1江湖传言里的设计模式-单例设计模式.mp4 │ 3.2代码实战-单例设计模式中的懒汉实现方式.mp4 │ ...
java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是工厂方法模式及应用场景和应用场景的代码事例。及各工厂模式的区别。