触碰大师们的思想(一)之 简单工厂模式

本文介绍了一个简单的工厂模式应用案例,通过创建一个汽车抽象类及其实现类,利用工厂类实现不同品牌汽车实例的创建,展示了如何使用反射机制降低代码耦合度并提高扩展性。

简单工厂模式,又叫静态工厂模式,也就是把生产实例的动作交给工厂来完成,在使用类里没有生产实例的代码,加上反射的使用,极大的减少耦合,超级容易扩展。

package myDesignPattern01;

一个汽车抽象类:

public abstract class Car {
	public abstract void printBrand();
}

三个品牌车:

宝马:

public class BMW extends Car {

	@Override
	public void printBrand() {
		System.out.println("这是一辆宝马!");
	}

}

尼桑:

public class Nissan extends Car{

	@Override
	public void printBrand() {
		System.out.println("叫你爸爸给你买辆GTR");
		
	}
	

}
奔驰:

public class Benz extends Car{

	@Override
	public void printBrand() {
		System.out.println("奔驰奔驰奔驰");
	}
}

一个工厂类:

public class CarFactory {

	public static Car createCar(String carType) {

		Car car = null;
		/*switch (carType) {
		case "BMW":
			car = new BMW();
			break;
		case "Benz":
			car = new Benz();
			break;
		case "Nissan":
			car = new Nissan();
			break;
		}*/

		try {
			car=(Car) Class.forName("myDesignPattern01."+carType).newInstance();
		} catch (Exception e) {
			System.out.println("你要的车,么得了");
		}
		return  car;
	}

}


客户类,要进行使用汽车了:

public class Client {

	public static void main(String[] args) {

		Car car = null;
		String str = null;
		Scanner sc = new Scanner(System.in);
		System.out.println("想买啥车?");
		while (sc.hasNext()) {
			str = sc.nextLine();
			try {
				car = (Car) CarFactory.createCar(str);
				car.printBrand();
			} catch (Exception e) {
				System.out.println("么得这车,你得是打错了");
			}
		}
	}

}


运行结果:


一开始用的swich语句,后来想了想,如果要添加别的车型的话,还要改swich语句。

那么反射可以直接通过类名找到类,就用了反射。

不过缺点是这种写法类名要通过字符串得到就要加上包名,那么后面修改的话也是一个问题。

优点是只要是在myDesignPattern01这个包下添加车型,就可以直接添加,不用修改任何程序。

当然真正开发的时候应该不会采用这样的设计方法,这就是我自己写着摸索的2333333!

先展示下效果 https://pan.quark.cn/s/5061241daffd 在使用Apache HttpClient库发起HTTP请求的过程中,有可能遇到`HttpClient`返回`response`为`null`的现象,这通常暗示着请求未能成功执行或部分资源未能得到妥善处理。 在本文中,我们将详细研究该问题的成因以及应对策略。 我们需要掌握`HttpClient`的运作机制。 `HttpClient`是个功能强大的Java库,用于发送HTTP请求并接收响应。 它提供了丰富的API,能够处理多种HTTP方法(例如GET、POST等),支持重试机制、连接池管理以及自定义请求头等特性。 然而,旦`response`对象为`null`,可能涉及以下几种情形:1. **连接故障**:网络连接未成功建立或在请求期间中断。 需要检查网络配置,确保服务器地址准确且可访问。 2. **超时配置**:若请求超时,`HttpClient`可能不会返回`response`。 应检查连接和读取超时设置,并根据实际需求进行适当调整。 3. **服务器故障**:服务器可能返回了错误状态码(如500内部服务器错误),`HttpClient`无法解析该响应。 建议查看服务器日志以获取更多详细信息。 4. **资源管理**:在某些情况下,如果请求的响应实体未被正确关闭,可能导致连接被提前释放,进而使后续的`response`对象为`null`。 在使用`HttpClient 3.x`版本时,必须手动调用`HttpMethod.releaseConnection()`来释放连接。 而在`HttpClient 4.x`及以上版本中,推荐采用`EntityUtils.consumeQuietly(respons...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值