设计模式原理及应用·简单工厂模式 不念不忘少年蓝@ 2021-11-02 14:50 387阅读 0赞 **这个模式比较简单,平常也基本不用,见得最多的也就是读spring框架源码时候。** **写这个总是提不起精神,写得不好,去看这个吧:** **[https://www.runoob.com/design-pattern/factory-pattern.html][https_www.runoob.com_design-pattern_factory-pattern.html]** **模式名和分类** * 模式名:xxxFactory * 分类:创建型模式 **意图** 将对象与它的创建,交给别人去做 **别名** 无 **动机** 将对象的创建与业务剥离,根据需要创建合适的对象,增加可扩展性! **适用性** * 运用在框架中 * 封闭的模块,想自己掌握对象的生成 * 权限统合,将一类对象的创建权力收归工厂,参考Spring * 统一对象的创建方法,如果你在很多地方写了new,万一有一天需要加个new的参数呢?一个一个的去改?所以将创建对象给封装起来 **结构** ![1328967-20190708161407755-1395352969.png][] ![1328967-20190708160418489-264386306.png][] **参与者** * 有一个公共的父类或者接口,用来抽象类型。--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十分重要。 ![1328967-20190708160708895-314248688.png][] **代码实例** 上已述 **已知应用** SpringIOC实现 **相关模式** 创建型模式:建造者模式、抽象工厂模式、工厂方法模式、原型模式、工厂模式 工厂模式相关:抽象工厂模式、工厂方法模式 转载于:https://www.cnblogs.com/dhcao/p/11151858.html [https_www.runoob.com_design-pattern_factory-pattern.html]: https://www.runoob.com/design-pattern/factory-pattern.html [1328967-20190708161407755-1395352969.png]: /images/20211101/785b24264f784bbf88ba6ac842f74654.png [1328967-20190708160418489-264386306.png]: /images/20211101/025d843045694cbd9dc58149c8821512.png [1328967-20190708160708895-314248688.png]: /images/20211101/d8ef78204e1a455facb1d08416616be6.png
还没有评论,来说两句吧...