创建型模式前奏之简单工厂模式

创建型模式是用来创建对象的,其中包含设计模式前奏说的共5个设计模式。简单工厂模式不属于23种设计模式,也不属于5种创建型模式,但它是创建型模式的基础,所以以创建型模式前奏为题说一下。

工厂模式我们经常见到,不管是数据库连接工厂还是服务器连接工厂或者其他,顾名思义,都是用来提供产品的。

简单工厂模式很容易理解,事物都是由简单一步步演化复杂的,就是我们编程最初始思想,就可以水到渠成写出简单工厂模式。

简单工厂模式UML类图如图所示:


手残党敲打

上边两条线表示继承关系,下面两条线表示依赖关系。


实例代码如下:

抽象产品类

public abstract class Product {

	//公共方法
	public void sameMethod(){
		System.out.println("我是公共方法!");
	}
	//定义抽象方法
	public abstract void diffMethod();
}

具体产品A

public class ProductA extends Product{

	@Override
	public void diffMethod() {
		System.out.println("A产品的方法!");
		
	}

}

具体产品B:

public class ProductB extends Product{

	@Override
	public void diffMethod() {
		// TODO Auto-generated method stub
		System.out.println("B产品方法!");
	}

}

工厂类

public class Factory {

	public static Product getProduct(String productDesc){
		if("A".equalsIgnoreCase(productDesc)){
			return new ProductA();
		}else if("B".equalsIgnoreCase(productDesc)){	
			return new ProductB();
		}
		return null;
	}
}

说明:简单工厂模式创建实例的方法通常是静态方法,因此又被称为静态工厂模式,它是一种 类创建模式。


Main类


public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
Product product =Factory.getProduct(ReadProperties.readProperties("product_name"));
product.sameMethod();	
product.diffMethod();
	}

}

其中ReadProperties是一个辅助类,用来读取info.properties配置文件中关于产品的配置信息,根据该配置信息生产产品。

ReadProperties如下:

public class ReadProperties {

	private static final Properties properties = new Properties();
	private static final String INFO_FILE = "info.properties";
	static{
		InputStream in =null;
		in = ReadProperties.class.getClassLoader().getResourceAsStream(INFO_FILE);
		try {
			properties.load(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/****
	 * 按照键值读取配置文件属性
	 * @param key
	 * @return
	 */
	public static String readProperties(String key){
		return (String)properties.get(key);
	}
}

简单工厂模式说明:

简单工厂方法模式思想很好理解,就是建一个工厂类,提供一个静态工厂方法,根据参数返回不同的具体产品。如果要修改产品,无需修改源代码,修改配置文件即可。

但简单工厂模式也有缺点;

工厂类职责过重,工厂类出问题,全玩儿完。

创建逻辑十分不灵活,要增加新产品,就要修改工厂源代码的创建逻辑,破坏对修改关闭原则(这个弊端就是因为没有面向高层面向抽象面向接口编程造成的,且看下一篇工厂方法模式如何解决这个问题)。


如有错误,欢迎指正

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值