解耦的方式

!. 依赖要使用的功能,而不是具有该功能的类

        方式一

类A需要一个闹钟功能                             钟表类B具有闹钟功能

引用了钟表类B                                手机类C 具有闹钟功能

                                                                          洗衣机类D具有闹钟功能

这是一种强耦合关系,如果不想使用钟表类,想换成手机类C就麻烦了

 

方式二

类A需要一个闹钟功能                             具有闹钟功能的接口INAOZHONG

        引用了接口INAOZHONG                  钟表类B实现了INAOZHONG

                                                               手机类C实现了INAOZHONG

                                                               洗衣机类D实现了INAOZHONG

这是一种弱耦合关系,只依赖功能接口,任何实现该接口,具有该功能的类都可以使用

怎么使用就是下面要说的,依赖数据,而不是依赖程序类

 

!. 依赖数据、而不是程序类

        配置文件

       ===========================================================================

        方式一

        类A需要一个闹钟功能

                引用了接口INAOZHONG

                new 钟表类B()

        还是强耦合关系,修改提供闹钟功能的对象时,需要改代码。

 

        方式二

        类A需要一个闹钟功能

                引用了接口INAOZHONG

                Factory.getBean(INAOZHONG.class.getName());//这里只是用全路径名称作为接口Bean的id了。

 

        bean.xml

                <bean id="org.test.INAOZHONG" >

                      <impl ref="org.test.ZHONGBIAOImpl" />

                </bean>

                <bean id="org.test.ZHONGBIAOImpl" class="org.test.ZHONGBIAOImpl"/>

                <bean id="org.test.SHOUJIImpl" class="org.test.SHOUJIImpl"/>

                     <bean id="org.test.XIYIJIImpl" class="org.test.XIYIJIImpl"/>

           Factory类

                      getBean();//通过beanId获取bean对象;这里主要去拿接口INAOZHONG的bean对象,返回的是一个实现类对象。

        还是弱耦合关系,修改提供闹钟功能的对象时,需要改XML数据。

 

        监听器

       ===========================================================================

        还有一种依赖数据就是监听器

                 学生类A                                                分数类B

                 学生数据A                                                               分数数据B

                                                                              分数类B读取学生数据A,经过计算,得出分数数据B

                       

                       学生数据A删除一行,该学生的分数数据需要级联删除,怎么实现呢?

                       方式一

                       学生类A中直接删除分数数据B

                       分数类B依赖于学生数据A

                       类A依赖于分数数据B

 

                       这是双向依赖关系

                       

                       方式二

                       学生类A中只删除学生的数据

                       数据类建立监听器,对感兴趣的监听器处理器发广播

                       分数类B建立监听处理器对象,放到监听器的池子中

 

                       分数类B依赖于学生数据A

                       学生类A只依赖自己的数据

                       级联删除通过监听器的方式建立关联,而这种关联是数据的依赖,而不是程序类的依赖

 

                       这是单向依赖关系,另一个方向的依赖是数据,很弱

 

学习了 http://blog.csdn.net/iamkila/article/details/7257303 的文章

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值