设计模式(工厂方法)

来源:互联网 发布:java 内存泄露常见场景 编辑:程序博客网 时间:2024/06/05 18:13

工厂模式:我觉得工厂模式就是第三方模式。当客户端需要实现某些功能时,根据前面讲到的 依赖接口编程原则和不能依赖实现类编程。所以现在就出现一个问题,我需要调用实现类的功能,我又不能直接调用,那我怎么办? 只能通过第三方工厂模式来帮忙调用。那么接口是干什么的?我觉得接口就是用来说明 有那些功能你是可以实现的。当我们具体要用的时候就去找工厂方法。下面是代码实例

接口

public interface BookApi {    public abstract void t1();}

实现类1

import cn.hncu.pattern.factory.book.BookApi;public class BookImpl1 implements BookApi {    @Override    public void t1() {        System.out.println("图书模块的功能:book111111111111111");    }}

实现类2

import cn.hncu.pattern.factory.book.BookApi;public class BookImpl2 implements BookApi {    @Override    public void t1() {        System.out.println("修改后的图书模块功能222222222222");    }}

工厂方法

import cn.hncu.pattern.factory.book.impl.BookImpl1;import cn.hncu.pattern.factory.book.impl.BookImpl2;//工厂的本质是:选择实现public class BookApiFactory {    private BookApiFactory(){    }    //工厂方法----命名规范: getInstance, getBookApi, createBookApi//  public static BookApi getBookApi(){//      return new BookImpl2();//  }    //工厂方法--版本2    public static BookApi getBookApi( ){        int type = 2; //"从配置文件读取type值"        if(type==1){            return new BookImpl1();        }else if(type==2){            return new BookImpl2();        }else{//加入了原来没有的类            try {                Class c = Class.forName("通过配置文件获取类名");//通过dir.list()更活                return (BookApi) c.newInstance();            } catch (Exception e) {                e.printStackTrace();            }            return null;        }    }}

客户端调用代码

//当前模块只依赖了book模块的: 工厂+接口public class Client {    public static void main(String[] args) {        //此处不能够依赖实现类,即实现类是隐藏的---因为实现类是封装在模块module内部隐藏,不对外开放        //解决办法: 通过工厂类得到接口        BookApi bookApi = BookApiFactory.getBookApi();        bookApi.t1();    }}
0 0