设计模式(二:工厂模式)

1.工厂模式的作用
实现了创建者和调用者的分离
2…工厂模式分类:
• 简单工厂模式
• 工厂方法模式
• 抽象工厂模式
3…工厂模式核心本质:
1.实例化对象,用工厂方法代替new操作。
2.将调用者跟我们的实现类解耦.
一:简单工厂:
1.特点:用来生产同一等级结构中的任意产品。
2.缺点:对于增加新的产品, 需要修改已 有代码,违反了开闭原则。

3.代码案例: Car(接口) ,AoDi(类),BiYaDi(类)
package com.example.shejimoshi.factory;

public interface Car {

    void run();
}

package com.example.shejimoshi.factory;

public class AoDi implements Car {
    @Override
    public void run() {
        System.out.println("奥迪在跑");
    }
}

package com.example.shejimoshi.factory;

public class BiYaDi implements Car {
    @Override
    public void run() {
        System.out.println("比亚迪在跑");
    }
}

如果不使用工厂模式的话 调用者需要知道很多东西 这样分工就不明确了

package com.example.shejimoshi.factory;
//不使用工厂模式
public class Test {

    public static void main(String[] args) {
        Car car1 = new AoDi();
        Car car2 = new BiYaDi();
        car1.run();
        car2.run();
    }

}

现在使用工厂方法只需要和工厂打交道 让创建对象的事情由工厂来做:

package com.example.shejimoshi.factory;
//简单工厂 用来创对象 新增功能只能修改代码 这是缺点
public class SimpleFactory {

    public static Car createAoDi()
    {
        return  new AoDi();
    }
    public static Car createBiYaDi()
    {
        return  new BiYaDi();
    }

}

使用简单工厂调用:

package com.example.shejimoshi.factory;

public class Test2 {
//这样就只需要和工厂打交道
    public static void main(String[] args) {
        Car car1 = SimpleFactory.createAoDi();
        Car car2 = SimpleFactory.createBiYaDi();
        car1.run();
        car2.run();
    }

}

虽然简单工厂如果修改一定要改代码 但是用它的还是比较多 这样的缺点还是可以接受的。

二:工厂方法:
1.工厂方法模式要点:
1):为了避免简单工厂模式的缺点,不完全满足OCP(开闭原则)。
2):工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目 或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。
2.代码案例:

package com.example.shejimoshi.factorymethod;

public interface Car {

    void run();
}

package com.example.shejimoshi.factorymethod;

public class AoDi implements Car {
    @Override
    public void run() {
        System.out.println("奥迪在跑");
    }
}

package com.example.shejimoshi.factorymethod;

public class BiYaDi implements Car {
    @Override
    public void run() {
        System.out.println("比亚迪在跑");
    }
}

package com.example.shejimoshi.factorymethod;
//所有的实例工厂都实现此接口
public interface CarFactory {
    Car createCar();
}

package com.example.shejimoshi.factorymethod;

public class AoDiFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new AoDi();
    }
}

package com.example.shejimoshi.factorymethod;

public class BiYaDiFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new BiYaDi();
    }
}

调用:

package com.example.shejimoshi.factorymethod;


public class Test {

    public static void main(String[] args) {
        Car car1 = new AoDiFactory().createCar();
        Car car2 = new BiYaDiFactory().createCar();
        car1.run();
        car2.run();
    }

}

工厂方法优点:新增功能不需要该已有代码 满足开闭原则
缺点:每增加一个功能就要新建一个工厂类来实现用于创建对象的接口。

三:抽象工厂:
不可以增加产品,可以增加产品族!
应用场景
– JDK中Calendar的getInstance方法
– JDBC中Connection对象的获取 – Hibernate中SessionFactory创建Session
– spring中IOC容器创建管理bean对象
– XML解析时的DocumentBuilderFactory创建解析器对象
– 反射中Class对象的newInstance()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值