JAVA设计模式——简单工厂
程序员文章站
2022-05-18 18:23:27
工厂模式分为三种:简单工厂模式,工厂方法模式,抽象工厂模式。我看有的书上和有的文章里是分为两种,没有简单工厂。 工厂模式主要的作用是:一个对象在实例化的时候可以选择多个类,在实例化的时候根据一些业务规则来选择实例化哪个类。 1.先定义一个图形接口,有一个画方法 2.再创建两个实现接口的实体类 3.创 ......
工厂模式分为三种:简单工厂模式,工厂方法模式,抽象工厂模式。我看有的书上和有的文章里是分为两种,没有简单工厂。
工厂模式主要的作用是:一个对象在实例化的时候可以选择多个类,在实例化的时候根据一些业务规则来选择实例化哪个类。
1.先定义一个图形接口,有一个画方法
public interface shape { void draw(); }
2.再创建两个实现接口的实体类
public class rectangle implements shape { @override public void draw() { system.out.println("画长方形。"); } }
public class square implements shape { @override public void draw() { system.out.println("画正方形。"); } }
3.创建一个工厂,生成基于给定信息的实体类的对象
public class shapefactory { //使用 createshape 方法获取形状类型的对象 public shape createshape(string shapetype) { if (shapetype == null) { return null; } if (shapetype.equalsignorecase("rectangle")) { return new rectangle(); } else if (shapetype.equalsignorecase("square")) { return new square(); } return null; } }
4.使用该工厂,通过传递类型信息来获取实体类的对象。
public class simplefactorypatterndemo { public static void main(string[] args) { shapefactory shapefactory = new shapefactory(); //获取 rectangle 的对象,并调用它的 draw 方法 shape shape1 = shapefactory.createshape("rectangle"); //调用 rectangle 的 draw 方法 shape1.draw(); //获取 square 的对象,并调用它的 draw 方法 shape shape2 = shapefactory.createshape("square"); //调用 square 的 draw 方法 shape2.draw(); } }
输出:
画长方形。
画正方形。
这里shape接口声明的变量既可以用rectangle实例化,也可以用square实例化。shapefactory就是一个工厂,去决定怎么实例化。
这个模式的缺点是对“开-闭”原则的支持不够。如果要新加一个“产品”,比如新加一个实现shape的圆形类,要在工厂里使用这个圆形类的话,需要去修改shapefactory工厂的代码。
那么应该怎么解决这个缺点,下篇工厂方式模式就是解决这个问题。
下一篇: 创建型设计模式对比总结 设计模式(八)