`
edwin492
  • 浏览: 115567 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

设计模式之工厂

阅读更多

简单工厂:

简单工厂利用静态方法返回一个类具体对象,因此也叫静态工厂模式。

工厂:

工厂方法一般造一种产品。

抽象工厂:

抽象工厂造许多个系列产品,系列之内的产品互相之间有依赖。

 

 工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现开闭原则,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。工厂方法模式(Factory Method pattern)是最典型的模板方法模式(Templete Method pattern)应用。

       工厂方法模式和简单工厂模式在结构上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来,从而可以成为多个简单工厂模式的综合,进而推广了简单工厂模式。工厂方法模式退化后可以变得很像简单工厂模式。设想如果非常确定一个系统只需要一个具体工厂类,那么就不妨把抽象工厂类合并到具体的工厂类中去。由于反正只有一个具体工厂类,所以不妨将工厂方法改成为静态方法,这时候就得到了简单工厂模式。

        抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。这就是抽象工厂模式的用意。 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。 Abstract Factory是从工厂方法演化过来的,抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。一般的工厂模式只能生产一种产品,但是抽象工厂所提供的接口可以创建产品家族,利用这个接口书写代码,我们代码就从实际工厂解耦了,以便在不同上下文环境中实现各种各样的工厂制造各种各样的产品。

       当你发现,有一个接口可以有多种实现的时候,可以考虑使用工厂方法来创建实例。当你返现,有一组接口可以有多种实现方案的时候,可以考虑使用抽象工厂创建实例组。简单工厂几乎不太有使用得到的场合,因为功能过于单一,如果仅仅是返一个确定的对象,那么事实上直接采用new对象出来,并无太多区别。当然如果序列类分离模块时,还是有一点点的使用价值。

简单工厂:

 

public class SimpleFactory {

	interface Car{
		public abstract void speed();
	}
	
	class BenZCar implements Car{
		public void speed() {
			System.out.println("speed is 360km/h.");
		}
	}
	
	class BWMCar implements Car{
		public void speed(){
			System.out.println("speed is 380km/h.");
		}
	}
	
	class CarFactory{
		public Car product(String type){
			if("benz".equals(type)){
				return new BenZCar();
			}else{
				return new BWMCar();
			}
		}
	}
	
	public static void main(String[] args){
		Car car = new SimpleFactory().new CarFactory().product("benz");
		car.speed();
	}
}
  
 

 

工厂:

public class Factory {

	interface Car{
		public abstract void speed();
	}
	
	class BenZCar implements Car{
		public void speed() {
			System.out.println("speed is 360km/h.");
		}
	}
	
	class BWMCar implements Car{
		public void speed(){
			System.out.println("speed is 380km/h.");
		}
	}
	
	interface CarFactory{
		public abstract Car product();
	}
	
	class BenZCarFactory implements CarFactory{
		public Car product() {
			return new BenZCar();   
		}
	}
	class BWMCarFactory implements CarFactory{
		public Car product() {
			return new BWMCar();   
		}
	}
	public static void main(String[] args) {
		BenZCarFactory beanZCarFactory = new Factory().new BenZCarFactory();
		Car benZCar = beanZCarFactory.product();
		benZCar.speed();
	}

}
 

抽象工厂:

 

public class AbstractFactory {
	
	interface BigCar{
		public abstract void speed();
		//other...
	}
	
	interface SmallCar{
		public abstract void speed();
		//other....
	}
	
	class BenZBigCar implements BigCar{
		public void speed() {
			System.out.println("BenZBigCar's speed is ....");
		}
	}
	class BenZSmallCar implements SmallCar{
		public void speed() {
			System.out.println("BenZSmallCar's speed is ....");
		}
	}
	class BWMBigCar implements BigCar{
		public void speed() {
			System.out.println("BWMBigCar's speed is ....");
		}
	}
	class BWMSmallCar implements SmallCar{
		public void speed() {
			System.out.println("BWMSmallCar's speed is ....");
		}
	}
	
	interface CarFactory{
		public abstract BigCar productBigCar();
		public abstract SmallCar productSmallCar();
	}
	
	class BenZCarFactory implements CarFactory{
		public BigCar productBigCar() {
			return new BenZBigCar();   
		}
		public SmallCar productSmallCar() {
			return new BenZSmallCar();   
		}
	}
	class BWMCarFactory implements CarFactory{
		public BigCar productBigCar() {
			return new BWMBigCar();   
		}
		public SmallCar productSmallCar() {
			return new BWMSmallCar();   
		}
	}
	public static void main(String[] args){
		BenZCarFactory benZCarFactory = new AbstractFactory().new BenZCarFactory();
		BigCar bigCar = benZCarFactory.productBigCar();
		bigCar.speed();
	}
}
 
分享到:
评论

相关推荐

    java设计模式之工厂模式

    java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式...

    设计模式之工厂方法模式

    工厂方法模式是设计模式中的创建型模式之一,它在软件工程中扮演着非常重要的角色,尤其是在C#这样的面向对象编程语言中。工厂方法模式提供了一种封装对象创建过程的方法,使得具体的创建过程延迟到子类中进行,从而...

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

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

    设计模式之工厂系列

    "设计模式之工厂系列"指的是几种不同的工厂模式,它们都是面向对象设计中的重要组成部分,尤其在Java编程语言中广泛使用。工厂模式的主要目标是提供一个创建对象的抽象接口,使得系统在不指定具体实现类的情况下,...

    菜鸟教程设计模式之工厂模式代码整理

    在这个"菜鸟教程设计模式之工厂模式代码整理"中,我们将深入探讨工厂模式的基本概念、结构以及如何在实际编程中应用。 工厂模式的核心思想是通过一个专门的工厂类来创建对象,而不是让客户端代码直接实例化具体的...

    菜鸟教程设计模式之工厂模式代码整理(反射机制改进版)

    在这个“菜鸟教程设计模式之工厂模式代码整理(反射机制改进版)”中,我们主要探讨的是如何利用Java的反射机制来进一步增强工厂模式的功能。 首先,理解工厂模式的基本概念。工厂模式属于创建型设计模式,它提供了...

    JAVA设计模式之工厂模式

    ### JAVA设计模式之工厂模式 #### 一、工厂模式概述 工厂模式是一种常见的设计模式,主要应用于当系统中存在大量的类实例化需求时。通过工厂模式,我们可以避免直接使用`new`关键字创建对象,而是通过工厂类来创建...

    [创建型模式] head first 设计模式之工厂模式(Factory)

    工厂方法(Factory Method)是工厂模式的一种具体实现,它是《Head First 设计模式》这本书中讲解的重点之一。在这个模式中,一个工厂类声明了一个创建对象的抽象方法,但并不实现这个方法。而是由子类决定要实例化...

    研磨设计模式之工厂方法模式.

    《研磨设计模式之工厂方法模式》是一本深入解析Java设计模式的专业书籍,特别是对工厂方法模式进行了详尽的探讨。设计模式是软件工程中的一种最佳实践,它们是解决常见问题的经验总结,使得代码更加可读、可维护和可...

    JAVA设计模式之工厂模式.pdf

    JAVA设计模式之工厂模式 JAVA设计模式之工厂模式是软件开发中一种常用的设计模式,它专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。 一、工厂...

    设计模式之工厂模式

    《设计模式之工厂模式》 在软件工程领域,设计模式是一种经过验证的、解决常见问题的模板或最佳实践。工厂模式是其中最基础且广泛使用的设计模式之一,它属于创建型模式,主要用于对象的创建。工厂模式的核心理念是...

    Java设计模式之工厂模式(Factory)

    ### Java设计模式之工厂模式详解 #### 一、引言 设计模式是在软件设计过程中针对常见问题而提出的标准化解决方案。其中,“工厂模式”是面向对象编程中最常用的模式之一,主要目的是封装实例化过程,使代码更加...

    JAVA设计模式之工厂方法模式

    ### JAVA设计模式之工厂方法模式 #### 一、引言 设计模式是在软件工程领域内广泛应用的一种编程思想,它能够帮助开发者解决常见的软件设计问题,提高代码的可维护性和复用性。面向对象的设计模式更是现代软件开发...

    C++的设计模式之工厂方法模式(Factory Method)

    C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method)

    Java设计模式之工厂方法的ifelse实现的源码

    在给定的"Java设计模式之工厂方法的ifelse实现"源码中,我们可以看到作者通过if...else语句来实现工厂方法的具体逻辑。通常,这种实现方式是针对不同类型的对象,根据条件判断来决定调用哪个具体类的构造函数。这种...

    专题资料(2021-2022年)Java设计模式之工厂模式Factory.doc

    【Java设计模式之工厂模式Factory】是面向对象编程领域中常用的设计模式,它提供了一种创建对象的最佳方式。工厂模式的主要思想是将对象的创建过程封装起来,使得客户端(使用对象的代码)无需关心对象的具体创建...

Global site tag (gtag.js) - Google Analytics