java之抽象工厂模式(大话设计模式)

     2022-03-26     767

关键词:

看了几次抽象工厂模式,每次查看都需要重新理解一次,可能是涉及的类和接口比较多,所以比较难缕清的关系吧!在笔者看来,我们还是要吸取其思想而不是生搬硬套。

来看下类图:

大话设计模式-类图

技术分享图片

看类图已经很乱了,来简单的梳理下。我们只看接口,这样就不难看出实际上是抽象工厂生产抽象产品的过程,而具体实现都是各自的实现类来做。

看下具体的demo:

工厂层

/**
 * 工厂接口
 */
public interface IFactory {

    public IUser createUser();

    public IDepartment createDepartment();
}
/**
 * Mysql工厂
 */
public class MysqlFactory implements IFactory{

    @Override
    public IUser createUser() {
        return new UserMapper();
    }

    @Override
    public IDepartment createDepartment() {
        return new DepartmentMapper();
    }

}
/**
 * sqlserver工厂
 */
public class SqlServerFactory implements IFactory{

    @Override
    public IUser createUser() {
        return new UserMapper();
    }

    @Override
    public IDepartment createDepartment() {
        return new DepartmentMapper();
    }

}

 

产品层

/**
 * 部门层接口
 */
public interface IDepartment {

    public int saveDepartment(Department department);

    public IDepartment getDepartment(int id);
}
/**
 * 角色数据层接口
 */
public interface IUser {

    public int saveUser(User user);

    public IUser getUser(int id);
}
/**
 * 部门数据层
 */
public class DepartmentMapper implements IDepartment{

    @Override
    public int saveDepartment(Department department) {
        System.out.println("保存了部门");
        return 1;
    }

    @Override
    public IDepartment getDepartment(int id) {
        System.out.println("得到了一个部门");
        return null;
    }


}
/**
 * 角色数据层
 */
public class UserMapper implements IUser {

    @Override
    public int saveUser(User user) {
        System.out.println("保存Uer");
        return 1;
    }

    @Override
    public IUser getUser(int id) {
        System.out.println("得到一个User");
        return null;
    }


}

 

客户端及实体类

/**
 *用户实体类
 */
public class User{


}
/**
 * 部门实体类
 */
public class Department {

}
/**
 * 客户端
 */
public class Test {

    public static void main(String[] args) {
//        IFactory factory = new MysqlFactory();
        IFactory factory = new SqlServerFactory();
        IUser userMapper = factory.createUser();
        userMapper.getUser(userMapper.saveUser(new User()));
    }
}

 

如果我们切换数据库,我们只需要切换工厂就可以了,其他的代码不需要改。

以上是笔者对抽象工厂的理解,希望能帮助学习抽象工厂的小伙伴!

大话设计模式第一章之简单工厂模式

packagecom.dp.simpleFactory;//计算器作为抽象类定义一个计算需要什么子类继承了两个数字并且要有自己的计算实现方法publicabstractclassCalculator{protecteddoublenumberA=0;protecteddoublenumberB=0;publicdoublegetNumberA(){returnnumberA;}publicvoid 查看详情

简单工厂工厂方法抽象工厂区别

设计模式:简单工厂、工厂方法、抽象工厂之小结与区别 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较 抽象工厂模式-与-工厂方法模式区别 在简单工厂模式下,工人要想到种植萝卜还是白菜,... 查看详情

大话设计模式-抽象工厂模式(代码片段)

抽象工厂模式抽象工厂模式提供一个创建一系列相关或互相依赖的接口,而无需再指定他们具体的类。最大的好处是易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这使得改变一个应用的具体... 查看详情

大话设计模式之简单工厂读后感(代码片段)

引言:让我们重温经典,致敬经典简单工厂模式:根据调用端传参来有选择的实例化目标对象。UML类图:我们知道简单工厂就是为我们生成我们需要的对象。举个栗子:我们在舞台看表演的时候,一场场表演下来,我们可以总结... 查看详情

java设计模式之抽象工厂模式

...他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能... 查看详情

大话设计模式之简单工厂模式(代码片段)

大话设计模式——简单工厂模式--参考自《大话设计模式》需求现在有一个需求,实现一个简单的计算器对于一般的初学者来说可能会这么实现:publicclasscalculatepublicstaticvoidmain(String[]args)Scannercin=newScanner(System.in);System.out.println(&qu... 查看详情

大话设计模式之简单工厂模式

简单工厂模式  最近朋友推荐了一本书《大话设计模式》,此书刚刚到,博主也还没开始看,希望以博文的方式与大家一起分享,一起学习.简单工厂模式,也就是说,到底要实列化谁,将来会不会增加实列化的对象,比如增加开根运算,... 查看详情

大话设计模式第八章之简单工厂模式

   简单工厂模式 工厂方法模式     packagecom.dp.factory;interfaceIFactory{CalculatorCreateCalculator();}classAddFactoryimplementsIFactory{@OverridepublicCalculatorCreat 查看详情

大话设计模式——简单工厂模式

...静态工厂方法模式(StaticFactoryMethodPattern),可是不属于23GOF设计模式之中的一个。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。二、UML图  简单工厂主要分为三个角色:工厂(Creator)角色、抽象产品(Product)角色... 查看详情

设计模式之抽象工厂模式(代码片段)

这个模式看的我有点懵。。。梳理一下先上定义:抽象工厂模式,提供一个创建一系列相关或者依赖对象的接口,而无须指定它们具体的类;不知道我自己在说什么。。1packagecom.java.AbstractFactoryPattern;23publicinterfaceProduct4publicvoidpro... 查看详情

java设计模式之简单工厂工厂方法和抽象工厂

在前面的学习中(参见前面的博客),我们学到了很多OO原则:封装变化多用组合,少用继承针对接口/超类编程,不针对实现编程松耦合开闭原则让我们从一个简单的类开始,看看如何将之改造成符合OO原则的类以及工厂模式在... 查看详情

设计模式之java----抽象工厂模式(代码片段)

定义工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?... 查看详情

大话设计模式之工厂方法模式读后感(代码片段)

引言:让我们重温经典,致敬经典工厂方法模式:定义一个用于创建对象的接口,让子类来决定实例化哪一个类,工厂方法使一个类的实例化延迟到了子类。UML图:1packagecom.dzf.designtest;23/**4*<desc>5*工厂方法:定义一个创建对... 查看详情

大话设计模式之桥接模式

桥接模式  将抽象部分与他的实现部分分离,使他们可以独立的变化  抽象与实现分离并不是说让抽象类与其派生类分离,因为这没有任何意义。实现是指抽象类和它的派生类用来实现自己的对象.桥接模式主要包含如下几... 查看详情

java设计模式之抽象工厂模式(代码片段)

定义:抽象工厂模式指提供一个创建一系列相关或者相互依赖对象的接口,无须指定他们具体的类,意思是客户端不必指定产品的具体类型,创建多个产品族中的产品对象。抽象工厂模式中,客户端不依赖产... 查看详情

设计模式之抽象工厂模式

抽象工厂模式(AbstractFactory),是23种设计模式之一。DP中是这么定义抽象工厂模式的:抽象工厂模式(AbstractFactory),提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。在学习抽象工厂模式之前,最... 查看详情

java设计模式之抽象工厂模式

工厂方法模式中讲了女娲造人的故事。人是造出来了,可是低头一看,都是清一色的类型,缺少关爱、仇恨、喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,怎么办?抹掉重来,于是... 查看详情

设计模式之抽象工厂模式(代码片段)

抽象工厂模式基本介绍1)抽象工厂模式:定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类2)抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合。3)从设计层面看,抽象工厂模式就是对简单工厂... 查看详情