网站建设怎么做?,门窗网站源码,门头沟网站开发,不知此网站枉做男人工厂模式 
1.介绍 
工厂模式#xff08;创建型模式#xff09;#xff0c;是我们最常用的实例化对象模式#xff0c;是用工厂方法代替new操作的一种模式#xff1b;在工厂模式中#xff0c;我们在创建对象时不会对客户端暴露创建逻辑#xff0c;并且是通过使用一个共同的…工厂模式 
1.介绍 
工厂模式创建型模式是我们最常用的实例化对象模式是用工厂方法代替new操作的一种模式在工厂模式中我们在创建对象时不会对客户端暴露创建逻辑并且是通过使用一个共同的接口来指向新创建的对象。 
工厂模式是用来创建实例对象的所以以后new时就要多个心眼是否可以考虑使用工厂模式虽然这样做可能多做一些工作但会给你系统带来更大的可扩展性和尽量少的修改量。 
意图定义一个创建对象的接口让其子类自己决定实例化哪一个工厂类工厂模式使其创建过程延迟到子类进行。 
主要解决主要解决接口选择的问题。(选择不同的接口实例化不同的工厂对象) 
何时使用我们明确地计划不同条件下创建不同实例时。 
如何解决让其子类实现工厂接口返回的也是一个抽象的产品。 
关键代码创建过程在其子类执行。 
应用实例 
您需要一辆汽车可以直接从工厂里面提货而不用去管这辆汽车是怎么做出来的以及这个汽车里面的具体实现。Hibernate 换数据库只需换方言和驱动就可以。 
优点 
一个调用者想创建一个对象只要知道其名称就可以了。扩展性高如果想增加一个产品只要扩展一个工厂类就可以。屏蔽产品的具体实现调用者只关心产品的接口。 
缺点 
 每次增加一个产品时都需要在工厂中增加一个具体类和对象使得系统中类的个数成倍增加在一定程度上增加了系统的复杂度同时也增加了系统具体类的依赖。 
使用场景 
日志记录器记录可能记录到本地硬盘、系统事件、远程服务器等用户可以选择记录日志到什么地方。数据库访问当用户不知道最后系统采用哪一类数据库以及数据库可能有变化时。设计一个连接服务器的框架需要三个协议POP3、IMAP、HTTP可以把这三个作为产品类共同实现一个接口。 
注意事项作为一种创建类模式在任何需要生成复杂对象的地方都可以使用工厂方法模式。 
有一点需要注意的地方就是 
复杂对象适合使用工厂模式而简单对象特别是只需要通过 new 就可以完成创建的对象无需使用工厂模式。如果使用工厂模式就需要引入一个工厂类会增加系统的复杂度。 
2.具体步骤实现代码 
创建接口定义方法子类实现接口重写方法创建工厂生产用户需要的实体类对象使用工厂获取实体类执行该类的方法等 
步骤1定义一个创建对象的接口让其子类自己决定实例化哪一个工厂类创建过程在其子类执行 
/*** 步骤一定义一个创建对象的接口让其子类自己决定实例化哪一个工厂类* 创建过程在其子类执行**/
//定义一个形状接口
public interface Shape {//定义画形状的方法void draw();
}步骤2定义实现接口的实体类 
/*** 步骤2定义实现接口的实体类*/
public class Circle implements Shape {Overridepublic void draw() {System.out.println(画圆形的子类);}
}/*** 步骤2定义实现接口的实体类*/
public class Rectangle implements Shape {Overridepublic void draw() {System.out.println(画长方形的子类);}
}/*** 步骤2定义实现接口的实体类*/
public class Square implements Shape {Overridepublic void draw() {System.out.println(画正方形的子类);}
} 
步骤3创建一个工厂生成基于给定信息的实体类的对象。 
/*** 步骤3创建一个工厂生成基于给定信息的实体类的对象。*/
public class ShapeFactory {//使用getShape获取形状类型的对象public Shape getShape(String shapeType) {if (shapeType  null) {return null;}//equalsIgnoreCase()不考虑大小写if (shapeType.equalsIgnoreCase(circle)) {return new Circle();} else if (shapeType.equalsIgnoreCase(square)) {return new Square();} else if (shapeType.equalsIgnoreCase(rectangle)) {return new Rectangle();}return null;}
}步骤4使用工厂通过用户传递信息获取实体类的对象 
public class TestMain {public static void main(String[] args) throws IOException {//用户输入BufferedReader buff  new BufferedReader(new InputStreamReader(System.in));String str  buff.readLine();//创建工厂对象ShapeFactory shapeFactorynew ShapeFactory();//通过工厂对象获取实体类的对象Shape shape1shapeFactory.getShape(str);//执行某个实体类的方法shape1.draw();}
}