OKhttp使用

意图:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类
情景:接着上一个数据的例子,现在的需求是增加一张用户表,用抽象方式来实现

数据表Department

package createType.factory;

/**
* Created by LSX on 2018/5/10.
*/

public class Department {
private int id;
private String name;

public Department(int id, String name) {
this.id = id;
this.name = name;
}

public void setId(int id) {
this.id = id;
}

public void setName(String name) {
this.name = name;
}

public int getId() {
return id;
}

public String getName() {
return name;
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}




public interface IDepartment {
void insert(Department user);

void getUser();
}




public class SqlserverDepartment implements IDepartment{
public void insert(Department user){
Log.e("tag","SqlserverDepartment增加一条用户数据");
}

public void getUser(){
Log.e("tag","SqlserverDepartment获取一条用户数据");
}
}



public class AccessDepartment implements IDepartment{
public void insert(Department user){
Log.e("tag","AccessDepartment增加一条用户数据");
}

public void getUser(){
Log.e("tag","AccessDepartment获取一条用户数据");
}
}

修改原始类

public interface IFactory {
IUser createUser();
IDepartment createDepartment();//新增
}




public class SqlServerFactory implements IFactory {
@Override
public IUser createUser() {
return new SqlserverUser();
}

@Override
public IDepartment createDepartment() {       //新增
return new SqlserverDepartment();
}


}





public class AccessFactory implements IFactory {
@Override
public IUser createUser() {
return new AccessUser();
}

@Override
public IDepartment createDepartment() {   //新增
return new AccessDepartment();
}
}

调用

/**
* 抽象工厂
*/
private void abstractFactory() {
User user = new User(2, "布隆");
Department department = new Department(3, "妖姬");

IFactory acessfactory = new AccessFactory();

IUser iuser = acessfactory.createUser();
iuser.insert(user);
iuser.getUser();


IDepartment idepartment = acessfactory.createDepartment();
idepartment.insert(department);
idepartment.getUser();

}

代码确实有点多,下面再看一下用简单工厂对这个相同业务逻辑的精简版

一个工厂逻辑类替代其他所有工厂

public class DataAccess {

public static IUser createUser(String dbName){
switch (dbName){
case "SqlserverUser":
return new SqlserverUser();
case "AccessUser":
return new AccessUser();
}
return null;
}

public static IDepartment createDepartment(String dbName){

switch (dbName){
case "SqlserverDepartment":
return new SqlserverDepartment();
case "AccessDepartment":
return new AccessDepartment();
}
return null;

}

}

调用

IDepartment idepartment = acessfactory.createDepartment();
idepartment.insert(department);
idepartment.getUser();

IUser simpleIuser = DataAccess.createUser("SqlserverUser");
simpleIuser.insert(user);
simpleIuser.getUser();


IDepartment sqlserverDepartment = DataAccess.createDepartment("SqlserverDepartment");
sqlserverDepartment.insert(department);
sqlserverDepartment.getUser();

代码确实少了很多,而且逻辑清晰,但是大家发现没有,代码和数据量小还没问题,一旦遇到大项目,海量数据DB,这种方式会比抽象工厂麻烦很多,因为抽象工厂直接创建新类继承就可以,而简单工厂则需要去改动原始类的代码,还不止一处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值