工厂模式之工厂方法
FactoryMethod(工厂方法)
一、工厂方法模式简介
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
注意:
为了避免简单工厂模式的缺点,不完全满足OCP
工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。
二、工厂方法模式优缺点比较
优点:
- 1、一个调用者想创建一个对象,只要知道其名称就可以了
- 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以
- 3、屏蔽产品的具体实现,调用者只关心产品的接口
缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
使用场景:
- 1、日志记录器
- 2、数据库访问
-
3、JDK中Calendar的getInstance方法
- 4、JDBC中Connection对象的获取
- 5、spring中IOC容器创建管理bean对象
- 6、XML解析时的DocumentBuilderFactory创建解析器对象
- 7、反射中Class对象的newInstance()
注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式
三、实现UML类图
四、实现
步骤1:创建接口
public interface Car { void run(); }
步骤2:创建实现接口的实体类
public class Audi implements Car{ @Override public void run() { System.out.println("奥迪运行"); } } public class Byd implements Car{ @Override public void run() { System.out.println("比亚迪运行"); } }
步骤3:创建工厂方法接口
//工厂方法,可以增加任意产品 public interface CarFactory { public Car createCar(); }
步骤4:创建实现工厂接口的工厂类
public class AudiCarFactory implements CarFactory{ @Override public Car createCar() { return new Audi(); } } public class BydCarFactory implements CarFactory { @Override public Car createCar() { return new Byd(); } }
步骤5:调用者调用
/** * 工厂方法:用来生产同一等级结构中的固定产品 * @author yw */ public class FactoryDemo02 { public static void main(String[] args) { Car car = new AudiCarFactory().createCar(); car.run(); car = new BydCarFactory().createCar(); car.run(); // car = new BenzCarFactory().createCar(); // car.run(); } }
步骤6:运行程序,观察结果
奥迪运行
比亚迪运行
posted on 2020-03-26 21:27 VincentYew 阅读(176) 评论(0) 收藏 举报