+ 首页>>技能>>快速科普>>内容

技能[测试人也Code]JAVA-陶醉测者系列170次围观

背景

借着之前KIVEN的专题,最近闲来之时特来DiggerPlus上凑凑热闹,希望广大的测试从业者,尤其是专注于自动化的测友能够重视代码的世界,而不仅仅是停留在使用工具上来,由于笔者平日里使用JAVA居多,那么此系列仅通过JAVA代码来展现出一些经典的设计模式,也许您认为这些东西对于测试而言是不务正业,但是当你真的强制自己在工作中实践这些并因此而受益的时候,希望您可以将带有典型设计模式的封装放在github上,或者用这种思维去审视我们的被测对象,去审视我们的工作作风,去审视我们面对的世界!笔者也将在这个过程中与各位测友一起去学习,探讨,如果可能更希望看到开发的身影出现在这里。

上期回顾

上次由使用了V字仇杀队的主角头像的KIVEN给大家介绍了一个JAVA的经典模式—单例模式(如果考虑到JVM的性能开销和多线程共享对象的话,这个模式是非常有用处的),那么我们来回顾一下:

  • 什么是单例模式? 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,
    该对象只有一个实例的存在。
  • 这么做有什么好处呢?
  1. 某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
  2. 省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
  3. 对于一些通用的共享对象资源,我们不希望被实例化N次,否则可能会发生一些程序错乱的现象,在多线程的应用中同样需要考虑。

本期主题:工厂模式介绍

开始之前,您可能需要的一些预备知识:

  • JAVA 接口的概念? 为什么需要用接口来定义? 接口的定义格式?

普通工厂模式

只建立一个“工厂类”,对实现了同一个接口的一些接口实现类进行实例化创建的一个功能类。
关键字:一个类,只用来实现对象的实例化,对象通通为实现同一个接口的类对象
设计步骤:

  1. 创建接口
  2. 创建具体的实现类
  3. 创建工厂类

Demo Code:

  • 创建接口
public interface Tester {
  public void doTest();
}
  • 实现接口
public class FunctionTester implements Tester{
    @Override
    public void doTest() {
        System.out.println("I like doing functional test!"); 
    }
}

public class PerformanceTester implements Tester{
    @Override
    public void doTest() {
        System.out.println("I like doing performance test!"); 
    }
}

public class SercurityTester implements Tester{
    @Override
    public void doTest() {
        System.out.println("I like doing sercurity test!"); 
    }
}
  • 创建工厂类(主角)
public class BasicFactoryMode {
public Tester action(String testerRole){
     if("functiontester".equalsIgnoreCase(testerRole)){
         return new FunctionTester();
     }else if("performancetester".equalsIgnoreCase(testerRole)){
         return new PerformanceTester();
     }else if("sercuritytester".equalsIgnoreCase(testerRole)){
        return new SercurityTester();
     }else{
        System.err.println("Hi guys,we only have three kinds of " +
       "tester-FunctionTester,PerformanceTester,SercurityTester");
       return null; 
     } 
}
}
  • 测试一下
public class TestBasicFactoryMode {
public static void main(String[] args) {
    BasicFactoryMode factory = new BasicFactoryMode();
    Tester test1 = factory.action("FunctionTester");
    Tester test2 = factory.action("PerformanceTester");
    Tester test3 = factory.action("SercurityTester");
    test1.doTest();
    test2.doTest();
    test3.doTest();
    }
}
  • 测试运行结果

I like doing functional test!
I like doing performance test!
I like doing sercurity test!

  • 先回顾一下

你会发现,普通的工厂模式是把所有的实现类对象的实例化过程完全放在了一个工厂类下的同一个方法中进行的,那么从松耦合的原则来看,是不被欢迎的,那么接下来我们来改进一下。

多工厂方法模式

工厂类中,每一个实现了接口的类对象的实例化独立创建方法

关键字:一个对象实例创建一个方法

设计步骤(同普通工厂类一样的设计步骤,区别在于工厂类中实例化方法的设计):
创建接口
创建具体的实现类
创建工厂类

Demo code(只列出新工厂类的code和测试code,其他和普通工厂模式的code完全一样):

  • 创建工厂类(主角)
public class MultyFactoryMode {
public Tester instanceFunctionTester(){
    return new FunctionTester();
}
public Tester instancePerformanceTester(){
    return new PerformanceTester();
}
public Tester instanceSercurityTester(){
    return new SercurityTester();
}
}
  • 测试一下
public class TestMultyFacoryMode {
public static void main(String[] args) {
    MultyFactoryMode factory = new MultyFactoryMode();
    Tester test1 = factory.instanceFunctionTester();
    Tester test2 = factory.instancePerformanceTester();
    Tester test3 = factory.instanceSercurityTester();
    test1.doTest();
    test2.doTest();
    test3.doTest();
    }
}
  • 测试运行结果

I like doing functional test!
I like doing performance test!
I like doing sercurity test!

  • 补充一下,如果您在使用过程中将可能会经常需要实例化实现了接口的类对象的时候,不妨将工厂类的实例化方法设置成静态方法,修改方式见下:
public class MultyFactoryMode {
    public static Tester instanceFunctionTester(){
        return new FunctionTester();
    }
    
    public static Tester instancePerformanceTester(){
        return new PerformanceTester();
    }
    
    public static Tester instanceSercurityTester(){
        return new SercurityTester();
    }
}

OK,今天先介绍到这里,码完一堆字去开会去了,期待下次与各位见面。

+ 猜你喜欢...

===== 关于 DiggerPlus =====
DiggerPlus是国内新锐测试人垂直内容博客,专注于挖掘测试工具,普及测试技术,专注于测试人能力提升,博客上线后就受到广大测试人的热烈追捧;此外,DiggerPlus深度整合评测资源,揭秘科技数据和真相,让读者更懂科技,更好地把玩科技。 我们始终保持"独立,客观,严谨,优秀"的优良作风,努力为读者带来源源不断的优质内容。想访问更多酷毙的测试人网站?赶紧来DiggerPlus测试人网址导航看看吧!

===== DiggerPlus Team =====
DiggerPlus Team是DiggerPlus官方发起的团队,这是一群热爱科技,热爱测试,喜欢深度挖掘的热血测试人,他们是评测师,测试专家。 我们欢迎优秀的测试人加入DiggerPlus Team。 加入DiggerPlus,可以成为我们的认证Dper,认证Dper拥有DiggerPlus独一无二的专栏并得到个人展示。

===== DiggerPlus 官方读者群 =====
DiggerPlus官方读者群(一)

+ 关于本文作者

Python/C/C++/Javascript程序员,持续学习者,目前专注于前端开发。

的专栏 | 专栏作者 | 访问小A的主页

+ 已有8个评论

开源中国精彩推送

基于开源中国OpenAPI开发
  • Copyright © 2014 DiggerPlus. 96 queries in 1.637 seconds.
    使用合作网站账号快速登录,更多精彩等着您: 开源中国