工厂模式
模式定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类
作用:实现了创建者和调用者的分离
详细分类:
简单工厂模式
工厂方法模式
抽象工厂模式
核心本质:
实例化对象不使用new,用工厂方法代替
将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
三种模式:
◆简单工厂模式
用来生产同一等级结构中的任意产品(对于增加新的产品,需要修改已有代码),不满足开闭原则
◆工厂方法模式
用来生产同一等级结构中的固定产品(支持增加任意产品),满足开闭原则
◆抽象工厂模式
围绕-个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
1.简单工厂模式
例1:
public interface Car {
void name();
}
public class Tesla implements Car{
@Override
public void name() {
System.out.println("特斯拉");
}
}
public class Wuling implements Car{
@Override
public void name() {
System.out.println("五菱宏光");
}
}
//静态工厂模式
//增加一个新产品,要修改原来代码,不满足开闭原则
//开闭原则
public class CarFactory {
//方法一
public static Car getCar(String car){
if(car.equals("五菱")){
return new Wuling();
}else if(car.equals("特斯拉")){
return new Tesla();
}else {
return null;
}
}
//方法二
public static Car getWuling(){
return new Wuling();
}
public static Car getDazhong(){
return new Dazhong();
}
}
public class Consumer {
public static void main(String[] args) {
//1.传统方式
// Car car = new Wuling();
// Car car2 = new Tesla();
// car.name();
// car2.name();
//2.使用工厂创建
Car car = CarFactory.getCar("五菱");
car.name();
}
}
例2:
public class FactoryPatternDemo01 {
public static void main(String[] args) {
/**
* 步骤 4
* 使用该工厂,通过传递类型信息来获取实体类的对象。
*/
ShapeFactory shapeFactory = new ShapeFactory();
//获取 Circle 的对象,并调用它的 draw 方法
Shape shape1 = shapeFactory.getShape("CIRCLE");
//调用 Circle 的 draw 方法
shape1.draw();
//获取 Rectangle 的对象,并调用它的 draw 方法
Shape shape2 = shapeFactory.getShape("RECTANGLE");
//调用 Rectangle 的 draw 方法
shape2.draw();
//获取 Square 的对象,并调用它的 draw 方法
Shape shape3 = shapeFactory.getShape("SQUARE");
//调用 Square 的 draw 方法
shape3.draw();
}
}
/**
* 步骤 1
* 创建一个接口:
*/
interface Shape{
void draw();
}
/**
* 步骤 2创建实现接口的实体类
*/
class Rectangle implements Shape{
@Override
public void draw() {
System.out.println("画长方形!!");
}
}
class Square implements Shape{
@Override
public void draw(){
System.out.println("画正方形!!");
}
}
class Circle implements Shape {
@Override
public void draw()</