欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java学习笔记----java设计模式(工厂模式)

程序员文章站 2022-03-09 21:53:14
...

java设计模式(工厂模式)

核心作用:
实现了创建者和调用者的分离

针对产品:
    1.简单工厂(虽未完全满足开闭原则,但是只创建一个工厂类,易维护,而且是静态类,客户端无需再实例化,一般就用这个)
    2.工厂方法(满足开闭原则,但是创建大量类,不易维护,很少使用)
针对产品族:
    3.抽象工厂

1.我们要创建一个单一产品就用(简单工厂或者是工厂方法):

interface Car{
    void run();
}
class Benz implements Car{
    @Override
    public void run() {
        System.out.println(" Benz running!");
    }
}
class Audi implements Car{
    @Override
    public void run() {
        System.out.println(" Audi running!");
    }
}
  • 简单(静态)工厂模式:
//创建车工厂
public class CarFactory {
    public static final int CAR_BENZ = 1;
    public static final int CAR_AUDI = 2;
    public static Car createCar(int type) {
        switch (type) {
            case CAR_BENZ:
                return new Benz();
            case CAR_AUDI:
            default:
                return new Audi();
        }
    }
}
//客户端调用
public class Client{
    public static void main(String[] args) {
        Car car=CarFactory.createCar(CarFactory.CAR_BENZ);
        car.run();
    }
}
  • 工厂方法模式
interface CarFactory {
    Car createCar();
}
class AudiFctory implements CarFactory{
    @Override
    public Car createCar() {
        return new Audi();
    }
}
class BenzFctory implements CarFactory{
    @Override
    public Car createCar() {
        return new Benz();
    }
}
//客户端调用
public class 客户端调用{
    public static void main(String[] args) {
        Car car=new AudiFctory().createCar();
        car.run();
    }
}

2.我们要创建一个产品族(比如奔驰的上的发动机、座椅等)就用(抽象工厂):

interface Engine{
    void run();
}
class HighEngine implements Engine{
    @Override
    public void run() {
        System.out.println(" 跑得快 ");
    }
}
class LowEngine implements Engine{
    @Override
    public void run() {
        System.out.println(" 跑得慢 ");
    }
}
interface Seat{
    void sit();
}
class HighSeat implements Seat{
    @Override
    public void sit() {
        System.out.println(" 舒服 !");
    }
}
class LowSeat implements Seat{
    @Override
    public void sit() {
        System.out.println(" 不爽!");
    }
}
  • 抽象工厂:
interface CarFactory {
    Engine createEngine();
    Seat createSeat();
}
//为奔驰工厂生产配件
class BenzFactory implements CarFactory{
    @Override
    public Engine createEngine() {
        return new HighEngine();
    }
    @Override
    public Seat createSeat() {
        return new HighSeat();
    }
}
//为比亚迪工厂生产配件
class BYDFactory implements CarFactory{
    @Override
    public Engine createEngine() {
        return new LowEngine();
    }
    @Override
    public Seat createSeat() {
        return new LowSeat();
    }
}

客户端:

public class Test1 {
    public static void main(String[] args) {
        CarFactory carFactory=new BenzFactory();
        Engine engine=carFactory.createEngine();
        engine.run();
        Seat seat=carFactory.createSeat();
        seat.sit();
    }
}