工厂模式(一)

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


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

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.实现客户端与具体实现类的解耦。

缺点:不支持开闭原则。

转载于:https://www.cnblogs.com/ergou/p/6917774.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值