乐趣区

关于设计模式:设计模式21-简单工厂模式怎么演变成工厂方法模式

还记得后面的简略工厂模式么?咱们开了一个水果工厂 FruitFactory, 生产三种水果 ApplePearOrange。明天给大家讲讲工厂办法模式:

老板搞水果工厂赚了点小钱,筹备扩充生产,每个工厂生产一种水果,各司其职,而不是把所有的产品类型都放到一个工厂中。

既然有多工厂,那咱们和之前一样,搞一个水果工厂类 FruitFactory, 把它搞成接口类。

import factory.Fruit;
public interface FruitFactory {public Fruit getFruit();
}

水果类的定义还是一样,定义一个水果接口 Fruit:

public interface Fruit {public void process();
}

水果别离如下, 我间接写到一块去了:

public class Apple implements Fruit {public void process() {System.out.println("I am an Apple");
    }
}
public class Pear implements Fruit {public void process() {System.out.println("I am a Pear");
    }
}
public class Orange implements Fruit {public void process() {System.out.println("I am an Orange");
    }
}

既然有多个工厂。那咱们别离定义多个工厂,对水果工厂类做不同的实现,别离生产苹果,雪梨,橙子。

public class AppleFactory implements FruitFactory {public Fruit getFruit(){return new Apple();
    }
}
public class PearFactory implements FruitFactory {public Fruit getFruit(){return new Pear();
    }
}
public class OrangeFactory implements FruitFactory {public Fruit getFruit(){return new Orange();
    }
}

测试代码如下:

public class FruitTest {public static void main(String[] args) {FruitFactory appleFactory = new AppleFactory();
        Fruit apple = appleFactory.getFruit();
        apple.process();

        FruitFactory pearFactory = new PearFactory();
        Fruit pear = pearFactory.getFruit();
        pear.process();}
}

运行后果:

I am an Apple
I am an Pear

下面的写法,如果后续还有生产不同的水果,或者不同的水果工厂,绝对容易拓展。总结一下,工厂办法模式一共有以下的角色:

  • 形象工厂:提供了创立产品的接口,调用者通过它拜访具体工厂的工厂办法 getFruit() 来创立水果产品。
  • 具体工厂:次要是实现形象工厂中的形象办法,创立具体的产品。
  • 形象产品:定义了产品标准,比方所有的水果独特的个性。
  • 具体产品:实现了形象产品角色所定义的接口,由具体工厂来创立,它同具体工厂之间一一对应。

那么工厂办法模式,绝对简略工厂模式,有什么区别呢?
工厂办法模式,一种工厂对应一种产品,各司其职,如果产品很多的话,不便离开保护,特地是那种创立产品比较复杂的场景,而产品类型又比拟多,这样就会显得很臃肿。

然而如果产品很少,而且创立过程绝对简略的时候,感觉简略工厂模式曾经足够,不须要特意为了应用一种设计模式而应用它,适度设计会带了很多不必要的麻烦。

【作者简介】
秦怀,公众号【 秦怀杂货店 】作者,技术之路不在一时,山高水长,纵使迟缓,驰而不息。这个世界心愿所有都很快,更快,然而我心愿本人能走好每一步,写好每一篇文章,期待和你们一起交换。

退出移动版