Java设计模式--工厂模式

标题Java设计模式–工厂模式

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。

  • 简单工厂
    这个在真正意义上并不算一个设计模式,准确说,是一种编程习惯,将代码分成稳定的部分和抽象的部分,通过封装构造器的方式可以更高效的管理代码,很简单,有助于理解
public class FactoryMethod {
	public static void main(String[] args) {
		Application application=new Application();
		Product product=application.getObject("0");
		product.method1();
	}
}
interface Product{
	public void method1();
}
class ProductA implements Product{

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		System.out.println("ProductA.method1 executed");
	}
	
}
class ProductA1 implements Product{

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		System.out.println("ProductA1.method1 executed");
	}
	
}
class SimpleFactory{
	public static Product createProduct(String type) {
		if("0".equals(type)) {
			return new ProductA();
		}else if("1".equals(type)){
			return new ProductA1();
		}else {
			return null;
		}
	}
}
//这里我们认为Application是稳定的
class Application{
	private Product createProduct(String type) {
		return SimpleFactory.createProduct(type);
	}
	Product getObject(String type) {
		Product product=createProduct(type);
		//你的处理
		return product;
	}
}
  • 抽象工厂
    上面的代码我们简单的讲了一下关于代码的稳定部分和抽象部分,这里,我们将简单工厂稍作改进,将一些冗余的代码去除,将我们认为稳定的Application类改造为抽象类,并提供实现类,这样在一定程度上是代码的可扩展性更高了,这便是抽象工厂
public class FactoryMethod {
	public static void main(String[] args) {
		Application application=new conCreateProductA();
		Product product=application.getObject("0");
		product.method1();
	}
}
interface Product{
	public void method1();
}
class ProductA implements Product{

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		System.out.println("ProductA.method1 executed");
	}
	
}
class ProductA1 implements Product{

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		System.out.println("ProductA1.method1 executed");
	}
	
}
abstract class Application{
	abstract Product createProduct();
	Product getObject(String type) {
		Product product=createProduct();
		return product;
	}
}
class conCreateProductA extends Application{

	@Override
	Product createProduct() {
		//你的处理。。。。
		return new ProductA();
	}
}
class conCreateProductA1 extends Application{

	@Override
	Product createProduct() {
		//你的处理。。。。
		return new ProductA1();
	}
}
  • 应用场景:

     1.当你不知道改使用对象的确切类型的时候
     2.当你希望为库或框架提供扩展内部组件的方法时
    
  • 主要优点:

     1.将具体产品和创建者解耦
     2.符合单一职责原则
     3.符合开闭原则
    
  • 应用:

    例如Java的Calendar.getInstance()方法是静态工厂,java.net.URLStreamHandlerFactory()是工厂方法,感兴趣可 以进行阅读,再例如,著名的Jive论坛 ,就大量使用了工厂模式,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值