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,以此类推。那么我们为什么不直接建两个工厂就好了啊,因为他们是彼此有链接,有关系的,,我们将共同部分封装在抽象类中,不同部分使用子类实现。

     抽象工厂模型相比普通工厂模型而言就多了一类角色[抽象工厂类],需要普通工厂类继承抽象工厂类来实现,抽象工厂类封装了生产商品共用的方法,普通工厂类则专门负责其单一的一类具体产品的生产。


     

    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值