【黑马程序员济南中心】工厂设计模式-简单工厂模式

【黑马程序员济南中心】工厂设计模式-简单工厂模式

过了一个年假,今天又和大家见面了,大家在过年期间终于可以好好的放松一下了,吃喝玩乐肯定是样样不少,不过我们接下来又要投入到紧张的工作和学习中了。今天和大家聊一聊工厂设计模式,这个在我们平常写项目时,出境频率比较高的设计模式。

工厂设计模式一共有3类,分别为简单工厂模式、工厂方法模式、抽象工厂模式。今天我们主要和大家聊一聊简单工厂模式。

我们来看看百度百科是怎么定义简单工厂模式的。

简单工厂模式:是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

简单工厂模式的优缺点:

优点:相对于直接在客户端创建对象并初始化对象的值来说,简单工厂模式将创建对象和初始化任务交给了工厂类,客户端只负责对对象的调用,从而明确了各个类的职责。

缺点:只使用一个工厂类来创建各具特色的所有类,当具体产品的种类不断增加,对创建的方式有所改变时就需要对这个工厂类进行不断的改变,增加相应的判断,增加相应的类的创建逻辑,导致工厂类的代码越来越庞大,不利于后期的维护。另外,简单工厂模式使用静态方法来创建对象,这样就导致这个创建对象的静态方法不能被继承,只能在这一个类里变得越来越臃肿。

总结:虽然简单工厂模式将对象的创建和初始化工作与客户端分离了,实现了责任的分配策略,但是所有对象的创建和初始化工作都集中到了一个具体的工厂类中,如果要创建的对象种类繁多,这个工厂类将非常庞大,不利于后期维护。

下边给大家看一看相关的示例代码:

1、抽象类

[java] view plain copy

1. package tong.day4_30.introduce;  

2. /** 

3.  * 定义一个薪资接口,所有模块的具体布局都实现这个接口,并重写布局方法

4.  */  

5. public interface Factory {  

6.     public void view();  

7. }  

2、具体类

[java] view plain copy

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] view plain copy

1. /** 

2.  * 实现发现页面布局 

3.  * 

4.  */  

5. public class Find implements Factory{  

6.     @Override  

7.     public void view() {  

8.         System.out.println("实现发现界面布局");  

9.     }  

10.   

11. }  

 

[java] view plain copy

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] view plain copy

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. }  

好了,上边就是简单工厂模式的具体应用,大家可以在闲暇时间了解一下,并熟练地运用到我们日常项目代码中。

转载于:https://my.oschina.net/u/3825479/blog/1799308

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值