设计模式-代理类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();

   } 

 

}

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值