Effective Java(静态工厂与构造器二)
来源:互联网 发布:大数据先进技术研究院 编辑:程序博客网 时间:2024/05/17 02:38
从静态工厂说起,接前一篇的私有构造器,在网上查到的静态工厂方法并没有限制构造器的私有化,只是通过工厂方法来管理父类的子类。
简单工厂模式(又叫静态工厂模式)
主要由父类(抽象产品),子类(具体产品),工厂(创建对象)组成
以一个食物订购为例
父类:
/* * 产品抽象类 */public interface Food {//获得相应的食物public void get();}
/* * 麦香鸡对抽象产品接口的实现 */public class McChicken implements Food{//获取一份麦香鸡@Overridepublic void get() {// TODO Auto-generated method stubSystem.out.println("我要一份麦香鸡");}}
/* * 薯条对抽象产品的接口实现 */public class Chips implements Food {//获取一份薯条@Overridepublic void get() {// TODO Auto-generated method stubSystem.out.println("我想要一份薯条");}}
工厂:
public class FoodFactory {public static Food getFood(String type){if(type.equals("McChicken")){return new McChicken();}else if(type.equals("Chips")){return new Chips();}return null;}}
测试类:
public class FoodFactoryTest {private static Food mcChicken;private static Food chips;public static void main(String[] args) {mcChicken=FoodFactory.getFood("McChicken");chips=FoodFactory.getFood("Chips");if(mcChicken!=null){mcChicken.get();}if(chips!=null){chips.get();}}}
这里有一点要注意的是,多态的使用:前面工厂new的实例是子类,但返回的是父类,测试类用父类接收,然后调用方法。(当然了,测试类中的接收类也可以是子类,使用向下转型便可,结果一样)
这种方法看起来是很好的,但是对于每次新增一种子类,都要在工厂中去改写,违背了开闭原则,首先想到的是使用再写一个factory,那么就是使工厂抽象化,UML如下图所示
进一步,很多工厂就会区分工厂的种类,便有了抽象工厂
上面两种方法代码示例见http://www.cnblogs.com/zhangchenliang/p/3700820.html
参考:
http://blog.163.com/zhuowh2006@126/blog/static/10182372420133220511247/
http://blog.csdn.net/superbeck/article/details/4446177
0 0
- Effective Java(静态工厂与构造器二)
- Effective Java(静态工厂与构造器一)
- [Effective Java]考虑用静态工厂方法代替构造器
- Effective java-----用静态工厂方法取代构造器
- 《Effective Java》-考虑用静态工厂方法代替构造器
- 【effective java】考虑用静态工厂方法替代构造器
- Effective Java -- 用静态工厂方法来代替构造器
- effective java--关于静态工厂方法代替构造器
- Effective Java之静态工厂代替构造器(一)
- Effective.Java 读书笔记(1)静态工厂和构造方法
- effective--构造器和静态工厂方法
- Effective Java(1)考虑静态工厂方法代替构造器
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- 1、考虑用静态工厂方法代替构造器(effective java)
- 静态工厂方法跟公有构造器(Effective Java读后自我总结)
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- 《Effective Java》读书笔记01-静态方法与构造器
- 构造器与静态工厂
- Servlet开发(二)
- CocoaPods 命令和使用
- TCP/TP详解笔记1
- dfs连通块2
- [leetcode 刷题记录] 170. Two Sum III - Data structure design
- Effective Java(静态工厂与构造器二)
- GPT--->SSD:
- IOS开发者常用的10个Xcode插件
- 性能测试中关键指标的监控与分析
- fcntl详解
- IOS使用SMSSDK实现短信验证
- C++字符串和int的相互转换
- 欢迎使用CSDN-markdown编辑器
- Android使用MediaRecorder和Camera实现视频录制及播放功能整理