什么是工厂模式
工厂模式专门负责实例化有大量公共接口的类。工厂模式可以动态地决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。客户类和工厂类是分开的。消费者无论什么时候需要某种产品,需要做的只是向工厂提出请求即可。消费者无须修改就可以接纳新产品。当然也存在缺点,就是当产品修改时,工厂类也要做相应的修改。
简单工厂模式
简单工厂模式的工厂类是根据提供给它的参数,返回的是几个可能产品中的一个类的实例,通常情况下,它返回的类都有一个公共的父类和公共的方法。
简单工厂模式的设计类图如下
其中,Product为待实例化类的基类,它可以有多个子类;Simple Factory类中提供了实例化Product的方法,这个方法可以根据传入的参数动态地创建出某一类型产品的对象。
简单工厂模式代码实现
我们以网上一位同学的代码为例,设计不同口味的冰激凌。
- 首先定义一个冰激凌接口,里边只有一个方法,就是显示是哪种口味
public interface IceCream {
public void taste();
}
- 定义三个类,AppleIceCream、BananaIceCream、OrangeIceCream,并继承上面的接口,实现其中的方法。显示自己独特的口味
public class AppleIceCream implements IceCream {
public void taste(){
System.out.println("这是苹果口味的冰激凌");
}
}
public class BananaIceCream implements IceCream {
public void taste() {
System.out.println("这是香蕉口味的冰激凌");
}
}
public class OrangeIceCream implements IceCream{
public void taste(){
System.out.println("这是橘子口味的冰激凌");
}
}
- 定义一个工厂类,用来制作不同口味的冰激凌
public class IceCreamFactory {
public static IceCream creamIceCream(String taste){
IceCream iceCream = null;
// 这里我们通过switch来判断,具体制作哪一种口味的冰激凌
switch(taste){
case "Apple":
iceCream = new AppleIceCream();
break;
case "Orange":
iceCream = new OrangeIceCream();
break;
case "Banana":
iceCream = new BananaIceCream();
break;
default:
break;
}
return iceCream;
}
}
- 最后看一下客户端的代码
public class Client {
public static void main(String[] args) {
IceCream appleIceCream = IceCreamFactory.creamIceCream("Apple");
appleIceCream.taste();
IceCream bananaIceCream = IceCreamFactory.creamIceCream("Banana");
bananaIceCream.taste();
IceCream orangeIceCream = IceCreamFactory.creamIceCream("Orange");
orangeIceCream.taste();
}
}