1、为什么应用工厂模式
工厂模式包括:工厂方法和抽象工厂
工厂方法:
一般创建过程:
A a=new A();
B b=new B();
利用工厂方法:第一:可以封装创建的代码,易于扩展和维护;
如果利用抽象类:
AB a=new A();
AB b=new B();
第二:虽然利用父类创建,但是如果子类很多,将是一场悲剧!!!
2、工厂模式应用
- public interface IResOperatorFactory {
- public ResOperator createResOperator();
- public BatchResOperator createBatchResOperator();
- }
- public class ResOperatorFactoryFrontend implements IResOperatorFactory{
- private static ResOperatorFactoryFrontend instance=null;
- private ResOperatorFactoryFrontend(){
- }
- public void SetDefatultResModelSerivceName(String name){
- defatultServiceName=name;
- }
- /**
- * 获取资源操作工厂实例
- */
- public static ResOperatorFactoryFrontend getInstance(){
- if(instance==null){
- instance=new ResOperatorFactoryFrontend();
- }
- return instance;
- }
- /**
- * 创建资源操作实例
- */
- public ResOperator createResOperator(){
- return new RMIFrameResOperatorFrontend(defatultServiceName);
- }
- /**
- * 创建资源操作实例
- */
- public ResOperator createResOperator(String resModelServiceName){
- return new RMIFrameResOperatorFrontend(resModelServiceName);
- }
- /**
- * 创建批量资源操作实例
- */
- public BatchResOperator createBatchResOperator() {
- return new RMIFrameBatchResOperatorFrontend(defatultServiceName);
- }
- public class ResOperatorFactoryBackend implements IResOperatorFactory{
- private static ResOperatorFactoryBackend instance=null;
- private ResOperatorFactoryBackend(){
- }
- /**
- * 获取资源操作工厂实例
- */
- public static ResOperatorFactoryBackend getInstance(){
- if(instance==null){
- instance=new ResOperatorFactoryBackend();
- }
- return instance;
- }
- /**
- * 创建资源操作实例
- */
- public ResOperator createResOperator(){
- ResOperatorBackend resOperatorBackend=null;
- try {
- resOperatorBackend = new ResOperatorBackend();
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return resOperatorBackend;
- }
- /**
- * 创建批量资源操作实例
- */
- public BatchResOperator createBatchResOperator() {
- BatchResOperatorBackend batchResOperatorBackend=null;
- try {
- batchResOperatorBackend = new BatchResOperatorBackend();
- } catch (RemoteException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return batchResOperatorBackend;
- }
在具体应用场景下,传入工厂实例:
- /**
- * 设置资源操作工厂接口类
- * @param resOperatorFactory
- */
- public void setResOperatorFactory(IResOperatorFactory resOperatorFactory){
- ResOperatorFactory.getInstance().setIResOperatorFactory(resOperatorFactory);
- }