当前位置: 移动技术网 > IT编程>开发语言>Java > java接口工厂模式理解

java接口工厂模式理解

2018年08月23日  | 移动技术网IT编程  | 我要评论

  作为实际java开发经验还不到一年的我,第一次写博客,诚惶诚恐,怕把自己的谬误公之于众,误人子弟,不过转念一想,若是能有同行加以指点评判,将他们的真知灼见描述出来,那这篇文章就算抛转引玉了。

   最近在阅读《java编程思想》有关接口的最后一小节中,作者提出了工厂设计模式,用来解决---生成实现某个接口的对象。说实话,对设计模式近乎一无所知的我,看到这里会想,这也太简单了,脑子里不假思索的会写出这样一个例子:

 1 //气
 2 interface air{
 3   void show();
 4 }
 5 
 6 //悟空
 7 class wukong implements air{
 8   @override
 9   public void show() {
10       system.out.println("悟空:龟派气功");
11   }
12 }
13 
14 public class test {
15   public static void main(string[] args) {
16       air wk = new wukong();
17       wk.show();
18   }
19 }

 

  联想到书中提到的工厂设计模式,我这时就会想:这个模式的设计目的是什么?在什么情况下用它能发挥模式的作用?怎么写出这个模式,而不纯粹靠背的?

  1.书中的解释看的不太明白,后台在网上找了一个通俗易懂的解释:工厂设计模式是为了将对象的创建与使用进行分离。上面例子中创建了悟空对象,随机就调用了show() ,而这种模式就是在悟空对象创建和使用这两个环节中做文章。思路弄明白了,超级简单。本来流程是:生成对象a-->a.m();演变成生成工厂类b,b中的方法n(),可以生成对象a,然后a.m()。看看代码:

interface air{
   void show();
 }
 //悟空
class wukong implements air{
   @override
   public void show() {
       system.out.println("悟空:龟派气功");
   }
 }
//悟空工厂类,目的很单纯,就为了创建悟空对象 
class wukongfactory{
     public air getair(){
         return new wukong();
     }
 }
public class test {
   public static void main(string[] args) {
//     air wk = new wukong();
//     wk.show();
       /**
        * 随着引入工厂类,调用show方法也做了些调整,先创建悟空工厂类对象factory,
        * 重点来了,new wukong()的操作被封装到了getair()里面。
        * 试想这样一种情景:main()方法我们不改动它,可以自己新增修改其他类,
        * 在这种情况下:我们可以修改getair()方法,来return任何包含有show()方法的对象(也就是实现air接口),
        * 从而让下面的代码输出不同的结果。很显然,注释的那两行代码玩不出这种花样。
        */
       wukongfactory factory = new wukongfactory();
       factory.getair().show();
       
   }
 }

 

  来,我们来验证一下,在main()方法不变的情况下,我们新增一个实现air接口的八戒类,看看效果:

//悟空工厂类,目的很单纯,就为了创建悟空对象 
class wukongfactory{
     public air getair(){
         //注意:这里不再是new wukong()
         return new bajie();
     }
 }
//八戒
class bajie implements air{
    @override
    public void show() {
        system.out.println("八戒:猪猪乾坤屁");
    }
}

 

  这时factory.getair()创建的是八戒对象,于是产生了不同的结果。还有一点优化:针对wukongfactory这个getair()方法,其实是这个模式的核心方法,它就是为了创建你想要解耦的那个对象的实例,可以如书中的例子一样,把它抽离出来,封装成一个接口,想创建悟空或八戒对象时,就实现这个接口,重写方法创建你想要的对象。

interface factory{
    air getair();
}
class wukongfactory implements factory{
    @override
    public air getair() {
        return new wukong();
    }
}
class bajiefactory implements factory{
    public air getair() {
        return new bajie();
    }
}

  

  走笔至此,工厂方法设计模式的理解,我也就只能讲这么多,由于开发经验太单薄,而且我也处于正在学习java的阶段,所以我没能举出在实际项目中运用这种模式的鲜活案例(有用到这种模式的朋友们希望能分享一下)。不过,这种模式的理解之后,还是比较简单的,绕的弯也就那么一道而已。同时,我在继续看这本书时,以后也会多写博客,整理一下心得,与大家共享。

  

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网