首页 > 代码库 > Android开发之工厂模式初探
Android开发之工厂模式初探
工厂模式(Factory)是比较常见的一种模式我觉得也是一种非常容易理解的一种模式,举个简单的例子吧,我们小时候经常考试,每次最害怕的就是爸妈问考试试卷的分数,不同的分数我们的心情也是不一样的。那么我们就根据这个情况以工厂模式写一个Java程序。
public class Factory {
public static Student_test creator(String rank){
if(rank.equals("优秀")){
return new Student_Laugh();
}else{
return new Student_Cry();
}
}
}
在这里我们建立了一个工厂类根据该学生得到的不同成绩,生成该学生不同情绪的反应类。很多人觉得我直接根据值new Student()类不就好了,是的啊这样的逻辑没有问题,但是如果创建Student实例时所做的初始化工作不是象赋值这样简单的事,我们都知道我们苦逼的分数都是由我们老师打得,是经历了一个很长的阅卷过程,转化起来可能是很长一段代码,如果也写入构造函数中,那我们的代码很难看了(就需要Refactor重整)。为什么说代码很难看,大部分人刚开始可能没有这种感觉,我刚开始也是这么觉得。但是我们分析一下,初始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这也是有背于Java面向对象的原则,面向对象的封装(Encapsulation)和分派(Delegation)告诉我们,尽量将长的代码分派“切割”成每段,将每段再“封装”起来(减少段和段之间偶合联系性),这样就会将风险分散,以后如果需要修改,只要更改每段,不会再发生牵一动百的事情。
在本例中,首先,我们需要将创建实例的工作与使用实例的工作分开, 也就是说,让创建实例所需要的大量初始化工作从Student的构造函数中分离出去。
在构建工厂类的时候呢,除了上述的工厂类Factory,还有抽象类Student
public abstract class Student {
}
Student的子类laugh,cry类继承抽象类Student共同组成。下面我们再来介绍一下抽象工厂模型,这两个模式区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得复杂了,如上面工厂方法中是创建一个对象Student_test,如果学生还有普通不考试的状态Student_normal,这怎么办呢!我们继续上面的比方,一个家比喻成一个工厂,他们家有两个小孩,两个小孩还是都要去考试吧,都会有考试成绩吧,但虽然是一个爸妈生的,对于分数的表现也是不一样的吧。按照上述场景,我们在写一个抽象工厂模型。
public abstract class Factory{
public abstract Student_normal creator();
public abstract Student_test creator(String name);
}
public class SimpleFactory extends Factory{
public Student_normal creator(){
.........
return new StudentA
}
public Student_test creator(String name){
.........
return new StudentA_laugh|cry
}
}
public class BombFactory extends Factory{
public Student_normal creator(){
......
return new StudentB
}
public Student_test creator(String name){
......
return new StudentB_laugh|cry
}
}
}
从上述代码分析,我们总共有两个抽象的creator类Student_normal和Student_test类,代表平时学生的两种状态,考试和不考试的状态,而每一个抽象类模型下面又有刚说的那两孩子,Student_normal类下面StudentA、StudentB,以此类推。那么我们为什么不直接建两个工厂就好了啊,因为他们是彼此有链接,有关系的,,我们将共同部分封装在抽象类中,不同部分使用子类实现。
抽象工厂模型相比普通工厂模型而言就多了一类角色[抽象工厂类],需要普通工厂类继承抽象工厂类来实现,抽象工厂类封装了生产商品共用的方法,普通工厂类则专门负责其单一的一类具体产品的生产。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。