其实设计模式就是一个不断转移依赖,不断进行抽象的一个产物,把个部分零散掉,之后在靠一些规则组合在一起,完成一个本应该几行代码完成的事情,这样做必然会带来一些设计上的复杂,但是各各部分被打散之后偶合更小,一般在一个代码里修改代码,而不用变动其它地方的代码。
其实工厂模式真的很简单,但是实现工厂模式就有很多种方法了,一般来说,现在有了DI框架,完全可以抛弃工厂模式,而且现在JAVA语言又支持一些动态性,比如反射特性,我们完全可以使用反射去生成类的对象。但是,利用反射生成对象之后需要在使用反射的特性去调用方法,还是有些麻烦的。其实我认为工厂模式在自己的项目中完全可以踢掉而使用DI这类框架,也不要自己动手去用反射完成DI的事情。
我们可以使用这种编程习惯,在自己类中写一个这样的方法。
我们也可以写一个简单的工厂模式。
那么在你的程序中,如果要实例化Sample时.就使用
这个是个最简单的工厂,同样可以使用一些反射特性:
当然,实现的方法多种多样。
有些时候为了降低工厂之间的偶合,我们使用一个抽象类或者一个接口,比如用接口降低工厂生成时候的偶合,我们还可以用抽象类,基类实现基本的通用的,可以被高度抽象的方法,子类去实现这些方法,之后在NEW时使用多态性,让工厂来制造出我们需要的对象。
现在有了DI,我更倾向于DI去解决这种问题。使用DI之后不需要往系统中添加这个模式,毕竟加进来是要成本的,而且还会有BUG。而DI让工厂做的事情变的更简单,而且还可以抽象出一个接口出来,对接口做IOC,还是很不错的设计选择。
其实工厂模式真的很简单,但是实现工厂模式就有很多种方法了,一般来说,现在有了DI框架,完全可以抛弃工厂模式,而且现在JAVA语言又支持一些动态性,比如反射特性,我们完全可以使用反射去生成类的对象。但是,利用反射生成对象之后需要在使用反射的特性去调用方法,还是有些麻烦的。其实我认为工厂模式在自己的项目中完全可以踢掉而使用DI这类框架,也不要自己动手去用反射完成DI的事情。
我们可以使用这种编程习惯,在自己类中写一个这样的方法。
class A{
public A factory(){
return new A();
}
}
我们也可以写一个简单的工厂模式。
public class Factory{
public static Sample creator(){
return new SampleA();
}
}
那么在你的程序中,如果要实例化Sample时.就使用
Sample sampleA=Factory.creator();
这个是个最简单的工厂,同样可以使用一些反射特性:
public Object factory(String clss) throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Class cls=Class.forName(clss);
Object ob=cls.newInstance();
return ob;
}
当然,实现的方法多种多样。
有些时候为了降低工厂之间的偶合,我们使用一个抽象类或者一个接口,比如用接口降低工厂生成时候的偶合,我们还可以用抽象类,基类实现基本的通用的,可以被高度抽象的方法,子类去实现这些方法,之后在NEW时使用多态性,让工厂来制造出我们需要的对象。
现在有了DI,我更倾向于DI去解决这种问题。使用DI之后不需要往系统中添加这个模式,毕竟加进来是要成本的,而且还会有BUG。而DI让工厂做的事情变的更简单,而且还可以抽象出一个接口出来,对接口做IOC,还是很不错的设计选择。