java常用设计模式(二)工厂模式

工厂模式
作用:
实现了创建者和调用者的分离
详细分类
简单工厂模式
工厂方法模式

OOP七大原则
开闭原则: 一个软件的实体应当对扩展开放, 对修改关闭
依赖倒转原则: 要针对接口编程, 不要针对实现编程
迪米特法则: 只与你直接的朋友通信, 而避免和陌生人通信

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

模式:
简单工厂模式
用来生产统一等级结构中的任意产品(对于增加新的产品,需要覆盖已有代码)
工厂方法模式
用来生产同一等级结构中的固定产品(支持增加任意产品)

1.简单工厂模式

Car

public interface Car {
    public abstract void name();
}

车产品

public class Byd implements Car{

    @Override
    public void name() {
        System.out.println("比亚迪");
    }
}
public class WuLing implements Car{
    @Override
    public void name() {
        System.out.println("五菱神车");
    }
}

工厂类

public class SimapleFactory {

    //简单工厂模式 方法一
    public static Car getCar(String type) {
        if ("1".equals(type)) {
            return new WuLing();
        } else if ("2".equals(type)) {
            return new Byd();
        } else {
            return null;
        }
    }

    //简单工厂模式 方法二
    public static Car getWuLing() {
        return new WuLing();
    }

    public static Car getByd() {
        return new Byd();
    }
}

最后我们来试试分别获取不同的车

//简单工厂模式  方法一
//        Car car = getCar("1");
//        car.name();
//
//        Car car2 = getCar("2");
//        car2.name();

        //工厂方法模式  方法二
        Car wuLing = getWuLing();
        wuLing.name();

        Car byd = getByd();
        byd.name();

控制台输出一下信息

五菱神车
比亚迪

Process finished with exit code 0

2.工厂方法模式

Car

public interface Car {
    void name();
}

CarFactory

public interface CarFactory {
    Car getCar();
}

车工厂及车产品

public class Byd implements Car {

    @Override
    public void name() {
        System.out.println("比亚迪");
    }
}
public class BydFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new Byd();
    }
}
public class WuLing implements Car {
    @Override
    public void name() {
        System.out.println("五菱神车");
    }
}
public class WuLingFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new WuLing();
    }
}

接下来调用试试

public static void main(String[] args) {
        Car car = new WuLingFactory().getCar();
        car.name();
        Car car2 = new BydFactory().getCar();
        car2.name();
    }

控制台输出如下

五菱神车
比亚迪

Process finished with exit code 0

由此看来简单工厂模式具有以下的特征
结构复杂度: simple
代码复杂度: simple
编程复杂度: simple
管理上的复杂度: simple
舰据设计原则:工厂方法模式!
根据实际业务:简单工厂模式!

3.抽象工厂模式

  • 定义︰抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类

  • 适用场景: 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节
    强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码
    提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现

  • 优点: 具体产品在应用层的代码隔离,无需关心创建的细节 将一个系列的产品统一到一起创建

  • 缺点: 规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难; 增加了系统的抽象性和理解难度
    在这里插入图片描述
    在这里插入图片描述
    示例代码已经上传gitee
    代码结构如下:
    在这里插入图片描述

https://gitee.com/wenaiman/design-pattern-learning/tree/master/DesignPattern01_FactoryMode/src/main/java/com/design/pattern/abstracts

原文链接:https://blog.csdn.net/qq_42411307/article/details/114497948

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值