工厂模式(一)

简单工厂的定义:提供一个创建对象实例的功能,而无需关心其具体实现。被创建实例的类型可以是接口、抽象类。类图如下:


抽象产品角色:
  所有产品的父类或是所有产品工有的接口。

1 //定义接口 此处也可以是个抽象类
2 public interface Api{
3         //公共接口方法
4     public void operation();
5 }

具体产品角色:
  继承或实现抽象产品角色。

给出两个实现方式:

1 //实现接口方式A
2 public class ImplA implements Api{
3     @Override
4     public void operation() {
5         //实现方式A代码
6     }
7 }
1 //实现接口方式B
2 public class ImplB implements Api{
3     @Override
4     public void operation() {
5         //实现方式B代码
6     }
7 }

工厂类角色:

  简单工厂模式核心,负责制造具体产品。

这里使用静态方法:

 1 public class Factory{
 2     /**
 3      * 创建具体对象
 4      * @param type 类型标识
 5      */
 6     public static Api createApi(String type){
 7         Api api = null;
 8         switch(type){
 9             case "A":
10                 api = new ImplA();
11                 break;
12             case "B":
13                 api = new ImplB();
14                 break;
15             //更多实现方式
16             ...
17         }
18         return api;
19     }
20 }

客户端代码:

1 public class Client{
2     public static void main(String[] args) {
3         //面向接口编程
4         Api api = Factory.createApi("A");
5         api.operation();
6     }
7 }

这样做的好处:

  1.客户端根本不需要直到具体实现是什么,也不需要知道如何实现,只知道工厂获得一个接口对象,然后通过这个接口获取想要的功能,达到所谓的面向接口编程。

  2.实现客户端与具体实现类的解耦。

缺点:不支持开闭原则。

posted @ 2017-05-29 12:38  夏虫语冰、  阅读(106)  评论(0编辑  收藏  举报