简单工厂(Factory)-提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。
2010-11-25 15:40
1271 查看
工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
(1)Api定义的示例代码如下:
(2)定义了接口,接下来实现它。ImplA的示例代码如下:
ImplB的示意实现和ImplA基本一样。示例代码如下:
(3)下面来看看简单工厂的实现。示例代码如下:
(4)再来看看客户端的示意,示例代码如下:
示例代码转自:http://student.csdn.net/space.php?uid=1294199&do=blog&id=48256
(1)Api定义的示例代码如下:
/** * 接口的定义,该接口可以通过简单工厂来创建 */ public interface Api { /** * 示意,具体功能方法的定义 * @param s 示意,需要的参数 */ public void operation(String s); } |
/** * 接口的具体实现对象A */ public class ImplA implements Api{ public void operation(String s) { //实现功能的代码,示意一下 System.out.println("ImplA s=="+s); } } |
/** * 接口的具体实现对象B */ public class ImplB implements Api{ public void operation(String s) { //实现功能的代码,示意一下 System.out.println("ImplB s=="+s); } } |
/** * 工厂类,用来创建Api对象 */ public class Factory { /** * 具体创建Api对象的方法 * @param condition 示意,从外部传入的选择条件 * @return 创建好的Api对象 */ public static Api createApi(int condition){ //应该根据某些条件去选择究竟创建哪一个具体的实现对象, //这些条件可以从外部传入,也可以从其他途径来获取。 //如果只有一个实现,可以省略条件,因为没有选择的必要。 //示意使用条件 Api api = null; if(condition == 1){ api = new ImplA(); }else if(condition == 2){ api = new ImplB(); } return api; } } |
/** * 客户端,使用Api接口 */ public class Client { public static void main(String[] args) { //通过简单工厂来获取接口对象 Api api = Factory.createApi(1); api.operation("正在使用简单工厂"); } } |
相关文章推荐
- Factory 定义一个接口,客户可以使用这个接口创建一个对象.同时,我们还可以控制对那个类进行实例化
- Spring创建对象工厂功能的简单实现
- 创建接口(接口,提供其他人进行操作的一个入口就是将我们原来实现功能的程序删了写成那个接口让别人来实现功能,为他人提供操作我们这儿的一个入口)
- QuickCSharp框架开发(12)------实现一个具体的验证提供者工厂对象AuthenticationProviderFactory
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 实例化一个子类对象赋给父类对象引用或一个实现了接口的类的对象赋给接口的引用的好处
- TreeSet集合存放自定义类型的对象,可以使用比较器,实现Comparable接口自己设置排序方式
- (五)OpenCV提供一个功能强大的UI接口,可以在MFC、Qt、WinForms、Cocoa等平台下使用
- 如何才能学到Qt的精髓——信号槽之间的无关性,提供了绝佳的对象间通讯方式,QT的GUI全是自己的一套,并且完全开源,提供了一个绝好机会窥视gui具体实现
- 在创建实例变量的时候用Set,List,Map等接口声明类型而不是用具体的子类声明的原因之代码重构
- Java回顾:用一个Demo来说明继承抽象类和实现接口的简单框架模型
- 分享一个简单的unityAI框架,基于神经网络和遗传算法,可以简单的实现自成长的游戏对象
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- C# 实现简单打印(三)-认识打印控件,创建一个带打印功能的程序
- 用原生JS实现一个简单计算的功能实例
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 工厂模式定义:提供创建对象的接口.
- 自己在项目中的学习总结:利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口
- SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序
- XAF中如何实现Action创建一个可以编辑外连接对象的detail