设计模式之简单工厂
来源:互联网 发布:虚拟机安装mac 内存 编辑:程序博客网 时间:2024/05/16 07:31
1.简介
简单工厂又称静态工厂,功能是提供一个创建对象的实例功能,而无须关系心其具体的实现.
2.结构
如上图所示,由几部分组成:客户端:Client工厂类:AppleFactory苹果组件:Apple,RedApple,GreenApple
3.产生问题
请看下面的实例:Apple apple = new RedApple();这个类创建有问题吗?当然没有,也只能说在代码层面没有问题!仔细想想,new RedApple()是有问题的!接口的思想是"封装隔离",客户端根本不应该知道具体的实现方式RedApple!问题来了:在Java编程中,出现只知接口不只实现,怎么办?要使用apple接口的API,但是不知如何实现,怎么办?
解决方案:
使用简单工厂解决,简单工厂解决的是如何获取接口的实现类,并且隐藏实现;新建一个类,在这个类里面来创建接口实现,然后把创建好的接口实现返回给客户端,外部应用只需要根据这个接口来获取相应的接口对象;
4.代码实现
1.创建苹果接口
public interface Apple { public void get(String name);}
2.创建红苹果
public class RedApple implements Apple { @Override public void get(String name) { System.out.println("获取红苹果,我的名字叫:" + name); }}
3.创建绿苹果
public class GreenApple implements Apple { @Override public void get(String name) { System.out.println("获取绿苹果,我的名字叫:" + name); }}
4.创建工厂类
/** * 苹果工厂 * * @author ww * */public class AppleFactory { public static Apple newInstance(int type) { if (type != 1 && type != 2) throw new RuntimeException("没有这种类型的苹果!"); if (type == 1) return new RedApple(); else return new GreenApple(); }}
5.创建客户端
public class Client { public static void main(String[] args) { // 要改造的是new 相关的东西,因为new相关的是有问题的,客户端不应该知道如何实现 Apple apple = AppleFactory.newInstance(1); apple.get("red apple"); apple = AppleFactory.newInstance(2); apple.get("green apple"); // 报错;没有此种类型的苹果 apple = AppleFactory.newInstance(3); }}
5.简单工厂主要实现的功能
选择合适的实现类
既然要实现选择,那么就需要选择的条件或选择的参数,选择条件或参数的来源通过又有以下几种:
来源于客户端,由Client传入参数
来源于配置文件,从配置文件获取用于判断的值;
来源于程序运行期的某个值,比如从缓存中获取某个运行期的值
简单工厂最主要的就是选择实现方式,创建对象其实是简单的,本文用的是客户端传入参数,其它同学可以试试用读取配置文件的方式实现!
3 0
- 设计模式 之简单工厂+ 工厂模式
- 设计模式 之 简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂.
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 无题之二
- Linux基础(12)/Linux下软件安装
- 多渠道打包-友盟统计
- 56. Merge Intervals
- 解决PCB设计中下载电路CH340连接不上电脑的问题
- 设计模式之简单工厂
- VS 2008 可扩展性开发(八):关于用户界面的种种(上)
- 图片加载-Glide,Picasso,Fresco区别
- C语言 十进制数转化成十六进制代码:
- 有关break的用法多种语言(C,C++,Java,C#,Python)
- Redis、Memcache和MongoDB的区别
- linux下文件的创建时间、访问时间、修改时间和改变时间
- 阿修罗监控, asura监控, asuramonitor
- VM虚拟机中Linux扩展磁盘空间的方法