23种设计模式之抽象工厂模式

抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

package designMode.abstractFactory;

class User {
    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
package designMode.abstractFactory;

class Dept {

    private int id;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
}
package designMode.abstractFactory;

interface IUser {

    void insert(User user);

    User getUser(int id);
}
package designMode.abstractFactory;

interface IDept {

    void insertDept(Dept dept);

    Dept getDept(int id);
}
package designMode.abstractFactory;

class OracleUser implements IUser{

    @Override
    public void insert(User user) {
        System.out.println("在Oracle数据库中给user表新增一条记录!");
    }

    @Override
    public User getUser(int id) {
        System.out.println("在Oracle数据库中根据用户id得到user表一条记录!");
        return null;
    }

}
package designMode.abstractFactory;

class OracleDept implements IDept{

    @Override
    public void insertDept(Dept dept) {
        System.out.println("在Oracle数据库中给dept表新增一条记录!");
    }

    @Override
    public Dept getDept(int id) {
        System.out.println("在Oracle数据库中根据id获取dept表中的一条记录!");
        return null;
    }

}
package designMode.abstractFactory;

class MysqlUser implements IUser{

    @Override
    public void insert(User user) {
        System.out.println("在Mysql数据库中给user表新增一条记录!");

    }

    @Override
    public User getUser(int id) {
        System.out.println("在Mysql数据库中根据用户id得到user表的一条记录!");
        return null;
    }

}
package designMode.abstractFactory;

class MysqlDept implements IDept{

    @Override
    public void insertDept(Dept dept) {
        System.out.println("在Mysql数据库中给dept表新增一条记录!");
    }

    @Override
    public Dept getDept(int id) {
        System.out.println("在Mysql数据库中根据id获取dept表的一条记录!");
        return null;
    }

}
package designMode.abstractFactory;

interface IFactory {

    IUser createUser();

    IDept createDept();
}
package designMode.abstractFactory;

class OracleFactory implements IFactory{

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

    @Override
    public IDept createDept() {
        return new OracleDept();
    }

}
package designMode.abstractFactory;

class MysqlFactory implements IFactory{

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

    @Override
    public IDept createDept() {
        return new MysqlDept();
    }

}
package designMode.abstractFactory;

class Test {
    public static void main(String[] args) {
        User user = new User();
        Dept dept = new Dept();
      //IFactory factory = new OracleFactory();
        IFactory factory = new MysqlFactory();
        IUser iu = factory.createUser();
        iu.insert(user);
        iu.getUser(1);
        IDept id = factory.createDept();
        id.insertDept(dept);
        id.getDept(1);
    }
}
时间: 2024-10-01 23:52:53

23种设计模式之抽象工厂模式的相关文章

【Unity与23种设计模式】抽象工厂模式(Abstract Factory)

GoF中定义: "提供一个能够建立整个类群组或有关联的对象,而不必指明它们的具体类." 意思就是 根据不同的执行环境产生不同的抽象类子类 抽象工厂模式经常在面试中会涉及到 下面的例子为工厂1和工厂2 两个工厂都可以生成产品A和B 但是两个工厂工艺不同 所以工厂1只能生产产品A1和B1 工厂2只能生产产品A2和B2 //可生成各抽象成品对象的操作 public abstract class AbstractFactory{ public abstract AbstractProductA

23种设计模式(2)-简单工厂模式

这些设计模式都是在这么多年的软件开发中,先辈对软件重构的经验总结提炼的结果,这些设计模式要遵循软件设计的六原则.每一种设计模式都有相应的需求场景的.有了这些设计模式的思想和面向对象的思想,在软件设计特定的需求中会给你解决思路. 一,需求场景 在此,我也借用书上看到的一个例子.计算器工厂给我们留了一些任务,设计一个计算器做成成品卖给买家.但是这个任务是分两个阶段让我们实现的.如下: 阶段一:买家目前只需要计算器具有加减程序的功能即可.别的功能待市场需求再做设计.也就是阶段二的任务. 阶段二:阶段一

23种设计模式之抽象工厂

抽象工厂 当想创建一组密不可分的对象时,工厂方法似乎就不够用了 抽象工厂是应对产品族概念的.应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品.比如,每个汽车公司可能要同时生产轿车.货车.客车,那么每一个工厂都要有创建轿车.货车和客车的方法 优点:向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象 缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性 1 public interface IRac

二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Message有一个Insert()方法,该方法的参数是MessageModel. AbstractMessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Abstract

23种设计模式之简单工厂模式

模式是基于在面对对象的思想上实现的计算机编程模式思维面对对象的模式思维有四大好处:可维护,可复用,可拓展,灵活性好基于三个步骤,封装,继承,多态举个例子:计算机要完成两个数字之间的运算一.就要考虑到定义一个可被继承类1.需要两个数的字段并且将之属性化2. 一个virtual的虚方法在每一个运算方法中都可以实现调用 二.要将运算的方法类继承,完成运算方法 三.创建工厂类,将根据运算符号来判断使用哪种运算类 四.在客户端中使用多态调用工厂类,输出结果就OK了 具体代码如下: 原文地址:https:/

重头开始学23种设计模式:三大工厂(简单工厂,工厂方法,抽象工厂)

在开发当中我们经常会使用三个设计模式,来帮我们解决项目代码的可扩展性. 在简单工厂,工厂方法,抽象工厂这三个设计模式当中,代码其实都很简单,主要是要理解运用. 简单工厂: 简单工厂说白了,就是利用Switch根据传递的参数,进行实例化. 工厂方法: 工厂方法,为解决每次都去增加Swicth的简单工厂的升级.为每一个产品提供一个工厂类. 抽象工厂: 抽象工厂,我觉得也是对工厂方法的再次升级,工厂方法每次只能创作一个产品,而抽象工厂就是产品线的产品族. 总结下,从网上找到一个大牛的回复: 我认为不能

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

创建型设计模式之抽象工厂模式: 一.含义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类. 具体来说, 为一组具有相同约束(属性)的对象,提供一个接口,这个接口下有不同的实现,每个实现类对应一种类型的约束(一种具体的属性),同时提供该类型的约束(属性)下所有对象的创建方法 二.代码说明 1.主要有两个角色 1)一组互相影响的产品线(对象),也叫做产品族 2)抽象工厂类及其实现类 抽象工厂类:在N个产品族中,在抽象工厂类中就应该有N个创建方法 实现类:具体实现类是产品族的具体

Java经典23种设计模式之结构型模式(三)------附代理模式、适配器模式、外观模式区别

本文介绍7种结构型模式里的剩下两种:享元模式.代理模式. 一.享元模式FlyWeight 享元模式比较简单且重要,在很多场合都被用到,只不过封装起来了用户看不到.其概念:运用共享内存技术最大限度的支持大量细粒度的对象.这个概念给的有些抽象,说白了就是如果内存中存在某个对象A,如果再次需要使用对象A的时候如果内存中有A这个对象就直接使用它,不要再次new了.如果没有,则重新new一个.基于这个特点,享元模式使用时一般会给待访问对象传递一个Tag,用来标识这个对象,而且要同时使用抽象工厂的方法进行访

C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】

原文:C#设计模式之三抽象工厂模式(AbstractFactory)[创建型] 一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简单工厂]模式所面对的问题,它的问题就是:如果我们增加新的产品,工厂类的方法就要修改本身的代码,增加产品越多,其逻辑越复杂,同时这样的修改也是不符合[开放关闭原则OCP],对修改代码关闭,对增加代码开放.为了解决[简单工厂