- 浏览: 139910 次
文章分类
- 全部博客 (149)
- Java (41)
- 设计模式 (23)
- php (2)
- C++ (2)
- Linux (6)
- C (1)
- JavaEE (27)
- javascript (2)
- uplodify (1)
- Mybatis (2)
- Maven (4)
- Lucene (3)
- commons (1)
- Spring (7)
- SQL (3)
- mahout (1)
- MySQL (2)
- extjs4.2.1 (2)
- ubuntu (1)
- hadoop (1)
- hibernate (1)
- Spring JPA (2)
- JPA 2.0 (1)
- express (1)
- redis (2)
- angularjs (1)
- git (1)
- Python (1)
- logging (2)
最新评论
-
xlaohe1:
controller返回的是一个POJO对象,然后用@Resp ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
能帮到你,我也很高兴。
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
jobzjc:
第一段有帮到我。如果是非对象,Object方式传递的时候,第一 ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
dingran 写道为什么,我怎么就没找到System > ...
Ubuntu 12.04 设置 IBus 开机启动 -
dingran:
为什么,我怎么就没找到System >> Pref ...
Ubuntu 12.04 设置 IBus 开机启动
Define an interface for creating an object, but let subclasses decide which class to instantiate.
Factory Method lets a class defer instantiation to subclasses.
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式的使用场景
(1)工厂方法是new 一个对象的代替品,所以在所有需要生成对象的地方都可以使用,但是需要考虑是否要增加一
个工厂类进行管理,增加代码的复杂度。
(2)需要灵活、可扩展的框架时,可以考虑采用工厂方法模式。
(3)可以用在异构项目中。
(4)测试驱动开发的框架下。
工厂方法的扩展
(1)缩小为简单工厂模式
(2)升级为多个工厂类
(3)替代单例模式
(4)延迟初始化
通过定义一个Map 容器,容纳所有产生的对象,如果Map容器中已经有的对象,则直接取出返回。
如果没有,则根据需要产生对象并放入到Map 容器中。
Factory Method lets a class defer instantiation to subclasses.
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
public abstract class Product { // 产品类的公共方法 public void method1() { // 业务逻辑处理 } public abstract void method2(); } public class ConcreteProduct1 extends Product { @Override public void method2() { // TODO Auto-generated method stub } } public abstract class Creator { public abstract <T extends Product> T createProduct(Class<T> c); } public class ConcreteCreator extends Creator { @Override public <T extends Product> T createProduct(Class<T> c) { Product product = null; try { product = (Product) Class.forName(c.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) product; } }
工厂方法模式的使用场景
(1)工厂方法是new 一个对象的代替品,所以在所有需要生成对象的地方都可以使用,但是需要考虑是否要增加一
个工厂类进行管理,增加代码的复杂度。
(2)需要灵活、可扩展的框架时,可以考虑采用工厂方法模式。
(3)可以用在异构项目中。
(4)测试驱动开发的框架下。
工厂方法的扩展
(1)缩小为简单工厂模式
public class SimpleHumanFactory { public static <T extends Human> T createHuman(Class<T> c) { Human human = null; try { human = (Human) Class.forName(c.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) human; } }
(2)升级为多个工厂类
public abstract class AbstractHumansFactory { public abstract Human createHuman(); } public class BlackHumanFactory extends AbstractHumansFactory { @Override public Human createHuman() { return new BlackHuman(); } }
(3)替代单例模式
public class Singleton { private Singleton() {} public void doSomething() { } } public class SingletonFactory { private static Singleton singleton; static { try { Class cl = Class.forName(Singleton.class.getName()); // 获取无参构造函数 Constructor constructor = cl.getDeclaredConstructor(); // 设置无参构造是可访问的 constructor.setAccessible(true); singleton = (Singleton) constructor.newInstance(); } catch (Exception e) { e.printStackTrace(); } } public static Singleton getSingleton() { return singleton; } }
(4)延迟初始化
public class LazyProductFactory { private static final Map<String, Product> prMap = new HashMap<String, Product>(); public static synchronized Product createProduct(String type) throws Exception { Product product = null; if (prMap.containsKey(type)) { product = prMap.get(type); } else { if (type.equals("Product1")) { product = new ConcreteProduct1(); } else { product = new ConcreteProduct2(); } prMap.put(type, product); } return product; } }
通过定义一个Map 容器,容纳所有产生的对象,如果Map容器中已经有的对象,则直接取出返回。
如果没有,则根据需要产生对象并放入到Map 容器中。
发表评论
-
设计模式-享元模式(Flyweight)
2014-06-20 13:11 578使用共享对象可有效地支持大量的细粒度的对象。要求细粒度的对象 ... -
设计模式-桥接模式
2014-06-19 17:12 355将抽象和实现解耦,使得两者可以独立地变化。 桥接模式使用了 ... -
设计模式-状态模式
2014-06-16 10:37 436状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像 ... -
设计模式-代理和动态代理模式
2014-06-13 14:57 4841.简单代理模式 interface Interface ... -
java 迭代器
2014-06-11 18:04 638public class ReversibleArrayL ... -
设计模式-内部类工厂模式
2014-06-10 23:33 547public interface Service { ... -
设计模式-迭代器模式
2014-06-10 14:37 466迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又 ... -
设计模式-模板方法
2014-06-05 13:00 370public abstract class Caffein ... -
设计模式-适配器模式
2014-06-03 22:14 435适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让 ... -
设计模式-命令模式
2014-06-02 23:24 397public interface Command { ... -
设计模式-工厂方法
2014-06-01 18:04 495public abstract class PizzaSt ... -
设计模式-观察者模式
2014-06-01 11:03 4811. 利用Java 内置的类和接口实现观察者模式 publ ... -
设计模式-策略模式
2013-12-16 12:50 490Define a family of algorithms ... -
设计模式-装饰模式
2013-12-16 12:49 469Attach additional responibili ... -
设计模式-责任链模式
2013-12-11 18:00 554Avoid coupling the sender of ... -
设计模式-命令模式
2013-12-08 15:11 456命令模式是一个高内聚的模式。 Encapsulate ... -
设计模式-中介者模式
2013-12-08 12:29 416在多个对象依赖的情况下,通过加入终结者角色,取消了多个对象 ... -
设计模式-建造者模式(生成器模式)
2013-11-20 11:35 559ArrayList 或者 HashMap 如果定义为类的成员 ... -
设计模式-模板方法模式
2013-11-20 10:45 458Define the skeleton of an algor ... -
设计模式-抽象工厂模式
2013-11-18 15:49 439Provide an interface for creati ...
相关推荐
在标题“c++设计模式-工厂方法模式”中,我们关注的是如何在C++中实现工厂方法这一设计模式。工厂方法模式的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样,工厂方法可以使类的实例化过程...
工厂方法模式是面向对象设计中的一种经典设计模式,属于创建型模式。在软件工程中,当我们需要创建一系列相关或相互依赖的对象时,而不希望指定具体的类,工厂方法模式提供了一个很好的解决方案。 工厂方法模式的...
设计一个程序来读取多种不同存储格式的图片,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF格式图片读取器(GifReader)用于读取...请使用工厂方法模式实现该程序的设计,并使用UML画出该模式的类图。
工厂方法模式是设计模式中的一种创建型模式,它在软件工程中扮演着非常重要的角色。这个模式的主要目的是提供一个创建对象的接口,但允许子类决定实例化哪一个类。这样,工厂方法模式使得一个类的实例化延迟到了其...
NET设计模式--工厂方法例子源码
**工厂方法设计模式** 在iOS开发中,设计模式是一种被广泛采用的最佳实践,它提供了一种在不指定具体实现的情况下创建对象的方式。工厂方法(Factory Method)是面向对象设计模式中的一种,属于创建型模式。它定义...
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
标题"我讲设计模式--工厂方法"暗示我们将深入探讨工厂方法的设计模式及其应用。这篇博文可能涉及了该模式的基本概念、工作原理以及实际场景下的使用示例。遗憾的是,由于没有直接提供博客的具体内容,我将基于工厂...
在给定的“设计模式-工厂方法代码”文件中,我们可以深入探讨工厂方法这一特定的设计模式,以及它在Java编程中的应用。 工厂方法(Factory Method)是创建型设计模式之一,属于行为模式。它的主要作用是定义一个...
在"Java设计模式-工厂方法"的Demo中,我们通常会看到以下关键组件: 1. **抽象产品(Abstract Product)**:这是要创建的对象的接口。它定义了产品的公共接口,这样任何创建的产品都可以被客户端以相同的方式使用,...
创建型设计模式---工厂设计模式实现
java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是工厂方法模式及应用场景和应用场景的代码事例。及各工厂模式的区别。
JAVA-设计模式-创建型模式-工厂模式
Java设计模式中的工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它不会直接创建,而是调用一个工厂对象来完成创建工作。这种模式的核心在于封装了对象...
《C#设计模式——工厂模式详解》 工厂模式是一种常用的设计模式,它的主要目的是通过抽象出产品创建过程,使得客户端代码不再直接new对象,而是通过工厂来获取对象,从而降低了代码之间的耦合度,提高了系统的可...
工厂模式是设计模式中的一个基础且重要的部分,它属于创建型设计模式,主要用于封装对象的创建过程,使得客户端不必关心具体的实现细节,提高了代码的可扩展性和可维护性。 工厂模式主要有三种形式:简单工厂模式、...
Java设计模式中的工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。工厂模式的核心思想是将对象的创建过程封装起来,使得创建过程独立于使用过程,从而提高了代码的可扩展性和可维护性。在HeadFirst...
C#设计模式-工厂模式系列