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

MyBatis上刀山下火海的七虎上将之工厂方法模式

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

MyBatis上刀山下火海的七虎上将之工厂方法模式

一、工厂方法模式 1、多工厂模式架构图

注意:绿色虚线箭头为实现关系、白色虚线箭头为依赖关系、平行四边形实线箭头为关联关系、蓝色实线箭头为继承关系。

同时简单说明依赖和关联关系:在Java语言中,依赖关系体现为把依赖的类作为方法的返回值/入参、局部变量,或者对静态方法的调用等。而关联关系一般把关联的类作为自己的成员变量。

2、工厂方法模式定义

Define an interface for creating an object, but let subclasses decide which class to instantiate.

Factory Method lets a class defer instantiation to subclasses.

意思是:为创建对象定义一个接口,但是让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到子类。

在工厂方法模式中:

1)Product抽象产品类负责定义子类的共性,子类产品是相互独立的实现自己所需细节。

2)Factory是抽象工厂接口,一般与抽象产品类为依赖关系;如果是普通工厂方法模式Factory就是一个普通的类,一般与抽象产品类为关联关系。具体工厂类就是独立地创建相应地具体产品。

3、工厂方法模式优点

1、扩展性好。在增加产品类的情况下,只需要适当修改具体的工厂类或扩展一个工厂类,就可“拥抱变化”。
2、屏蔽产品类。产品类的实现如何变化,调用者都不需要关心,只需关心产品的接口,只要接口保持不变,系统中的上层模块就不会发生变化。
3、典型的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不需要关心,符合迪米特法则,符合依赖倒置原则,符合里氏替换原则。

二、工厂方法模式简单样例 1、延迟加载模式

所谓延迟加载,就是使用缓存的作用。如果集合map缓存到,可以从里面获取;否则新建后缓存并返回。

public class Factory {

    private static final Map prMap = new HashMap<>();
    public static synchronized Product createProduct(String type) throws Exception{
        Product product = null;
        if (prMap.containsKey(type)) {
            product = prMap.get(type);
        } else {
            if (type.equals("Product1")) {
                product = new ConcreteProduct1();
            } else {
                product = new ConcreteProduct2();
            }
            prMap.put(type, product);
        }

        return product;
    }
}
2、多工厂类模式(结构图如上面一)

1)Product产品类接口

public interface Product {

    void operation();
}

2)ConcreteProduct1

public class ConcreteProduct1 implements Product {

    @Override
    public void operation() {
        System.out.println("我是产品1");
    }
}

3)ConcreteProduct2

public class ConcreteProduct2 implements Product {

    @Override
    public void operation() {
        System.out.println("我是产品2");
    }
}

4)Factory工厂接口

public interface Factory {

    Product createProduct();
}

5)ConcreteFactory1

public class ConcreteFactory1 implements Factory{

    @Override
    public Product createProduct() {
        return new ConcreteProduct1();
    }
}

6)ConcreteFactory2

public class ConcreteFactory2 implements Factory {

    @Override
    public Product createProduct() {
        return new ConcreteProduct2();
    }
}

7)Client测试类

public class Client {

    public static void main(String[] args) {
        Factory factory = null;
        factory = new ConcreteFactory1();
        Product product1 = factory.createProduct();
        product1.operation();

        factory = new ConcreteFactory2();
        Product product2 = factory.createProduct();
        product2.operation();
    }
}
结果:
我是产品1
我是产品2

Process finished with exit code 0
接口只关心子类共性操作,抽象类关注子类的共性(包括共性细节),抽象类也会实现接口。 点点赞,谢谢,你的支持将是我最大的动力!!!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777042.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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