spring学习之工厂模式

来源:互联网 发布:微博盗号教程知乎 编辑:程序博客网 时间:2024/05/19 18:43

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 0
原创粉丝点击