工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。
以鞋子为例
鞋子接口
public interface ShoesInterface {
//实现了鞋子
public void draw();
}
实现鞋子接口,有红鞋子、黑鞋子
用输出语句来代表其中操作
public class RedShoes implements ShoesInterface {
@Override
public void draw() {
System.out.println("----红色的鞋子----");
}
}
public class BlackShoes implements ShoesInterface {
@Override
public void draw() {
System.out.println("----黑色的鞋子-----");
}
}
鞋子工厂,根据不同的key创建不同的鞋子(即实例化不同鞋子类)
public class ShoesFactory {
public ShoesInterface getShoes(String key){
if("red".equals(key)){
return new RedShoes();
}else if ("black".equals(key)){
return new BlackShoes();
}
return null;
}
}
测试类
public class SunnyTest {
public static void main(String[] args) {
//普通方法实例化红鞋子类
ShoesInterface red =new RedShoes();
red.draw();
//通过工厂模式
ShoesFactory factory =new ShoesFactory();
ShoesInterface red2 =factory.getShoes("red");
red2.draw();
}
}
简单工厂的优点/缺点:
- 优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
- 缺点:很明显工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则