设计模式(工厂方法)
来源:互联网 发布: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
- 工厂方法(设计模式)
- 设计模式(工厂方法)
- 设计模式(工厂方法)
- 设计模式--工厂模式(工厂方法、抽象工厂)
- 设计模式 - 工厂模式(简单,工厂方法,抽象工厂)
- Java设计模式--工厂模式(简单工厂+工厂方法)
- Java设计模式-工厂模式(简单工厂+工厂方法)
- 设计模式(二)工厂方法模式+抽象工厂模式
- 设计模式(四)工厂模式-工厂方法模式
- 设计模式(3)-工厂方法模式
- 设计模式:工厂方法模式(Python)
- 设计模式(2):工厂方法模式
- 设计模式(四) ---- 工厂方法模式
- 设计模式(2):工厂方法模式
- 设计模式(五):工厂方法模式
- 设计模式(二)---工厂方法模式
- 设计模式(2):工厂方法模式
- 设计模式(2):工厂方法模式
- CentOS中修改默认runlevel
- 169. Majority Element Easy
- 原码、反码与补码
- 买糖果
- threejs对象拾取
- 设计模式(工厂方法)
- 关于为啥要开博客
- PHP及其微信公众号开发(学习之路三)
- 【Nginx 配置】 SSI
- 【蓝桥杯】算法提高 夺宝奇兵
- 当position=static(默认)时,offset()和position()并不一样
- listview多条目类型适配
- EJB事务管理
- 【Nginx 配置】完整信息