工厂三姐妹之简单工厂
目录
简单工厂定义(Simple FactoryPattern):
通过专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。
Java 版代码:
User:
/*
* entity level
* */
public classUser {
public int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String name;
}
/*
* entity level
* */
public classUser {
public int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String name;
}
SQLserverUser:
/*
* the method what we use
* */
public classSqlserverUser {
public voidInsert(User user)
{
System.out.println("Add a number Insert to User_table");
}
public voidGetUser(int id)
{
System.out.println("Get a number from User_table");
return;
//在java中返回空,只return就行,但是.net 中是 return null.
}
}
Test (Client )
public classTest {
public static voidmain (String[] args)
{
Useruser =new User();
SqlserverUsersu=new SqlserverUser();
su.Insert(user);
su.GetUser(1);
}
}
结果:
.Net 版代码
实体:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceAbstract_Factory1._0
{
classUser
{
privateintid;
publicint Id
{
get {returnid; }
set {id=value;}
}
privatestring name;
publicstringName
{
get {returnname; }
set {name=value;}
}
}
}
方法:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceAbstract_Factory1._0
{
classSqlserverUser
{
publicvoidInsert(Useruser)
{
Console.WriteLine("在SQL Server 中给User表添加一条记录");
}
publicUserGetUser(intid)
{
Console.WriteLine("在SQL server 中根据ID得到User表一条记录");
returnnull;
}
}
}
客户端:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceAbstract_Factory1._0
{
classProgram
{
staticvoidMain(string[]args)
{
Useruser=newUser();
SqlserverUsersu=newSqlserverUser();
//插入用户
su.Insert(user);
//得到ID为1 的用户
su.GetUser(1);
Console.Read();
}
}
}
显示结果:
小结:
1, 工厂类负责创建的对象比较少
2, 客户只知道传人工厂类的参数,对于如何创建对象(逻辑)不关心;
3, 由于简单工厂很容易违反高内聚责任分配原则,因此一般只是在很简单的情况下使用。