前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之抽象工厂模式

设计模式之抽象工厂模式

作者头像
Java编程指南
发布2019-08-02 15:35:39
2540
发布2019-08-02 15:35:39
举报
文章被收录于专栏:Java编程指南Java编程指南

什么是抽象工厂模式?

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

抽象工厂模式使用场景

在生活中,我们经常去餐馆吃饭。比如,我们愿意吃鸡腿配上可乐,喜欢吃盖饭配蛋花汤。我们不关心鸡腿怎么做的,可乐怎么生产的,盖饭怎么炒的,而只关心我们吃什么,喝什么,我们只需要指定想要的搭配就可以了,这就是典型的抽象工厂。 后面会代码举例这个抽象工厂模式场景。

总结抽象工厂使用场景:

 1 系统独立于它的产品创建、组合和表示。即无需关心内部对象时如何创建的,怎么创建的,什么含义。

 2 系统需要多个产品组合中的一个配置。由于对象很多,能够组合出的组合非常多,而系统只是使用某一个组合。

 3 强调的对象的组合结果,而不是他们具体的接口和实现。

抽象工厂模式意图

提供对象的使用接口,隐藏对象的创建过程。

抽象工厂模式角色

代码语言:javascript
复制
AbstractFactory 提供创建对象的接口。ConcreteFactory 提供真正创建对象的实现类,用于组合并创建不同的对象,实现一个产品族。AbstractProduct 提供对象的使用接口。ConcreteProduct 提供真正的适用对象,隐藏该对象的创建过程,是工厂创建的对象。Client 使用者,通过抽象工厂接口,使用不同的具体工厂方法创建对象组合,从而直接使用对象,无需关注对象的创建过程。

抽象工厂模式代码举例

抽象接口定义:

代码语言:javascript
复制
//抽象工厂-提供创建对象接口----主食+饮品 的抽象接口
public interface EatFacotry {
    
     public StapleFood MakeStapleFood();
        
     
     public Drinks MakeDrinks();

}

//主食接口--提供对象的使用接口
interface  StapleFood{
    
     public void eating();
}


//饮用接口--提供对象的使用接口
interface  Drinks{
    
     public void drinking();
    
}

创建真实的对象 工厂会隐藏他们的创建过程,就像我们只想吃 鸡腿+可乐 而不关系他们的制作过程一样:

代码语言:javascript
复制
//创建主食--鸡腿
class Drumsticks implements StapleFood{

    public void eating() {
        // TODO Auto-generated method stub
        System.out.println("主食吃 鸡腿 鸡腿  鸡腿");
    }
    
}

//创建主食--盖饭
class Rice implements StapleFood{

    public void eating() {
        // TODO Auto-generated method stub
        System.out.println("主食吃 盖饭 盖饭 盖饭");
    }
    
}


//创建主饮品--可乐
class Cola implements Drinks{

    public void drinking() {
        // TODO Auto-generated method stub
        System.out.println("可乐 可乐  可乐 可乐");
    }

    
    
}

//创建主饮品--鸡蛋汤
class EggdropSoup implements Drinks{

    public void drinking() {
        // TODO Auto-generated method stub
        System.out.println(" 鸡蛋汤 鸡蛋汤 鸡蛋汤 鸡蛋汤");
    }
    
}

提供真正创建对象的实现类,用于组合并创建不同的对象,实现一个产品族。 创建 鸡腿+可乐

代码语言:javascript
复制
什么是抽象工厂模式?
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。



在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

抽象工厂模式使用场景
在生活中,我们经常去餐馆吃饭。比如,我们愿意吃鸡腿配上可乐,喜欢吃盖饭配蛋花汤。我们不关心鸡腿怎么做的,可乐怎么生产的,盖饭怎么炒的,而只关心我们吃什么,喝什么,我们只需要指定想要的搭配就可以了,这就是典型的抽象工厂。 后面会代码举例这个抽象工厂模式场景。



总结抽象工厂使用场景:

 1 系统独立于它的产品创建、组合和表示。即无需关心内部对象时如何创建的,怎么创建的,什么含义。

 2 系统需要多个产品组合中的一个配置。由于对象很多,能够组合出的组合非常多,而系统只是使用某一个组合。

 3 强调的对象的组合结果,而不是他们具体的接口和实现。

抽象工厂模式意图
提供对象的使用接口,隐藏对象的创建过程。

抽象工厂模式角色
AbstractFactory 提供创建对象的接口。

ConcreteFactory 提供真正创建对象的实现类,用于组合并创建不同的对象,实现一个产品族。

AbstractProduct 提供对象的使用接口。

ConcreteProduct 提供真正的适用对象,隐藏该对象的创建过程,是工厂创建的对象。

Client 使用者,通过抽象工厂接口,使用不同的具体工厂方法创建对象组合,从而直接使用对象,无需关注对象的创建过程。
抽象工厂模式代码举例
抽象接口定义:

//抽象工厂-提供创建对象接口----主食+饮品 的抽象接口
public interface EatFacotry {
    
     public StapleFood MakeStapleFood();
        
     
     public Drinks MakeDrinks();

}

//主食接口--提供对象的使用接口
interface  StapleFood{
    
     public void eating();
}


//饮用接口--提供对象的使用接口
interface  Drinks{
    
     public void drinking();
    
}
创建真实的对象 工厂会隐藏他们的创建过程,就像我们只想吃 鸡腿+可乐 而不关系他们的制作过程一样:

//创建主食--鸡腿
class Drumsticks implements StapleFood{

    public void eating() {
        // TODO Auto-generated method stub
        System.out.println("主食吃 鸡腿 鸡腿  鸡腿");
    }
    
}

//创建主食--盖饭
class Rice implements StapleFood{

    public void eating() {
        // TODO Auto-generated method stub
        System.out.println("主食吃 盖饭 盖饭 盖饭");
    }
    
}


//创建主饮品--可乐
class Cola implements Drinks{

    public void drinking() {
        // TODO Auto-generated method stub
        System.out.println("可乐 可乐  可乐 可乐");
    }

    
    
}

//创建主饮品--鸡蛋汤
class EggdropSoup implements Drinks{

    public void drinking() {
        // TODO Auto-generated method stub
        System.out.println(" 鸡蛋汤 鸡蛋汤 鸡蛋汤 鸡蛋汤");
    }
    
}
提供真正创建对象的实现类,用于组合并创建不同的对象,实现一个产品族。  创建 鸡腿+可乐

class ConcreteFactory1 implements EatFacotry{

    //创建 主食 鸡腿
    public StapleFood MakeStapleFood() {
        // TODO Auto-generated method stub
        return new Drumsticks();
    }

    //创建 饮品  可乐
    public Drinks MakeDrinks() {
        // TODO Auto-generated method stub
        return new Cola();
    }
}
//提供真正创建对象的实现类,用于组合并创建不同的对象,实现一个产品族。  创建 盖饭+鸡蛋汤
class ConcreteFactory2 implements EatFacotry{

    public StapleFood MakeStapleFood() {
        // TODO Auto-generated method stub
        return new Rice();
    }

    public Drinks MakeDrinks() {
        // TODO Auto-generated method stub
        return new EggdropSoup();
    }

 

}
下面看下如何使用

public static void main(String[] args) {

        //---------------鸡腿+可乐---------------
        
        EatFacotry eat1 =new  ConcreteFactory2();
        
        eat1.MakeStapleFood().eating();
        
        eat1.MakeDrinks().drinking();

    }
这就是一个简单的抽象工厂的使用。

下面看下如何使用

代码语言:javascript
复制
public static void main(String[] args) {

        //---------------鸡腿+可乐---------------
        
        EatFacotry eat1 =new  ConcreteFactory2();
        
        eat1.MakeStapleFood().eating();
        
        eat1.MakeDrinks().drinking();

    }

这就是一个简单的抽象工厂的使用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java编程指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档