设计模式一分钟之Factory


使用场景:

Factory模式是一种创建模式,在Java系统中随处可见,我们在new一个实例对象的时候,就应该想想是否可以使用Factory模式来让我们的程序具备更好的可扩展性和易用性。

为什么要使用:

假设我们在创建一个对象,一般的做法是:
People people = new People();
但是,我们一般在创建的时候,是需要做一些初始化工作的,比如:
People people = new People(int age);
再进一步,实际上,初始化工作并没有这么简单,可能需要做很多的事情, 那么这个构造函数就会越来越大,但稍有经验就会发现,这样会有很大的问题,随着项目的推进,耦合性会越来越强,导致大量的技术负债。

同时People还有很多的继承,例如Student,Teacher,Doctor,Engineer 等。
那么我们不得不修改很久以前定义的那个People类,来使它使用新子类的需求。

Factory模式应运而生!

怎么使用?

1. 普通工厂方法
代码示例:
package Factory;
public class Factory{

public static People creator(int i){
if (i==1) {
return new Student();
}else if (i==2) {
return new Teacher();
}
return null;
}

}
这样,我们在创建了一个制造People的工厂,如果我们要new一个学生:
People student = Factory.creator(1);
具体这个student 怎么new的,交给Student这个类来做,这样就做到低耦合了。

2. 抽象工厂
我们有这样的需求,Create不同的Student,就是同样是Student,我们可能需要不同的构造方法来创建他们,那样就需要抽象工厂。
示例如下:
A. 定义一个抽象工厂类

package Factory;

public abstract class AbstractFactory {
public abstract People creator();
public abstract SpecialPeople creator(int special);
}

B. 定义Student的Factory

package Factory;

public class StudentFactory extends AbstractFactory {

@Override
public People creator() {
// TODO Auto-generated method stub
return new Student();
}

@Override
public SpecialPeople creator(int special) {
// TODO Auto-generated method stub
return new SpecialStudent();
}

}

C. 定义Teacher的Factory

package Factory;

public class TeacherFactory extends AbstractFactory {

@Override
public People creator() {
// TODO Auto-generated method stub
return new Teacher();
}

@Override
public SpecialPeople creator(int special) {
// TODO Auto-generated method stub
return new SpecialTeacher();
}

}

这样Student 工厂就会生产不同的Student, Teacher工厂生产teacher。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值