简单工厂模式
2015-07-08 10:34
260 查看
文章是看了网上《设计模式之禅》第二版的,和网上其他文章写出来的。
简单工厂模式的类图:
抽象产品类
可以是抽象类 可以是接口,主要看需求是用接口 还是用抽象类。
因为我们重点制造出不同肤色的人,所以我们需要一个接口或者抽象类来被他们实现或者继承。
Human(抽象产品类) 可以是接口或者抽象类
具体产品类
具体产品类这里是黑人,黄种人,白种人。代码实现如下:
工厂类
负责生成产品对象的。在这里,工厂类是HumanFactory,这里用到了静态方法生产产品,确切来说,这是一个 简单静态工厂模式。
简单工厂模式是通过 switch case (或者if elseif)来写分支的。这就是工厂模式的最大区别之处。
客户
这里客户是女娲.
简单工厂模式的类图:
抽象产品类
可以是抽象类 可以是接口,主要看需求是用接口 还是用抽象类。
因为我们重点制造出不同肤色的人,所以我们需要一个接口或者抽象类来被他们实现或者继承。
Human(抽象产品类) 可以是接口或者抽象类
[code]//Human.java public interface Human { void getColor(); void talk(); }
具体产品类
具体产品类这里是黑人,黄种人,白种人。代码实现如下:
[code]//BlackHuman.java public class BlackHuman implements Human { @Override public void getColor() { System.out.println("黑种人黑色皮肤"); } @Override public void talk() { System.out.println("说的是单字节语言"); } }
[code]//YellowHuman.java public class YellowHuman implements Human { @Override public void getColor() { System.out.println("黄种人***皮肤"); } @Override public void talk() { System.out.println("黄种人说的是双字节语言"); } }
[code]//WhiteHuman.java public class WhiteHuman implements Human { @Override public void getColor() { System.out.println("白人是白色皮肤"); } @Override public void talk() { System.out.println("白人说的是单字节语言"); } }
工厂类
负责生成产品对象的。在这里,工厂类是HumanFactory,这里用到了静态方法生产产品,确切来说,这是一个 简单静态工厂模式。
简单工厂模式是通过 switch case (或者if elseif)来写分支的。这就是工厂模式的最大区别之处。
[code]//HumanFactory.java public class HumanFactory { public static Human createHuman(int type){ Human human = null; switch (type) { case 1: human = new WhiteHuman(); break; case 2: human = new BlackHuman(); break; case 3: human = new YellowHuman(); break; } return human; } }
客户
这里客户是女娲.
[code]public class Nvwa { public static void main(String[] args) { System.out.println("--早出的第一批人是白色人种--"); Human whiteHuman = HumanFactory.createHuman(1); whiteHuman.getColor(); whiteHuman.talk(); System.out.println("--第二次 是黑色人种--"); Human blackHuman = HumanFactory.createHuman(2); blackHuman.getColor(); blackHuman.talk(); System.out.println("--最后 是***人种--"); Human yellowHuman = HumanFactory.createHuman(3); yellowHuman.getColor(); yellowHuman.talk(); } }
相关文章推荐
- 快速排序算法
- python初学-01数据类型
- 【Android】自定义View、画布Canvas与画笔Paint
- goole Advance client 离线安装
- 怎么设置(控制)移动端的字体大小
- Indy10 控件的使用(2)TidTCpServer组件学习
- D3 数据可视化实战 笔记
- 通过运行时来获取该注册类的所有子类
- 黑马程序员——OC—类和对象的使用
- ecmall安装报错
- java的一些总结(不定期更新)
- Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason:
- java 泛型
- 使用Spring Cache + Redis + Jackson Serializer缓存数据库查询结果中序列化问题的解决
- HDU 2896 病毒侵袭 (AC自动机)
- Android打开/关闭数据流量
- Gemfire集群配置服务的概述
- [异能程序员]第一章 酒后事发,上头条
- Makefile中wildcard的介绍
- 【转】Comet:基于 HTTP 长连接的“服务器推”技术