栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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();
    }
}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/859261.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号