黑马程序员技术交流社区
标题: 【济南校区】浅谈设计模式-工厂设计模式-简单工厂模式 [打印本页]
作者: 小鲁哥哥 时间: 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. }
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 |