现在的位置: 首页 > 综合 > 正文

Java设计模式—简单工厂

2017年10月01日 ⁄ 综合 ⁄ 共 1625字 ⁄ 字号 评论关闭

转载自 :

原文作者: 泛型

原文地址: http://my.eoe.cn/flyhigher/archive/18225.html

先看一段书中的代码,类似的代码相信很多人、包括我都写过。因为作为初学者,对于接口的使用一般都会这样写。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
*一个接口、简单定义一个方法test(String str),输出给定   的字符串
*/
public interface Api {
    public void test(String str);
}

/**
*实现类,对接口Api的实现
*/
public class Impl implements Api {
    public void test(String str) {//实现方法test
        System.out.println("Now In Impl. The
                input str == " + str);
    }
}
//客户端
public class Client {
    public static void main(String[] args) {
        Api api = new Impl();
        api.test("........");   
    }
}

针对接口的调用,基本上所有人都这样写过: Api api = new Impl();,这样写完全没有语法错误,但是却背离的接口调用的出发点和思想。因为Impl作为具体的实现类,暴露给了客户端,客户端知道了功能的具体实现者是实现类Impl,这就破坏了“封装隔离”。

出于调用的需要,允许客户端知道接口,但不允许其知道接口的具体实现类,如何做到,可以给要调用的接口加层“外套”,外套内是要隐藏的细节,外套外是客户端,两者通过外套隔离。

1
打个比方:将一间只有一扇门,没有窗户的房子作为一个工厂车间,它与外界的唯一通道就那扇门。外界不知道车间如何生产产品,但可以通过那扇门取得产品并使用。回到设计模式中,“门”就是我们说的接口,“产品”就是接口定义而由实现类实现的方法,“房子”也就是车间,就是将外部调用与内部实现隔离开的隔离体。这就是简单工厂的思想。

定义: 提供一个创建对象实例功能但不需关心具体实现的类,返回创建类的接口,客户端通过该类得到返回的接口,进而可以调用接口的方法。(这个解释不够抽象,感觉是代码级别的,理解有待加深)

下面是简单工厂模式的示例代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//接口的定义 
public interface Api {
    public void operation(String s);
}
//接口的实现
public class Impl inplements Api {
    public void operation(String s) {
        System.out.println("s == " + s);
    }
}
//工厂类 创建Api对象,包装创建细节,返回Api对象
public class Factory {
    public static Api createApi() {
        Api api = null;
        api = new Impl();//与前一段代码相同
        return api;//返回创建的Api对象
    }
}
//客户端
public class Client {
    public static void main(String args[]) {
        Api api = Factory.createApi();//通过工厂类获得Api对象,但并不知道接口Api的具体实现是由Impl类完成的
//隐藏了实现的细节
        api.operation("简单工厂");
    }
}

在工厂类Factory中,通过实现类Impl实现Api接口,并返回得到的Api对象,对于客户端,想要使用operation()方法,只需要通过Factory类得到一个Api对象即可,对于接口Api的具体实现,是完全被隐藏的,这就将客户客户端的调用与接口的具体实现隔离开。达到封装隔离的目的。

上面的示例是只有一个实现类的简单示例,目的只是阐述简单工厂模式的思想,并未涉及简单工厂中其他知识。

抱歉!评论已关闭.