salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用

提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在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。具体哪种模式有什么好处,请自行查看相关设计模式的图书。

如果内容有错误的地方,希望大神指出,如果有问题可以留言。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jed的技术阶梯

Java设计模式之工厂方法模式

女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风...

1282
来自专栏我杨某人的青春满是悔恨

Swift API 设计指南(下)

一般来说,默认参数比方法族(method families)更可取,因为它减轻了 API 使用者的认知负担。

622
来自专栏函数式编程语言及工具

泛函编程(0)-什么是泛函编程

 什么是泛函编程(Functional Programming)?泛函编程就是用函数编写程序。这个回答太抽象,等于没说。 再说清楚一点:泛函编程就想砌积木一样把...

1978
来自专栏calmound

CSU 1326: The contest(分组背包)

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1326 题意:       n个题目,每个题目都有一个价值P...

2826
来自专栏Lambda

JavaScript排序算法详解

JS家的排序算法 引子 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements JavaScript. 当年,想凭借抱Java大腿火一把...

2668
来自专栏专知

【Leetcode 303】关关的刷题日记67–Leetcode 303 Range Sum Query – Immutable

关关的刷题日记67 – Leetcode 303 Range Sum Query – Immutable 题目 Given an integer array n...

2908
来自专栏海天一树

NOIP 2018普及组初赛C/C++答案详解

1 D 打印机是把电脑里的资料打印到纸上,所以是输出设备。 扫描仪、键盘和鼠标都是往电脑里输入东西,是输入设备。

1853
来自专栏专注数据中心高性能网络技术研发

[LeetCode]String主题系列{第5,6题}

1.内容介绍 本篇文章记录在leetcode中String主题下面的题目和自己的思考以及优化过程,具体内容层次按照{题目,分析,初解,初解结果,优化解,优化解结...

3257
来自专栏小詹同学

【记录帖】(No.002)从零打卡刷Leetcode

小詹一直觉得自己编程能力不强,想在网上刷题,又怕不能坚持。不知道有木有和小伙伴和小詹一样想找个人一起刷题呢?欢迎和小詹一起定期刷leetcode,每周一周五更新...

1234
来自专栏BaronTalk

Java8新特性第3章(Stream API)

Stream作为Java8的新特性之一,他与Java IO包中的InputStream和OutputStream完全不是一个概念。Java8中的Stream是对...

35410

扫码关注云+社区