Java工厂模式

工厂模式: 工厂模式可以负责实例化大量公共接口的类。工程模式可以动态决定哪个类被实例化,
消费者需要哪个产品就直接向工厂提出请求就可以了。工厂根据要求会去寻找这个类进行实例化。

简单工厂
通常是一个工厂有很多类,通过提供参数,返回几个产品中的一个类的实例对象。
用户不必关系内部实现。只需要提供一个名称就可以获得。

interface Car {
    public String CarName();
}
 class BenChi implements Car{
     @Override
     public String CarName() {
         return "生产一辆奔驰汽车";
     }
 }
 class BMW implements Car{
     @Override
     public String CarName() {
         return "生产一辆宝马汽车";
     }
 }

public class SimplyFactory {
    //工厂生产车的方法
    public Car productCar(String carname){
        if(carname.equals("奔驰")){
            return new BenChi();
        }else if(carname.equals("宝马")){
            return new BMW();
        }else {
            return null;
        }
    }
    public static void main(String[] args) {
        SimplyFactory simplyFactory=new SimplyFactory();
        Car newcar=simplyFactory.productCar("奔驰");
        System.out.println(newcar.CarName());
    }
}

工厂方法
用来生产同一等级结构中的固定产品,将类的实例化操作延迟到子类中完成
定义一个接口为抽象工厂,工厂和工厂各自实现接口,重写生产的方法。再定义一个接口,产品实现该接口方法。然后需要什么产品,直接调用该产品工厂的方法。

interface Factory{
    Car productCar();
}
class BenChifactory implements Factory{
    @Override
    public Car productCar() {
        return new BMW();
    }
}
class BMWfactory implements Factory{
    @Override
    public Car productCar() {
        return new BenChi();
    }
}
public class FactoryMethod {
    public static void main(String[] args) {
       //需要一辆宝马
        Factory newBaoMa=new BMWfactory();
        System.out.println(newBaoMa.productCar().CarName());

    }
}

抽象工厂
用于多个产品同时创建。主要是创建一些列相关的接口,然后产品的工厂之间实现他们各自的产品实例化。

实现一个工厂和相应产品的对应


interface Iproductor1 {
    void product();
}

interface Iproductor2 {
    void product();
}

interface IFactory {
    Iproductor1 createthis1();

    Iproductor2 createthis2();
}

class Duct1 implements Iproductor1 {
    @Override
    public void product() {
        System.out.println("产品1");
    }
}

class Duct2 implements Iproductor2 {
    @Override
    public void product() {
        System.out.println("产品2");
    }
}

class AllFactory implements IFactory {

    @Override
    public Iproductor1 createthis1() {
        return new Duct1();
    }

    @Override
    public Iproductor2 createthis2() {
        return new Duct2();
    }
}

public class AbstractFactory {
    public static void main(String[] args) {
        AllFactory allFactory = new AllFactory();
        allFactory.createthis1().product();
    }
}

你可能感兴趣的:(Java工厂模式)