黑马程序员技术交流社区

标题: 【济南校区】浅谈设计模式-工厂设计模式-简单工厂模式 [打印本页]

作者: 小鲁哥哥    时间: 2018-3-2 11:43
标题: 【济南校区】浅谈设计模式-工厂设计模式-简单工厂模式
本帖最后由 小鲁哥哥 于 2018-3-9 12:55 编辑

【济南校区】浅谈设计模式-工厂设计模式-简单工厂模式

过了一个年假,今天又和大家见面了,大家在过年期间终于可以好好的放松一下了,吃喝玩乐肯定是样样不少,不过我们接下来又要投入到紧张的工作和学习中了。今天和大家聊一聊工厂设计模式,这个在我们平常写项目时,出境频率比较高的设计模式。
工厂设计模式一共有3类,分别为简单工厂模式、工厂方法模式、抽象工厂模式。今天我们主要和大家聊一聊简单工厂模式。
我们来看看百度百科是怎么定义简单工厂模式的。
简单工厂模式:是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
简单工厂模式的优缺点:
优点:相对于直接在客户端创建对象并初始化对象的值来说,简单工厂模式将创建对象和初始化任务交给了工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。
缺点:只使用一个工厂类来创建各具特色的所有类,当具体产品的种类不断增加,对创建的方式有所改变时就需要对这个工厂类进行不断的改变,增加相应的判断,增加相应的类的创建逻辑,导致工厂类的代码越来越庞大,不利于后期的维护。另外,简单工厂模式使用静态方法来创建对象,这样就导致这个创建对象的静态方法不能被继承,只能在这一个类里变得越来越臃肿。
总结:虽然简单工厂模式将对象的创建和初始化工作与客户端分离了,实现了责任的分配策略,但是所有对象的创建和初始化工作都集中到了一个具体的工厂类中,如果要创建的对象种类繁多,这个工厂类将非常庞大,不利于后期维护。
下边给大家看一看相关的示例代码:
1、抽象类
[Java] 纯文本查看 复制代码

/**
* 定义一个薪资接口,所有模块的具体布局都实现这个接口,并重写布局方法
*/  
public interface Factory {  
public void view();  
}  
2、具体类
[Java] 纯文本查看 复制代码
1. /** 
2.  * 实现主业界面
3.  *
4.  */  
5. public class Home implements Factory {  
6.   
7.     @Override  
8.     public void view() {  
9.         System.out.println("主页界面的布局");  
10.   
11.     }  
12.   
13.      
14. }  
[Java] 纯文本查看 复制代码
1. /** 
2.  * 实现发现页面布局
3.  *
4.  */  
5. public class Find implements Factory{  
6.     @Override  
7.     public void view() {  
8.         System.out.println("实现发现界面布局");  
9.     }  
10.   
11. }  
[Java] 纯文本查看 复制代码
1. /** 
2.  * 实现我的界面布局
3.  *
4.  */  
5. public class MyHome implements Factory {  
6.   
7.     @Override  
8.     public void view() {  
9.         System.out.println("实现我的界面布局");  
10.   
11.     }  
12.   
13.      
14. }  
3、简单工厂类
[Java] 纯文本查看 复制代码
1. /** 
2.  * 简单工厂类负责所有对象的创建和对象的初始化,这里采用java中的反射机制,根据传入的参数来创建类的对象  *
3.  */  
4. public class SimpleFactory {      
5.     //根据参数创建对象,这是一个静态方法可以直接使用类名调用  
6.     public static Factory createFactory(String name) {  
7.         Class<Factory> clazz = null;  
8.         Factory factory= null;  
9.         try {  
10.             //利用反射机制获取该参数对应的类的对象  
11.             clazz = (Class<Factory>) Class.forName(name);  
12.             //使用此类对象创建对应的薪资类对象,这里使用父类指针指向子类对象,实现了多态  
13.             salary = (Factory)clazz.newInstance();  
14.         } catch (ClassNotFoundException e1) {  
15.             // TODO Auto-generated catch block  
16.             e1.printStackTrace();  
17.         }catch (InstantiationException | IllegalAccessException e) {  
18.               
19.             e.printStackTrace();  
20.         }  
21.         return factory;  
22.     }  
23.   
24. }
好了,上边就是简单工厂模式的具体应用,大家可以在闲暇时间了解一下,并熟练地运用到我们日常项目代码中。
【黑马程序员济南】小鲁哥哥全学科技术整合帖(一贴在手!天下我有!)

如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
     黑马程序员济南中心联系电话:0531-55696830



作者: Yin灬Yan    时间: 2018-3-2 13:13
我来占层楼啊   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2