Java设计模式---工厂模式

Java设计模式---工厂模式,第1张

1、工厂模式

本质:
一、实例化对象不使用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("五菱宏光".equals(car)){
            return new WuLing();
        }else if("特斯拉".equals(car)){
            return new Tesla();
        }else{
            return null;
        }
    }
}

⑤ 创建一个顾客类然后直接调用工厂拿汽车

public class Customer {
    public static void main(String[] args) {
        Car wuLing = CarFactory.getCar("五菱宏光");
        Car tesla = CarFactory.getCar("特斯拉");
        wuLing.name();  //打印了 五菱宏光
        tesla.name();
    }
}

问题:如果现在我们需要再加一个汽车类

①再创建一个汽车的实现类(大众)

public class DaZhong implements Car{
    @Override
    public void name() {
        System.out.println("大众");
    }
}

②添加进工厂

public class CarFactory {
    public static Car getCar(String car){
        if("五菱宏光".equals(car)){
            return new WuLing();
        }else if("特斯拉".equals(car)){
            return new Tesla();
        }else if("大众".equals(car)){
            return new DaZhong();
        }else{
            return null;
        }
    }
}

会发现,这种模式不满足 " 开闭原则 " ,当又有一个新汽车时还需要修改原来的代码。

1.2、工厂方法模式

工厂模式则可以很好的解决开闭原则。每个汽车都有各自的工厂

①创建一个汽车接口

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 interface CarFactory {
    Car getCar();
}

⑤创建一个特斯拉工厂

public class TeslaFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new Tesla();
    }
}

⑤创建一个五菱宏光工厂

public class WuLingFactory implements CarFactory{
    @Override
    public Car getCar() {
        return new WuLing();
    }
}

⑥创建顾客类调用各自的工厂拿汽车

public class Customer {
    public static void main(String[] args) {
        Car wuLing = new WuLingFactory().getCar();
        Car tesla = new TeslaFactory().getCar();
        wuLing.name(); //打印 五菱宏光
        tesla.name();
    }
}

问题:会发现,每添加一个类就需要新添加一个工厂,从代码的管理上和代码的复杂度上来看,还不如简单工厂。根据设计原则来讲 ,使用工厂方法模式,而根据实际业务来讲,使用 简单工厂模式,很多时候我们在实际开发时也是使用简单工厂模式。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/798802.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存