设计模式原理及应用·简单工厂模式
这个模式比较简单,平常也基本不用,见得最多的也就是读spring框架源码时候。
写这个总是提不起精神,写得不好,去看这个吧:
模式名和分类
-
模式名:xxxFactory
-
分类:创建型模式
意图
将对象与它的创建,交给别人去做
别名
无
动机
将对象的创建与业务剥离,根据需要创建合适的对象,增加可扩展性!
适用性
-
运用在框架中
-
封闭的模块,想自己掌握对象的生成
-
权限统合,将一类对象的创建权力收归工厂,参考Spring
-
统一对象的创建方法,如果你在很多地方写了new,万一有一天需要加个new的参数呢?一个一个的去改?所以将创建对象给封装起来
结构
参与者
-
有一个公共的父类或者接口,用来抽象类型。--Shape
-
具体的、明确的对象,在父类的抽象之下。--Circle、Square、Rectangle
-
工厂类,用于创建该一类实例(被抽象出来的一类)。--ShapeFactory
协作
- ShapeFactory用于创建Shape这类实例,使用者调用ShapeFactory即可
public class ShapeFactory { //使用 getShape 方法获取形状类型的对象 public Shape getShape(String shapeType){ if(shapeType == null){ return null; } if(shapeType.equalsIgnoreCase("CIRCLE")){ return new Circle(); } else if(shapeType.equalsIgnoreCase("RECTANGLE")){ return new Rectangle(); } else if(shapeType.equalsIgnoreCase("SQUARE")){ return new Square(); } return null; } }
效果
-
使用者要制定创建哪一个明确的实例
public class FactoryPatternDemo { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); //获取 Circle 的对象,并调用它的 draw 方法 Shape shape1 = shapeFactory.getShape("CIRCLE"); //调用 Circle 的 draw 方法 shape1.draw(); //获取 Rectangle 的对象,并调用它的 draw 方法 Shape shape2 = shapeFactory.getShape("RECTANGLE"); //调用 Rectangle 的 draw 方法 shape2.draw(); //获取 Square 的对象,并调用它的 draw 方法 Shape shape3 = shapeFactory.getShape("SQUARE"); //调用 Square 的 draw 方法 shape3.draw(); } }
实现
Spring的IOC实现,BeanFactory十分重要。
代码实例
上已述
已知应用
SpringIOC实现
相关模式
创建型模式:建造者模式、抽象工厂模式、工厂方法模式、原型模式、工厂模式
工厂模式相关:抽象工厂模式、工厂方法模式
凡你能说的,你说清楚。凡你不能说的,留给沉默!