Bootstrap

设计模式-代理类proxy:一个接口多个实现类(基于spring框架)

根据前台返回的不同参数,选择一个接口不同的实现类来实现不同业务逻辑,我们用到了proxy代理类。

首先是spring.xml 配置文件 如下:(proxy 表示代理类  ××ServiceImpl 表示实现类)

<bean id="接口名称" >
        <property name="target" ref="proxy"></property>
    </bean>

<bean id="proxy“ class= ”代理类地址“>

 <property name="××ServiceImpl1" ref="××ServiceImpl1"></property>

 <property name="××ServiceImpl2" ref="××ServiceImpl2"></property>

</bean>

<bean id="××ServiceImpl1" class=""></bean>

<bean id="××ServiceImpl2" class=""></bean>

代理类代码

public class proxy implements 接口 {

//获取两个实现类

public 接口 ××ServiceImpl1 ;

public 接口 ××ServiceImpl2 ;

//获取不同实现类的成员变量 service

public 接口 service;

 三者的get set 方法;

public 接口 getService(){

if(判断使用哪个实现类的条件){

service = ××ServiceImpl1 ;

}else{

service = ××ServiceImpl12;

}

}

}

 

具体实例如下:

一、applicationContext.xml中注册bean,代理类极其实现类都放在com.hd.impl.文件夹下,接口在com.hd文件夹IService

 代理类极其实现类注册:

<bean id="ABC_Service" parent="baseTransactionProxy">

  <property name="target" ref="ServiceImplProxy"></property>

</bean>


<bean id="AServiceImpl" class="com.hd.impl.AServiceImpl">
<bean id="BServiceImpl" class="com.hd.impl.BServiceImpl">
<bean id="CServiceImpl" class="com.hd.impl.CServiceImpl">
代理类实现类继承
<bean id="ServiceImplProxy" class="com.hd.impl.ServiceImplProxy">
<property name="AServiceImpl" ref="AServiceImpl"></property>
<property name="BServiceImpl" ref="BServiceImpl"></property>
<property name="CServiceImpl" ref="CServiceImpl"></property>

</bean>

 

二、代理类代码

public class ServiceImplProxy implements IService{
       private IService service;//代理类中要使用的实现类

        private AServiceImpl aservice;

        private BServiceImpl bservice;        

    public AServiceImpl getAservice() {
        return aservice;
    }

    public void setAservice(AServiceImpl aservice) {
        this.aservice = aservice;
    }

    public BServiceImpl  getBservice() {
        return bservice;
    }

    public void setBservice(BServiceImpl  bservice) {
        this.bservice = bservice;
    } 

   //判断使用哪个实现类

   public IService getService(String param){

       if("a".equals(param)){       

            service = aservice;

       }else{

            service = bservice;

       }

   }

  public void A(String param){

     getService(String param).A();

   } 

 

}

 

 

 

 

 

 

;