Java设计模式---简单工厂
来源:互联网 发布:ecshop sql注入 编辑:程序博客网 时间:2024/09/21 09:18
先看一段书中的代码,类似的代码相信很多人、包括我都写过。因为作为初学者,对于接口的使用一般都会这样写。
/***一个接口、简单定义一个方法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,这就破坏了“封装隔离”。
出于调用的需要,允许客户端知道接口,但不允许其知道接口的具体实现类,如何做到,可以给要调用的接口加层“外套”,外套内是要隐藏的细节,外套外是客户端,两者通过外套隔离。
打个比方:将一间只有一扇门,没有窗户的房子作为一个工厂车间,它与外界的唯一通道就那扇门。外界不知道车间如何生产产品,但可以通过那扇门取得产品并使用。回到设计模式中,“门”就是我们说的接口,“产品”就是接口定义而由实现类实现的方法,“房子”也就是车间,就是将外部调用与内部实现隔离开的隔离体。这就是简单工厂的思想。
定义: 提供一个创建对象实例功能但不需关心具体实现的类,返回创建类的接口,客户端通过该类得到返回的接口,进而可以调用接口的方法。(这个解释不够抽象,感觉是代码级别的,理解有待加深)
下面是简单工厂模式的示例代码:
//接口的定义 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的具体实现,是完全被隐藏的,这就将客户客户端的调用与接口的具体实现隔离开。达到封装隔离的目的。
上面的示例是只有一个实现类的简单示例,目的只是阐述简单工厂模式的思想,并未涉及简单工厂中其他知识。
转裁地址:http://my.eoe.cn/flyhigher/archive/18225.html
- java 简单工厂设计模式
- JAVA设计模式--简单工厂
- Java简单工厂设计模式
- Java设计模式---简单工厂
- Java设计模式---简单工厂
- java简单工厂设计模式
- java设计模式--简单工厂
- java设计模式----简单工厂
- java简单工厂设计模式
- java--简单工厂设计模式
- java简单工厂设计模式
- java简单工厂设计模式
- Java设计模式--工厂模式(简单工厂+工厂方法)
- Java设计模式-工厂模式(简单工厂+工厂方法)
- java设计模式之简单工厂模式
- java设计模式之简单工厂模式
- java设计模式之简单工厂模式
- JAVA设计模式 — 简单工厂模式
- 假如给我三天光明
- object-c之继承
- 内存管理-高端内存
- android 同时发送几条通知
- 蓝牙协议的命令和事件
- Java设计模式---简单工厂
- stm32 学习--创建项目
- 用Java 获得Access 数据库中的所有表名
- Android 使用 Intent 发送 email
- Android中Bitmap, Drawable, Byte,ID之间的转化
- PostgreSQL 类型转换
- ZooKeeper系列之二:Zookeeper常用命令
- 第十一周项目3-1-10000以内的回文数
- 人生