`
249326109
  • 浏览: 56077 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

工厂模式总结

 
阅读更多

简单工厂模式工厂方法模式抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类。我们掌握一种思想,就是在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封装哪里),以适应客户的变动,项目的扩展。

 

简单工厂模式:简单工厂没有抽象类,只有一个具体工厂类如MyFactory,然后MyFactory里面有个工厂方法CreateProduct返回一个基类产品,具体返回什么具体实例通过传入参数然后用case判断。

 

 

比如下面的例子:产品是手机,分别有子类 诺基亚手机和苹果手机,两种手机都通过CellphoneProducer类来控制产生。

package designpattern;

interface Cellphone {
	void call();
}

class AppleCellphone implements Cellphone {
	public void call() {
		System.out.println("Apple calls.");
	}

}

class NokiaCellphone implements Cellphone {
	public void call() {
		System.out.println("Nokia calls.");
	}
}

class CellphoneProducer {
	public static Cellphone produceNokia() {
		return new NokiaCellphone();
	}

	public static Cellphone produceApple() {
		return new AppleCellphone();
	}
}

public class SimpleFactory {

	public static void main(String[] args) {
		Cellphone phone1 = CellphoneProducer.produceNokia();
		phone1.call();
		Cellphone phone2 = CellphoneProducer.produceApple();
		phone2.call();
	}

}

 

 

工厂方法模式:该模式有一个抽象基类和若干个派生的具体工厂类,基类定义了一个虚工厂方法返回指定产品类的基类,派生类需要实现该虚方法并创建具体产品类返回。注意工厂方法的每个具体工厂只负责返回一种产品类。



 

比如下面的例子,此时的工厂类是一个基类,通过不同的子类生产不同的产品。

package designpattern;

interface CellphoneFactory {
	Cellphone produce();
}

class NokiaFactory implements CellphoneFactory {
	public Cellphone produce() {
		return new NokiaCellphone();
	}
}

class AppleFactory implements CellphoneFactory {
	public Cellphone produce() {
		return new AppleCellphone();
	}
}

public class FactoryMethod {

	public static void main(String[] args) {
		Cellphone phone1 = new NokiaFactory().produce();
		phone1.call();
		Cellphone phone2 = new AppleFactory().produce();
		phone2.call();
	}

}

 

 

抽象工厂模式:该模式和工厂方法模式很相似,也是一个抽象基类和若干个具体工厂类,不同的是抽象工厂的工厂基类定义了多个虚工厂方法,每个虚工厂方法负责返回一种产品,多个工厂方法返回多种产品,并且这些产品具有某些联系。

 



 

比如下面的例子,现在工厂类不仅要生产手机,还要生产充电器,并且两者之间有一定关联(苹果手机必须的用苹果充电器)。因此工厂类的每个子类定义了一个产品族。

package designpattern;

interface Charger {
	void charge();
}

class NokiaCharger implements Charger {
	public void charge() {
		System.out.println("Nokia charges.");
	}
}

class AppleCharger implements Charger {
	public void charge() {
		System.out.println("Apple charges.");
	}
}

interface abstractFactory {
	Cellphone producePhone();

	Charger produceCharger();
}

class NokiaAbsFactory implements abstractFactory {

	@Override
	public Cellphone producePhone() {

		return new NokiaCellphone();
	}

	@Override
	public Charger produceCharger() {
		return new NokiaCharger();
	}

}

class AppleAbsFactory implements abstractFactory {

	@Override
	public Cellphone producePhone() {

		return new AppleCellphone();
	}

	@Override
	public Charger produceCharger() {
		return new AppleCharger();
	}

}

public class AbstractFactory {

	public static void main(String[] args) {
		NokiaAbsFactory naf = new NokiaAbsFactory();
		Cellphone phone1 = naf.producePhone();
		phone1.call();
		Charger charger1 = naf.produceCharger();
		charger1.charge();

		AppleAbsFactory aaf = new AppleAbsFactory();
		Cellphone phone2 = aaf.producePhone();
		phone2.call();
		Charger charger2 = aaf.produceCharger();
		charger2.charge();
	}

}

 

 

总结:

简单工厂:用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)

工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)  

抽象工厂:用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

 

以上三种工厂方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法。 

  • 大小: 34.6 KB
  • 大小: 60.9 KB
  • 大小: 39.7 KB
分享到:
评论
1 楼 huntfor 2014-03-28  
把多线程考虑在内重写一遍吧

相关推荐

    工厂设计模式总结

    工厂设计模式是面向对象设计中的一种创建型模式,它的主要目的是为了解耦对象的创建过程,使得客户端代码不再直接通过new关键字创建对象,而是通过一个工厂类来获取所需的对象。这样做的好处在于,当需要添加新的...

    C#面向对象设计模式纵横谈(25):设计模式总结

    本篇文章将对一系列重要的C#面向对象设计模式进行总结,帮助开发者更好地理解和应用这些模式。 1. 工厂模式:工厂模式是一种创建型设计模式,提供了一种创建对象的最佳方式,通过抽象工厂接口,避免了代码与具体类...

    简单工厂模式、工厂模式、抽象工厂模式介绍

    简单工厂模式、工厂模式、抽象工厂模式 总结介绍

    工厂模式源代码

    在"工厂模式总结"这个文档中,可能会包含对以上三种工厂模式的详细解释,包括它们的类图结构、优缺点、适用场景以及具体的Java或C#等编程语言的示例代码。通过阅读这个文档,你可以深入理解工厂模式的原理,学习如何...

    设计模式之工厂模式总结

    编辑Java笔记");}}增加Python笔记public ...设计模式是软件开发中的宝贵经验总结,工厂模式作为其中的一员,可以帮助我们编写更加灵活、可维护的代码。理解并熟练运用工厂模式,能够提升软件设计的质量和可扩展性。

    酷派各种机型进工程模式方法

    总结,酷派手机的工程模式是一个强大的工具,但同时也需要用户具备一定的技术知识。正确使用它可以提高解决问题的效率,但误用则可能带来风险。因此,用户在探索工程模式时,应确保自己理解每个选项的含义和可能的...

    设计模式总结.pdf

    设计模式是软件工程中,针对软件设计中常见问题的典型解决方案。在软件开发中,设计模式能够帮助开发者编写出更加灵活、可复用、且易于维护的代码。本总结文档涵盖了所有的设计模式,并对常用的模式进行了详细解释,...

    李建忠 C#面向对象设计模式纵横谈(25):设计模式总结

    总结来说,李建忠先生的“设计模式总结”涵盖了C#中广泛使用的设计模式,强调了它们在实际项目中的应用价值。理解并熟练运用这些模式,对于提升C#开发者的专业素养和项目质量具有重大意义。无论是初学者还是经验丰富...

    工厂方法模式和抽象工厂模式的区别

    总结起来,工厂方法模式关注的是如何创建单个产品,它的主要作用是封装创建过程,使得具体的创建步骤可以在子类中实现。而抽象工厂模式则更注重于创建一系列相关的产品,提供一个接口来创建一个完整的产品族,使得...

    简单工厂-工厂方法-抽象工厂 对比总结

    本篇文章将对三种主要的工厂模式:简单工厂、工厂方法和抽象工厂进行深入的对比和总结。 **简单工厂模式** 是最基础的工厂模式形式,它提供一个静态方法或类来创建对象。在这个模式中,工厂是负责创建对象的中心...

    简单工厂模式,工厂方法模式,抽象工厂模式

    在软件设计模式中,工厂模式是一种非常基础且实用的模式,它主要用来解决对象创建的问题,使得代码在面对多种产品类时保持灵活和解耦。本文将深入探讨三种工厂模式:简单工厂模式、工厂方法模式以及抽象工厂模式,并...

    抽象工厂模式+反射技术(抽象工厂模式+简单工厂模式)

    在软件工程中,当系统需要在运行时选择不同的产品族时,或者想要隔离具体产品的实现细节时,抽象工厂模式就显得尤为重要。 首先,我们来看一下“抽象工厂模式+反射技术”。在Java或其他面向对象的语言中,反射是一...

    工厂模式-设计模式

    总结来说,这个压缩包文件很可能会涵盖如何在电商场景下使用工厂模式和其他设计模式的知识点,包括如何定义产品接口,创建工厂类,以及如何在实际项目中灵活应用这些模式来提高代码的可扩展性和可维护性。...

    工厂模式(2016手机案例)

    总结来说,"工厂模式(2016手机案例)"展示了如何利用工厂模式来管理和创建具有不同特性的手机产品。通过这种模式,我们可以更灵活地应对市场变化,适应不断发展的技术趋势,同时保持代码的清晰和可维护性。在这个...

    设计模式-工厂方法模式

    总结来说,工厂方法模式是一种创建型设计模式,它将对象的创建过程封装到单独的工厂类中,使得客户端无需知道具体的产品类,只依赖于工厂接口。结合反射机制和配置文件,工厂方法模式能够实现高度动态和可配置的对象...

    各机芯进入工厂模式汇总

    - 关机状态下,同时按住“音量-”和“电源”键,屏幕亮起后松开,一般会进入工程模式,从中可以选择工厂模式。 4. MediaTek(联发科)机芯: - 长按遥控器的“设置”和“返回”键,开机后会进入工程模式,选择相应...

    深入浅出设计模式之工厂模式

    根据提供的标题“深入浅出设计模式之工厂模式”与描述“将《Head First 设计模式》(中文版)按章节进行了分割,每章一个文件,方便大家下载”,我们可以推测出这部分内容主要关注的是设计模式中的工厂模式。...

    反射简单工厂模式工厂模式

    本文将深入探讨"反射"以及两种常见的工厂模式:"简单工厂模式"和"工厂方法模式",并结合提供的文件名称来解析这些概念。 首先,我们来看"反射"。在Java等面向对象语言中,反射是一种强大的工具,它允许程序在运行时...

    三种工厂模式java实现

    总结来说,工厂模式提供了一种封装对象创建的方式,降低了代码之间的耦合性,提高了可维护性和可扩展性。在实际开发中,我们可以根据项目需求选择合适的工厂模式进行应用。在给定的压缩包文件中,尽管没有提供具体的...

    简单工厂模式和工厂模式Demo

    总结来说,简单工厂模式和工厂方法模式都是为了封装对象的创建过程,使代码更加灵活和易于维护。简单工厂模式适合于产品种类较少且不会频繁扩展的情况,而工厂方法模式更适合于产品种类多,需要根据不同条件创建不同...

Global site tag (gtag.js) - Google Analytics