标签:android 设计模式 java 工厂模式 factory
工厂模式(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重整)。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,以此类推。那么我们为什么不直接建两个工厂就好了啊,因为他们是彼此有链接,有关系的,,我们将共同部分封装在抽象类中,不同部分使用子类实现。
抽象工厂模型相比普通工厂模型而言就多了一类角色[抽象工厂类],需要普通工厂类继承抽象工厂类来实现,抽象工厂类封装了生产商品共用的方法,普通工厂类则专门负责其单一的一类具体产品的生产。
Android开发之工厂模式初探,布布扣,bubuko.com
标签:android 设计模式 java 工厂模式 factory
原文地址:http://blog.csdn.net/gerogelin/article/details/38546375