提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用。
举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等。有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔;当你向他要铅笔,它就会生产一直铅笔。
根据上述描述,我们可以发现以下几点:
1.需要有一个笔的基类,并封装相应公有方法;
2.需要有相关的笔的子类,继承基类并实现公有方法并拓展相关自身方法;
3.有一个工厂,通过传递参数来确定实例化何种笔。
基类:Pen
1 //类似于java中的abstract 2 public abstract class Pen { 3 //定义getPenName方法,实现类需要实现此方法 4 public abstract String getPenName(); 5 }
子类定义两个,Pencil 以及Gel Pen并实现getPenName方法。
子类:Pencil
1 public class Pencil extends Pen{ 2 override public String getPenName() { 3 return 'Pencil'; 4 } 5 }
子类:GelPen
1 public class GelPen extends Pen{ 2 override public String getPenName() { 3 return 'GelPen'; 4 } 5 }
定义一个常量类,存储static final类型,便于类之间调用:Sys_Constants
1 public without sharing class Sys_Constants { 2 3 public static final String CATEGORY_PENCIL = 'pencil'; 4 5 public static final String CATEGORY_GEL_PEN = 'gelPen'; 6 7 }
工厂类,用于提供相应create方法创建Pen:PenFactory
1 public class PenFactory { 2 public static Pen create(String penCategory) { 3 Pen tempPen = null; 4 if(penCategory != null) { 5 if(penCategory.trim().equals(Sys_Constants.CATEGORY_PENCIL)) { 6 tempPen = new Pencil(); 7 } else if(penCategory.trim().equals(Sys_Constants.CATEGORY_GEL_PEN)) { 8 tempPen = new GelPen(); 9 } 10 } 11 return tempPen; 12 } 13 }
测试:在匿名块中进行工厂创建测试:
1 Pen pencil = PenFactory.create(Sys_Constants.CATEGORY_PENCIL); 2 if(pencil != null) { 3 System.debug(pencil.getPenName()); 4 } else { 5 System.debug('工厂创建铅笔失败'); 6 }
输出结果为:Pencil.
总结:设计模式与语言无关,其他设计模式理论上也可以适用于salesforce。具体哪种模式有什么好处,请自行查看相关设计模式的图书。
如果内容有错误的地方,希望大神指出,如果有问题可以留言。