抽象工厂设计模式-设计模式

目录

1、概述

优点:

缺点:

产品族:

2、代码实现

3、源码应用场景 


1、概述

抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,无需指定要创建的类,只需要指定一个抽象工厂类,由该工厂类实现所有相关对象的创建。

优点:

将一系列的产品族统一到一起创建。

缺点:

规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口。

增加了系统的抽象性和理解难度。

产品族:

所谓的产品族,指的是一些产品的集合,常常是为了一个目的或实现一个功能点,所需要的一些类,把这些类整合到一起,由一个类控制产生一堆类的对象。比如,对于Java知识来说,根据不同的表现记载形式,有Java视频、Java博客、Java图书、Java音频,等等,这些就可以组成一个产品族。

 

2、代码实现

https://github.com/phs999/DesignPatterns/tree/900968a8a27e79e5b4df3bb167493f93917f292b/design_pattern/src/creational/abstractfactory

package creational.abstractfactory;

public interface CourseFactory {
	
	Video getVideo();
	Aticle getArticle();

}

我们看到抽象工厂核心的Interface CourseFactory中的返回值Video和Article也都是抽象类或接口。

package creational.abstractfactory;

public class JavaCourceFactory implements CourseFactory{

	@Override
	public Video getVideo() {
		return new JavaVideo();
	}

	@Override
	public Aticle getArticle() {
		return new JavaArticle();
	}

}
package creational.abstractfactory;

public class JavaVideo extends Video {
    @Override
    public void produce() {
        System.out.println("录制Java课程视频");
    }
}

 

package creational.abstractfactory;

public class JavaArticle extends Article {
    @Override
    public void produce() {
        System.out.println("编写Java课程文章");
    }
}
package creational.abstractfactory;

public class Test {
    public static void main(String[] args) {
        CourseFactory courseFactory = new JavaCourceFactory();
        Video video = courseFactory.getVideo();
        video.produce();
    }

}

 


3、源码应用场景 

在MyBatis中,SqlSessionFactory工厂,实现了SqlSession和Configuration两种对象的创建,这两种具体实现对象属于一个产品族。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.apache.ibatis.session;

import java.sql.Connection;

public interface SqlSessionFactory {
    SqlSession openSession();

    SqlSession openSession(boolean var1);

    SqlSession openSession(Connection var1);

    SqlSession openSession(TransactionIsolationLevel var1);

    SqlSession openSession(ExecutorType var1);

    SqlSession openSession(ExecutorType var1, boolean var2);

    SqlSession openSession(ExecutorType var1, TransactionIsolationLevel var2);

    SqlSession openSession(ExecutorType var1, Connection var2);

    Configuration getConfiguration();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值