欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java接口工厂模式理解

程序员文章站 2022-04-04 15:00:32
作为实际java开发经验还不到一年的我,第一次写博客,诚惶诚恐,怕把自己的谬误公之于众,误人子弟,不过转念一想,若是能有同行加以指点评判,将他们的真知灼见描述出来,那这篇文章就算抛转引玉了。 最近在阅读《Java编程思想》有关接口的最后一小节中,作者提出了工厂设计模式,用来解决 生成实现某个接口的对 ......

  作为实际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的阶段,所以我没能举出在实际项目中运用这种模式的鲜活案例(有用到这种模式的朋友们希望能分享一下)。不过,这种模式的理解之后,还是比较简单的,绕的弯也就那么一道而已。同时,我在继续看这本书时,以后也会多写博客,整理一下心得,与大家共享。