设计模式—工厂模式

工厂模式

  • 工厂模式是创建型模式
  • 核心:
    • 实例化对象不使用new ,用工厂方法代替
    • 将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。

这里使用汽车工厂的案例来演示工厂模式

简单工厂模式(常用的)

在这里插入图片描述

首先创建一个汽车的接口

package com.zkw.factory.simple;

public interface Car {
    public void name();
}

宝马和奥迪分别实现汽车接口

package com.zkw.factory.simple;

public class BM implements Car {
    @Override
    public void name() {
        System.out.println("宝马!!!");
    }
}
package com.zkw.factory.simple;

public class AuDi implements Car {
    @Override
    public void name() {
        System.out.println("奥迪!!!!");
    }
}

然后把这两个放到工厂里

package com.zkw.factory.simple;


public class CarFactory {
    public static Car getCar(String car){
        switch (car) {
            case "宝马": return new BM();
            case "奥迪": return new AuDi();
            default:
                System.out.println("没有此辆车");
                return null;
            }
       }
}

解释:这里的new 就像相当于创建了这个车辆

消费者去车工厂里边那车

package com.zkw.factory.simple;

public class Customer {
    public static void main(String[] args) {
        CarFactory carFactory = new CarFactory();

        Car car1 = carFactory.getCar("宝马");
        Car car2 = carFactory.getCar("奥迪");

        car1.name();
        car2.name();
    }
}

结果如下:

在这里插入图片描述

工厂方法模式

项目结构

在这里插入图片描述

相当于每一个车企都有一个自己的工厂,客户想要去买车,只需要去对应的工厂就可以了

在这里插入图片描述

车辆接口

package com.zkw.factory.method;

public interface Car {
    public void name();
}

车工厂接口

package com.zkw.factory.method;

public interface CarFactory {
    public Car getCar();
}

法拉利和保时捷分别实现车辆和车工厂接口

package com.zkw.factory.method.car;

import com.zkw.factory.method.Car;

public class Baoshijie implements Car {
    @Override
    public void name() {
        System.out.println("保时捷!!!");
    }
}
package com.zkw.factory.method.carFactory;

import com.zkw.factory.method.Car;
import com.zkw.factory.method.CarFactory;
import com.zkw.factory.method.car.Baoshijie;

public class BaoshijieFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new Baoshijie();
}
}
package com.zkw.factory.method.car;

import com.zkw.factory.method.Car;

public class Falali implements Car {
    @Override
    public void name() {
        System.out.println("法拉利!!!!");
    }
}
package com.zkw.factory.method.carFactory;

import com.zkw.factory.method.Car;
import com.zkw.factory.method.CarFactory;
import com.zkw.factory.method.car.Falali;

public class FalaliFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new Falali();
    }
}

消费者去车工厂里边买车

package com.zkw.factory.method;

import com.zkw.factory.method.carFactory.BaoshijieFactory;
import com.zkw.factory.method.carFactory.FalaliFactory;

public class customer {
    public static void main(String[] args) {
        FalaliFactory falaliFactory = new FalaliFactory();
        Car car = falaliFactory.getCar();
        car.name();

        BaoshijieFactory baoshijieFactory = new BaoshijieFactory();
        Car car1 = baoshijieFactory.getCar();
        car1.name();
    }
}

结果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值