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);
}
}
时间: 2024-10-26 07:40:33