参考:https://blog.csdn.net/weixin_48052161/article/details/118092235
1、简单工厂模式
简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存 在的目的很简单:定义一个用于创建对象的接口;
组成:
1、物品的抽象
2、一个生产工厂的类
3、具体物品类
eg:
如图:物品抽象和工厂类以依赖连接;
代码实例:
物品抽象:车
public interface Car {
void drive();
}
车具体类:宝马
package com.example.dtest.design23.factory.simpleFactory;
public class Bmw implements Car{
@Override
public void drive() {
System.out.println("Driving Bmw");
}
}
车具体类:奔驰
package com.example.dtest.design23.factory.simpleFactory;
public class Benz implements Car{
@Override
public void drive() {
System.out.println("Driving Benz");
}
}
工厂类:
package com.example.dtest.design23.factory.simpleFactory;
public class SimpleFactory {
public static Car driverCar(String s)throws Exception{
//equals() 会判断大小写区别,equalsIgnoreCase() 不会判断大小写区别:
if(s.equalsIgnoreCase("Benz")){
return new Benz();
}else if(s.equalsIgnoreCase("Bmw")){
return new Bmw();
}else {
throw new Exception();
}
}
public static void main(String[] args) {
try {
Car car = SimpleFactory.driverCar("benz");
car.drive();
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、工厂方法模式
工厂方法模式是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个对象,工厂方法让类的实例化推迟到子类中进行,
在工厂方法模式中用户只需要关心所需产品对应的工厂,无须关心创建细节,而且加入新的产品符合开闭原则。
相比于简单工厂,多了工厂的抽象;
组成:
1、物品的抽象
2、具体物品类
3、一个生产工厂的抽象接口
4、生产工厂的类
eg:
这里工厂和产品以依赖形式连接,抽象也是,体现在代码中,实际是由于抽象间就已经是依赖关系了,所以实体间必然是;
代码实例:
车产品抽象接口:
package com.example.dtest.design23.factory.factory;
public interface CarFactory {
Car driverCar();
}
奔驰工厂类
package com.example.dtest.design23.factory.factory;
public class BenzFactory implements CarFactory{
@Override
public Car driverCar() {
return new Benz();
}
}
宝马工厂类:
package com.example.dtest.design23.factory.factory;
public class BmwFactory implements CarFactory{
@Override
public Car driverCar() {
return new Bmw();
}
}
车产品抽象接口:
package com.example.dtest.design23.factory.factory;
public interface Car {
void drive();
}
宝马车类:
package com.example.dtest.design23.factory.factory;
public class Bmw implements Car {
@Override
public void drive() {
System.out.println("Driving Bmw");
}
}
奔驰车类:
package com.example.dtest.design23.factory.factory;
public class Benz implements Car {
@Override
public void drive() {
System.out.println("Driving Benz");
}
}
测试:
package com.example.dtest.design23.factory.factory;
public class FactoryTest {
public static void main(String[] args) {
// Car car = SimpleFactory.driverCar("benz");
CarFactory factory = new BmwFactory();
Car car = factory.driverCar();
car.drive();
}
}



