① 简单工厂模式(Simple Factory Pattern)
简介:
工厂模式是Java中最常用的设计模式之一,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
实现方法:
- 创建一个接口和一个工厂类,不同子类同时实现这个接口。
- 在工厂类中可以定义创建对象的方法。
- 在不同的条件下我们可以通过传入不同的参数调用工厂类中方法来创建不同实例。
优点:
- 一个调用者想创建一个对象,只要知道其名称就可以了。
- 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
- 屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:
每次增加一个产品时,都需要修改对象实现工厂中的方法,使所有对象的实现都依赖于同一个工厂,增加了代码的耦合度。
使用场景:
- 例:设计一个服务器框架需要"POP3"、“IMAP”、"HTTP"三个协议,可以把这三个协议作为产品类,共同实现一个接口。
注意事项:
作为一种创建型模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过new就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
图形实现:
代码实现:
Color.java:
//创建Color接口
public interface Color {
//定义show()方法
void show();
}
Red.java:
public class Red implements Color{
@Override
public void show() {
System.out.println("表现红色!");
}
}
Green.java:
public class Green implements Color{
@Override
public void show() {
System.out.println("表现绿色!");
}
}
Yellow.java:
public class Yellow implements Color{
@Override
public void show() {
System.out.println("表现黄色!");
}
}
ColorFactory.java:
public class ColorFactory {
//定义getColor()方法,方法完成实例的创建
public Color getColor(String colorType) {
if (colorType == null) {
return null;
}
if (colorType.equalsIgnoreCase("RED")) {
return new Red();
} else if (colorType.equalsIgnoreCase("GREEN")) {
return new Green();
} else if (colorType.equalsIgnoreCase("YELLOW")) {
return new Yellow();
}
return null;
}
}
FactoryPatternDemo.java:
public class FactoryPatternDemo {
public static void main(String[] args) {
//创建工厂类对象来调用工厂类中的方法
ColorFactory colorFactory = new ColorFactory();
//通过调用工厂类方法创建红色对象
Color color1 = colorFactory.getColor("RED");
color1.show();//输出表现红色!
//通过调用工厂类方法创建红色对象
Color color2 = colorFactory.getColor("GREEN");
color2.show();//输出表现绿色!
//通过调用工厂类方法创建红色对象
Color color3 = colorFactory.getColor("YELLOW");
color3.show();//输出表现黄色!
//同一接口的不同实现类调用同一方法,返回了不同响应,表现出了面向对象编程的多态性。
}
}
主线程main()执行结果:
表现红色!
表现绿色!
表现黄色!