网站被k表现,企业网站的首页,全国监理工程师查询网,自定义wordpress其他设计模式也会后续更新… 设计模式其实需要有一定开发经验才好理解#xff0c;对代码有一定的设计要求#xff0c;工作中融入才是最好的
工厂模式 ( Factory Pattern )
工厂模式#xff08;Factory Pattern#xff09;提供了一种创建对象的最佳方式
工厂模式在创建对…其他设计模式也会后续更新… 设计模式其实需要有一定开发经验才好理解对代码有一定的设计要求工作中融入才是最好的
工厂模式 ( Factory Pattern )
工厂模式Factory Pattern提供了一种创建对象的最佳方式
工厂模式在创建对象时不会对客户端暴露创建逻辑并且是通过使用一个共同的接口来指向新创建的对象
工厂模式属于创建型模式 白话解释
您需要一辆汽车可以直接从工厂里面提货而不用去管这辆汽车是怎么做出来的以及这个汽车里面的具体实现 使用场景
1、 日志记录器记录可能记录到本地硬盘、系统事件、远程服务器等用户可以选择记录日志到什么地方 2、 数据库访问当用户不知道最后系统采用哪一类数据库以及数据库可能有变化时 优点
1、 一个调用者想创建一个对象只要知道其名称就可以了 2、 扩展性高如果想增加一个产品只要扩展一个工厂类就可以 3、 屏蔽产品的具体实现调用者只关心产品的接口 缺点
每次增加一个产品时都需要增加一个具体类和对象实现工厂使得系统中类的个数成倍增加在一定程度上增加了系统的复杂度同时也增加了系统具体类的依赖 实例 一个接口
package testDesignPatterns;public interface Shape {void draw();}
实现方法之一
package testDesignPatterns;public class Circle implements Shape {Overridepublic void draw() {System.out.println(画出一个圆圈);}}
实现方法之二
package testDesignPatterns;public class Square implements Shape {Overridepublic void draw() {System.out.println(画出一个正方形);}}
创建工厂生成基于给定信息的实体类的对象
package testDesignPatterns;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(SQUARE)){return new Square();}return null;}}
使用该工厂通过传递类型信息来获取实体类的对象----获取对象
package testDesignPatterns;public class TestFactoryPattern {public static void main(String[] args) {ShapeFactory shapeFactory new ShapeFactory();//获取 Circle 的对象并调用它的 draw 方法Shape shape1 shapeFactory.getShape(CIRCLE);//调用 Circle 的 draw 方法shape1.draw();//获取 Square 的对象并调用它的 draw 方法Shape shape3 shapeFactory.getShape(SQUARE);//调用 Square 的 draw 方法shape3.draw();}}