- N +

设计模式之抽象工厂模式

设计模式之抽象工厂模式原标题:设计模式之抽象工厂模式

导读:

什么是抽象工厂模式?抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型...

文章目录 [+]

什么是抽象工厂模式

抽象工厂模式(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();

    }

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


本文标题:设计模式之抽象工厂模式
本文链接:http://kyjszj.com/wdzl/10.html
作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共876人参与)参与讨论

    还没有评论,来说两句吧...