Spring----工厂模式

Spring核心技术之IOC和DI

控制反转(IoC):Inversion of Control

依赖注入(DI):Dependency Injection

工厂类角色-->BeanFactory

抽象产品角色-->USB

具体产品角色-->UsbMovedDisk

例子:

USB接口,,U盘、硬盘设备,,USB工厂

UsbDevice接口:

package com.dao;

//抽象产品,USB设备
public interface UsbDevice {
    
    //读数据
    public void readData();
    
    //写数据
    public void writeData(String content);
}

U盘和硬盘设备:

package com.entity;

import com.dao.UsbDevice;

//U盘类
public class UDisk implements UsbDevice{

    @Override
    public void readData() {
        // TODO Auto-generated method stub
        System.out.println("U盘读数据中...");
    }

    @Override
    public void writeData(String content) {
        // TODO Auto-generated method stub
        System.out.println("U盘写入数据:"+content);
    }
    
}
package com.entity;

import com.dao.UsbDevice;

//移动硬盘
public class MoveDisk implements UsbDevice{

    @Override
    public void readData() {
        // TODO Auto-generated method stub
        System.out.println("移动硬盘读数据中....");
    }

    @Override
    public void writeData(String content) {
        // TODO Auto-generated method stub
        System.out.println("移动硬盘写入数据:"+content);
    }
    
}

工厂类:

package com.factory;

import com.dao.UsbDevice;

//USB设备的工厂类,负责生产各种USB设备的产品
public class UsbDeviceFactory {
    
    public static UsbDevice createUsbDevice(String type){
        //利用反射来实现,动态创建USB设备。"com.entity.UDisk"
        try {
            Class clazz=Class.forName(type);
            return (UsbDevice) clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

测试类:

package com.factory;

import org.junit.Test;

import com.dao.UsbDevice;

public class UsbDeviceFactoryTest {
    
    @Test
    public void fun1(){
        String type="com.entity.UDisk";
        
        UsbDevice u = UsbDeviceFactory.createUsbDevice(type);
        u.readData();
        u.writeData("茜茜公主");
    }
}

测试结果:

U盘读数据中...
U盘写入数据:茜茜公主 

 分析:工厂通过反射创建实例


 IOC

applicationContent.xml文件:

spring通过工厂模式利用反射生成实例(注入)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
					  http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
		
	<bean id="mydevice" class="com.entity.MoveDisk">
		
	</bean>
</beans>

测试类:

package com.dao;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UsbDeviceTest {
    
    @Test
    public void fun1(){
        //获得上下文对象
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
        //spring的工厂帮忙注入对象
        UsbDevice u = (UsbDevice) ctx.getBean("mydevice");//体现了多态性
        //三个特征:1.继承2.方法重写3.父类引用指向子类对象
        u.readData();
        u.writeData("茜茜公主~~");
        
    }
}

测试结果:

移动硬盘读数据中....
移动硬盘写入数据:茜茜公主~~

  

 

转载于:https://www.cnblogs.com/xjs1874704478/p/11175073.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值