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

设计模式之工厂模式2

 
阅读更多
在前一篇介绍简单工厂模式中大家大家知道,要产生具体水果对象就必须去FriutFactory这个类中产生。这个类是一个水果的工厂。这个水果本身就是一个抽象概念。随着具体水果的增加和丰富,可能要更改FriutFactory这个类就比较频繁。因此工厂设计模式就在简单工厂设计模式上进行再次的抽象。这次抽象将按照具体的水果来进行抽象。比如苹果,那么就设计一个苹果工厂类,这个苹果工厂类就专门用来产生苹果对象。而联系到现实时候中工作分工的细化是一样的道理。
  下面直接看源码
//水果接口
public interface Fruit {
	/*
	 * 采集水果
	 */
	public void get();
}

//具体的水果苹果实现水果的接口
public class Apple implements Fruit{
	public void get(){
		System.out.println("采集苹果");
	}
}

//具体的水果香蕉实现水果的接口
public class Banana implements Fruit{
	public void get(){
		System.out.println("采集香蕉");
	}
}


//产生水果的工厂
public interface FruitFactory {
	public Fruit getFruit();
}

//苹果类工厂,用于产生具体的苹果对象
public class AppleFactory implements FruitFactory {

	public Fruit getFruit() {
		return new Apple();
	}

}
//香蕉类工厂,用于产生具体的香蕉对象
public class BananaFactory implements FruitFactory {

	public Fruit getFruit() {
		return new Banana();
	}

}

如果该果园最新又种植类李子。则以上代码不需要任何更改,只需加如下代码
// 李子
public class Pear implements Fruit {

	public void get() {
		System.out.println("采集李子");
	}

}


//产生李子对象的工厂,增加不影响和不改动之前的代码
public class PearFactory implements FruitFactory {

	public Fruit getFruit() {
		return new Pear();
	}
}


Client端代码
public class Client{
	public static void main(String[] args) {
		//实例化AppleFactory
		FruitFactory ff = new AppleFactory();
		
		Fruit apple = ff.getFruit();
		apple.get();
		
	
		FruitFactory ff2 = new BananaFactory();
		Fruit banana = ff2.getFruit();
		banana.get();
		
	
		FruitFactory ff3 = new PearFactory();
		Fruit pear = ff3.getFruit();
		pear.get();
	}
}

以上代码就实现类工厂模式。你可以通过对比简单工厂模式和工厂模式来进行理解。工厂模式更具有扩展性。同时它对原有代码几乎是不变动的。
分享到:
评论

相关推荐

    java设计模式之工厂模式

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

    设计模式之工厂方法模式

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

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

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

    设计模式之工厂系列

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

    抽象工厂设计模式抽象工厂设计模式

    抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式

    设计模式资料之工厂设计模式

    总结来说,这份“设计模式资料之工厂设计模式”可能会涵盖工厂模式的基本概念、分类、作用,尤其是重点讲解抽象工厂模式的原理、应用场景及实现方式。通过学习这些内容,开发者将能更好地理解和运用设计模式,提升...

    设计模式之工厂

    "工厂模式"是其中一种常用的设计模式,它提供了一种创建对象的最佳方式。在这个主题下,我们将深入探讨三种主要的工厂模式:简单工厂、工厂方法和抽象工厂。 1. **简单工厂模式**: 简单工厂模式是最基础的形式,...

    设计模式单例模式和工厂模式综合应用

    "设计模式单例模式和工厂模式综合应用"的主题聚焦于两种常用的设计模式:单例模式和工厂模式,并探讨它们如何协同工作来实现高效、灵活的代码结构。这个主题尤其适用于Java编程语言,因为Java的面向对象特性使得设计...

    设计模式之单例模式和工厂模式

    细心整合和单例模式和工厂模式的几种模型,懒汉式,饿汉式,如何并发操作模式,等都有详细讲解

    c++设计模式-工厂方法模式

    工厂方法模式是面向对象设计模式中的一个创建型模式,它提供了一种封装对象创建过程的方式,使得具体的对象创建过程可以延迟到子类中进行。在C++编程中,工厂方法模式广泛应用于各种软件设计中,因为它能有效地解耦...

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

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

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

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

    设计模式之工厂方法、简单工厂、抽象工厂

    这三种工厂模式的共同之处在于它们都为对象的创建提供了抽象层,隐藏了具体的实例化过程。然而,它们之间的区别在于灵活性和抽象程度: - 工厂方法模式提供了一种定义抽象接口的方法,让子类来决定具体实例化哪个类...

    设计模式——工厂方法模式

    工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...

    工厂设计模式代码

    2. **工厂方法模式**:相比于简单工厂模式,工厂方法模式将对象的创建责任进一步抽象到子类中。在工厂方法模式中,接口或抽象类定义了创建对象的工厂方法,而具体的实现由各个子类负责。这样,当需要增加新的产品...

    设计模式之工厂模式Java实现和类设计图

    在软件开发中,设计模式是经验丰富的开发者们总结出的解决常见问题的模板或最佳实践。工厂模式作为其中的一种,是对象创建型模式,它的主要目的是为了隔离对象创建过程与客户端之间的关系,使得创建过程更加灵活,...

    设计模式_工厂模式

    设计模式是软件工程中的一种最佳实践,用于解决常见的设计问题并提供可重用的解决方案。在这些模式中,工厂模式是一种创建型模式,它提供了一种封装对象创建过程的方法,使得客户端代码无需直接实例化对象,而是通过...

    设计模式之蝉

    还有“工厂模式”(Factory pattern),它是创建型设计模式之一,用于创建对象而不暴露创建逻辑给客户端,并且通过使用一个共同的接口来指向新创建的对象。这种模式在创建对象时提供了更高的灵活性和可扩展性。在...

    设计模式之java工厂模式

    "设计模式之java工厂模式"是关于如何优雅地创建对象的一种经典设计模式,它属于创建者模式类别。创建者模式主要关注对象的创建,而工厂模式则在其中扮演着重要角色,因为它提供了一种抽象的方式来创建对象,从而使...

Global site tag (gtag.js) - Google Analytics