其他设计模式也会后续更新…
设计模式其实需要有一定开发经验才好理解,对代码有一定的设计要求,工作中融入才是最好的
工厂模式 ( Factory Pattern )
工厂模式(Factory Pattern)提供了一种创建对象的最佳方式
工厂模式在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象
工厂模式属于创建型模式
白话解释:
您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现;
使用场景:
1、 日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方;
2、 数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时;
优点:
1、 一个调用者想创建一个对象,只要知道其名称就可以了;
2、 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以;
3、 屏蔽产品的具体实现,调用者只关心产品的接口;
缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖
实例
一个接口
package testDesignPatterns;
public interface Shape {
void draw();
}
实现方法之一
package testDesignPatterns;
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("画出一个圆圈");
}
}
实现方法之二
package testDesignPatterns;
public class Square implements Shape {
@Override
public 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();
}
}