`

工厂模式:不修改工厂,只增删类对应修改配置文件就OK啦!

阅读更多




我们的最终目的是:不修改工厂,只需添加新的类和配置文件就能实现工厂生产该子类对象。这种开发思路在我们的开发过程中是随处可见的,比如在:Spring , Hibernate,Struts中应用得相当的普遍,理解了这一点对我们学习SSH那是非常的顺手哦!

当然具体的用法需要在实际的项目中来体验和优化!

更详细的介绍请看本Page下载文件:CarFactory_code.rar


package com.cdl.dp.factory2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;
import java.util.Scanner;

//参考:http://www.blogjava.net/jzgl-ever/archive/2008/07/26/217704.html
//参考:interfaceAndFactory.CarFactory
//参考:package com.cdl.dp.factory;
interface Car {
	public void run();

	public void stop();
}

class Benz implements Car {
	public void run() {
		System.out.println("Benz开始启动了。。。。。");
	}

	public void stop() {
		System.out.println("Benz停车了。。。。。");
	}
}

class Ford implements Car {
	public void run() {
		System.out.println("Ford开始启动了。。。");
	}

	public void stop() {
		System.out.println("Ford停车了。。。。");
	}
}

class Toyota implements Car {
	public void run() {
		System.out.println("Toyota开始启动了。。。");
	}

	public void stop() {
		System.out.println("Toyota停车了。。。。");
	}
}

// 扩展一个我自己的品牌,O(∩_∩)O哈哈~
class Cdliang implements Car {
	public void run() {
		System.out.println("Cdliang开始启动了。。。");
	}

	public void stop() {
		System.out.println("Cdliang停车了。。。。");
	}
}

class BYD implements Car {
	public void run() {
		System.out.println("BYD开始启动了。。。");
	}

	public void stop() {
		System.out.println("BYD停车了。。。。");
	}
}

class ProduceCar {//通过carClassPath反射,生成一个car实例
	public static Car getCarInstance(String carClassPath) {
		Car c = null;
		try {
			c = (Car) Class.forName(carClassPath).newInstance();
			// 利用反射得到汽车类型,path.package.ClassName当然我们要捕获异常啦
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return c;
	}
}

// 写一个加载XML文件的类,加载后就好供我们的程序使用了噻
class InitProperties {
	public static Properties getProperties() {// 静态的方法可以让我们不实例化就直接调用
		Properties pro = new Properties();
		try {
			pro.loadFromXML(new FileInputStream("cdl2.xml"));
		} catch (InvalidPropertiesFormatException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(pro);
		return pro;
	}
}

public class CarFactory {

	public static void main(String[] args) {

		Properties pro = new Properties();
		pro = InitProperties.getProperties();

		System.out.println("请输入你要的车品牌:");
		Scanner sc = new Scanner(System.in);
		String carName = sc.nextLine().trim();

		Car c = ProduceCar.getCarInstance((String) pro.get(carName));
		if (c != null) {// 如果这类存在那么就调用它的方法
			c.run();
			c.stop();
		} else {
			System.out.println("造不了这种汽车。。。");
		}
	}

}

运行结果:
{Benz=com.cdl.dp.factory2.Benz, Ford=com.cdl.dp.factory2.Ford, BYD=com.cdl.dp.factory2.BYD, Toyota=com.cdl.dp.factory2.Toyota, Cdliang=com.cdl.dp.factory2.Cdliang}
请输入你要的车品牌:
BYD
BYD开始启动了。。。
BYD停车了。。。。






.
分享到:
评论

相关推荐

    C#工厂模式结合反射+配置文件+外观模式实例

    本实例探讨了如何将工厂模式、反射、配置文件和外观模式这四种概念结合起来,以实现更灵活、可扩展的系统架构。下面将详细阐述这些知识点。 1. **工厂模式**: 工厂模式是一种创建型设计模式,它提供了一种创建...

    Java工厂模式:简单工厂、工厂方法模式、抽象工厂模式代码示例

    这样,新增产品时只需增加相应的产品类和具体工厂类,原有工厂类无需修改。每个具体产品都有一个对应的具体工厂,使得系统具有更好的灵活性和可扩展性。 **抽象工厂模式** 进一步扩展了工厂方法模式,用于创建一...

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

    这种方式提高了系统的可扩展性,当需要新增产品时,只需新增一个具体的工厂类即可,而不需要修改原有代码。但是,这也意味着需要为每种产品创建一个对应的工厂类。 **抽象工厂模式**: 抽象工厂模式是工厂方法模式...

    C++ 工厂模式 (简单工厂、工厂和抽象工厂)

    例如,在图形界面设计中,可以有Windows风格的按钮、文本框和滚动条,以及Mac OS风格的对应组件,抽象工厂模式可以确保在不修改客户端代码的情况下,统一更换整个应用程序的界面风格。 #### 六、实现与应用 在实际...

    java设计模式-工厂模式

    - 当系统需要引入一个新的产品时,可以只添加新的产品类和对应的工厂类,而不需要改动已有的代码结构。 在实际开发中,Java的`java.sql.DriverManager`就是一个工厂模式的例子,它根据数据库URL来返回相应的数据库...

    用工厂模式开发多数据库连接类

    在实际应用中,当需要切换数据库时,只需要更改工厂方法中的数据库类型参数,无需修改调用者代码,这体现了工厂模式的灵活性和可扩展性。同时,由于工厂模式隐藏了具体数据库连接类的实例化过程,使得系统更易于维护...

    工厂模式(工厂方法)

    这样,工厂方法就把类的实例化推迟到了子类,使得代码更加灵活,易于扩展。 在Java等面向对象编程语言中,工厂模式通常包括以下角色: 1. 抽象产品(Product):定义产品的公共接口,所有被创建的对象都必须实现这...

    抽象工厂模式实现代码(利用了反射)

    抽象工厂模式是一种设计模式,属于创建型...这样的设计使系统更具扩展性,当需要添加新的产品或工厂时,只需要添加相应的类和配置,而不需要修改现有代码。同时,通过反射的运用,降低了代码的耦合度,提高了灵活性。

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

    `factorymethod`文件可能包含了一个抽象工厂类及其多个实现子类,每个子类对应一种产品类型,它们各自实现了工厂方法来创建对应的产品对象。 总结起来,"反射"提供了一种在运行时动态操作对象和类的能力,常用于...

    工厂模式的三种写法

    工厂方法模式将产品的创建过程进一步抽象化,不再由单一的工厂类负责,而是由每个具体的工厂类负责创建对应的具体产品。这样做的好处是保持了代码的灵活性,符合“开闭原则”,即对扩展开放,对修改关闭。工厂方法...

    设计模式一:简单工厂模式(PHP源码)

    简单工厂模式的核心思想是通过一个工厂类来负责创建特定类型的对象,客户端只需知道具体的工厂类,而不需要关心具体的对象创建过程。在这个实例中,我们以计算器的实现为例,来阐述简单工厂模式的应用。 首先,我们...

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

    例如,我们可能有一个配置文件,其中指定了要使用的具体工厂类。通过反射,我们可以根据配置信息加载并实例化相应的工厂,从而创建所需的产品,这样提供了更大的灵活性和可扩展性。 接着,我们讨论“抽象工厂模式+...

    SSM实现增删改查对应工程

    3. 编写Mybatis的Mapper接口和XML配置:定义SQL语句,包括增删改查操作,并通过接口方法进行调用。 4. 创建Service层:处理业务逻辑,如验证数据、计算、事务控制等,Service层通常会调用Mapper接口进行数据库操作。...

    肯德基:抽象工厂模式

    抽象工厂模式是软件工程中常用的一种创建型设计模式,它的核心思想是为创建一组相关或相互依赖的对象提供一个接口,而不需要指定它们具体的类。在Java中,抽象工厂模式被广泛应用,它有助于整合代码,提高系统的可...

    工厂模式源代码

    2. 扩展性:易于添加新产品,只需新增对应的工厂类,无需修改已有代码。 3. 高度抽象:工厂类提供统一的创建接口,降低了系统的耦合度。 缺点: 1. 增加了系统的复杂性,尤其是当有多个抽象产品类和多个具体产品类...

    C#工厂模式多数据库(实现SQL和MYSQL的切换)

    通过定义接口和实现具体工厂类,我们可以根据配置信息轻松地在SQL Server和MySQL之间切换,而无需修改业务逻辑代码。这种设计不仅降低了系统的耦合度,还提高了代码的可读性和可维护性,是解决此类问题的一个高效...

    设计模式-抽象工厂模式(讲解及其实现代码)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

    设计模式(九)之工厂模式.zip

    - 通过引入配置文件,可以在不修改代码的情况下更换产品实现。 工厂模式有三种常见形态: - 简单工厂模式:由一个静态方法来创建对象,适用于产品种类较少且相对固定的场景。 - 工厂方法模式:将对象的创建委托给...

    工厂方法模式工厂方法模式

    2. **可扩展性**:增加新的产品类型时,只需添加新的具体产品类和对应的具体工厂类,无须修改已有代码。 3. **灵活性**:通过更换具体工厂,可以在运行时改变产品的类型。 然而,工厂方法模式也存在一定的缺点: 1....

    设计模式--抽象工厂模式实现多数据库连接

    通过抽象工厂模式,我们可以灵活地切换数据库连接,而不需要修改代码中的具体实现细节。 首先,我们来理解抽象工厂模式的基本结构。抽象工厂通常包含一个或多个抽象类或接口,这些抽象类或接口定义了创建特定类型...

Global site tag (gtag.js) - Google Analytics