spring学习之工厂模式

1.设计模式是一套反复使用,多数人知晓,经过分类、代码设计的经验总结。
2.工厂模式的定义:为创建一组相关或者相互依赖的对象提供一个接口,而无需指定他们的具体实现类。
3.工厂模式的适用性
(1)有一组类似的对象需要创建;
(2)系统需要考虑扩展性
4.工厂模式的三个角色
(1)抽象产品(接口)
(2)具体产品(实现类)
(3)生产者(工厂类)
工厂模式的三个角色
其中concreteProduct是具体产品,product是抽象产品,creator是生产者。
5.工厂模式的好处:
提供好的灵活性和代码复用性,代码仅仅依赖接口而不是实现类。但是代码复杂度会有所增加。
下面是一个完整的工厂模式代码片段
这里写图片描述
students类

public class Students {

    private String sid;
    private String name;
    private int age;

    public Students(String sid, String name, int age) {
        super();
        this.sid = sid;
        this.name = name;
        this.age = age;
    }
    public Students() {
        super();
    }
    public String getSid() {
        return sid;
    }
    public void setSid(String sid) {
        this.sid = sid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

users类

public class Users {

    private String uid;
    private String name;
    private String passwd;

    public Users(String uid, String name, String passwd) {
        super();
        this.uid = uid;
        this.name = name;
        this.passwd = passwd;
    }
    public Users() {
        super();
    }
    public String getUid() {
        return uid;
    }
    public void setUid(String uid) {
        this.uid = uid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPasswd() {
        return passwd;
    }
    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }   
}

抽象接口

public interface BussinessDAO {

    //保存实体
    //保存任何一个对象,与参数无关
    public boolean save(Object obj);

}

具体实现类

public class StudentsDAOImpl implements BussinessDAO {

    @Override
    public boolean save(Object obj) {
        Students s=(Students)obj;
        System.out.println("学号"+s.getSid()+"姓名"+s.getAge());
        return true;
    }

}
public class UsersDAOImpl implements BussinessDAO{

    @Override
    public boolean save(Object obj) {
        Users u=(Users)obj;
        System.out.println("用户名:"+u.getName()+"密码:"+u.getPasswd());
        return true;
    }

}

工厂类

public class BussinessFactory {

    public static BussinessDAO getInstance(String className){
        if(className.equals("com.qzp.model.Students"))
        {
            return new StudentsDAOImpl();
        }
        else if(className.equals("com.qzp.model.Users"))
        {
            return new UsersDAOImpl();
        }
        else
        {
            return null;
        }
    }
}

测试方法

public class TestBussinessFactory extends TestCase{

    public void testGetInstance(){
        BussinessDAO dao=BussinessFactory.getInstance("com.qzp.model.Students");
        Students s=new Students();
        s.setAge(11);
        s.setName("qzp");
        s.setSid("001");
        dao.save(s);    
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值