工厂设计模式
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
之前我们创建类对象时, 都是使用new 对象的形式创建,
除new 对象方式以外, 工厂模式也可以创建对象.
耦合度: 类与类之间的关系,如果关系比较强,高耦合, 如果关系比较弱,低耦合(开发)
区别:
需求: 有10个类,需要在10个测试类中,分别创建这10个类的对象
以前:
直接通过new 来创建 --->每一个测试类都需要和这10个类进行关联--(耦合度高)
工厂模式:
定义一个工厂类,专门用来创建这10个类的对象, 并提供获取对象的方法,那这个时候测试类只需要跟工厂类关联即可----> 低耦合
将获取对象的代码与要创建对象的代码进行分开,获取对象的代码不需要直接创建对象,也就不需要关心创建对象时需要的数据。只需要通过工厂类获取对象即可。
优点:
解决类与类之间的耦合问题
使用:
定义一个类,提供一个静态方法,在静态方法中创建类的对象并返回
-
编写一个Car接口, 提供run方法
-
package com.jcli.demo04_工厂; public interface Car { void run(); }
-
编写一个三个类实现Car接口,重写run方法
-
package com.jcli.demo04_工厂; public class BaoMa implements Car { @Override public void run() { System.out.println("宝马正在以300迈的速度行驶..."); } }
package com.jcli.demo04_工厂; public class Benchi implements Car{ @Override public void run() { System.out.println("奔驰正在以200迈的速度行驶..."); } }
package com.jcli.demo04_工厂; public class Falali implements Car{ @Override public void run() { System.out.println("法拉利正在以300迈的速度行驶..."); } }
-
提供一个工厂类,可以用来生产汽车对象
-
package com.jcli.demo04_工厂; public class CarFactory { public static Car createCar(String type){ if ("Falali".equalsIgnoreCase(type)){ // 创建法拉利汽车对象,并返回 return new Falali(); } else if("Benchi".equalsIgnoreCase(type)){ // 创建奔驰汽车对象,并返回 return new Benchi(); }else if("BaoMa".equalsIgnoreCase(type)){ // 创建宝马汽车对象,并返回 return new BaoMa(); }else { return null; } } }
package com.jcli.demo04_工厂;
public class Test05 {
public static void main(String[] args) {
// 创建法拉利对象,调用run方法
//new Falali().run();
Car falali = CarFactory.createCar("Falali");
falali.run();
// 创建奔驰对象,调用run方法
//new Benchi().run();
Car car2 = CarFactory.createCar("Benchi");
car2.run();
// 创建宝马对象,调用run方法
//new BaoMa().run();
Car car3 = CarFactory.createCar("BaoMa");
car3.run();
}
}