`
249326109
  • 浏览: 53629 次
  • 性别: 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  
把多线程考虑在内重写一遍吧

相关推荐

    工厂设计模式总结

    详细但要工厂设计模式,并与仓储模式对比,分析其适用场合,非常适合学习,对初学者帮助很大

    设计模式之工厂模式总结

    设计模式之工厂模式 什么是工厂模式? 工厂模式是一种常见的设计模式,将我们创建对象的行为封装(因为创建对象的行为往往是重复的)然后直接调用工厂所给出的方法创建对象即可。 工厂模式有三种: 1. 简单工厂模式...

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

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

    lua设计模式总结

    1、简单工厂模式lua实现 2、工厂方法模式lua实现 3、原型模式lua实现 4、建造者模式lua实现 5、单例模式lua实现 6、抽象工厂模式lua实现 结构型模式 1、装饰模式lua实现 2、代理模式lua实现 3、外观模式lua实现 4、...

    设计模式自己总结一句话描述

    创建型模式,共五种: 工厂方法模式、抽象工厂模式、单例模式、构建者模式、原型模式。 结构型模式,共七种: 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种...

    java中常用设计模式总结心得

    java中常用到的设计模式,包括单例模式,工厂模式,建造模式门面模式等详细的解释

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

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

    设计模式精心总结

    精心总结的设计模式,可以比较容易理解模式之间的根本区别,不至于一塌糊涂,适用于考试时答题使用

    工厂模式代码

    简单工厂模式,工厂方法模式,运用反射实现工厂模式

    精品源码 C# 27种设计模式源代码

    8 结构型模式总结 8 责任链模式 9 创建型模式总结 9 中介者模式 10 备忘录模式 10 行为型模式总结 11 访问者模式 1 观察者模式 1 建造者模式 1 装饰模式 2 单例模式 2 门面模式 2 模板方法模式 3 策略模式 3 工厂...

    java23种设计模式总结

    java23种设计模式总结 . 设计模式 1.1 创建型模式 1.1.1 工厂方法 1.1.2 抽象工厂 1.1.3 建造者模式 .. 1.1.4 单态模式 .. 1.1.5 原型模式 . 1.2 结构型模式 ... 1.2.1 适配器模式 1.2.2 桥接模式 ........

    简单工厂设计模式

    Java 设计模式 总结了经典设计模式之一的简单工厂设计模式,内涵类图,UML介绍.

    设计模式笔记(包含所有设计模式)个人总结提炼笔记

    1. 创建型模式:创建型模式关注对象的创建过程,包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。这些模式可以帮助我们更灵活地创建对象,避免直接使用new关键字来创建对象,降低...

    23种设计模式经典案例(C++版)

    设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代 码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计...

    Java23种设计模式总结pdf

    Java23种设计模式总结pdf,包括常用的策略模式、观察者模式、装饰者模式、抽象工厂模式、适配器模式、迭代器模式、模板方法模式、单例模式等等

    23中设计模式总结

    1. 设计模式 3 1.1 创建型模式 4 1.1.1 工厂方法 4 1.1.2 抽象工厂 6 1.1.3 建造者模式 10 1.1.4 单态模式 13 1.1.5 原型模式 15 1.2 结构型模式 17

    Java23种设计模式总结

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统...

    设计模式总结与分析

    Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式),为了方便大家学习,现将所有文章的进行了整理,方便大家下载阅读...

    C++设计模式大总结

    包括C++的常用设计模式,大总结与常见使用测试,一个VS工程,方便学习、复习和修改增加

Global site tag (gtag.js) - Google Analytics