首页 > 其他分享 >抽象工厂模式

抽象工厂模式

时间:2023-01-03 10:33:46浏览次数:33  
标签:return name 模式 工厂 抽象 public String


      概述:

         抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。

    定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。


类型

           

public interface Creator{



public ProductA factoryA();



public ProductB factoryB();



}

具体工厂

       


类别一:


public class ConcreteCreator1 implements Creator{




public ProductA factoryA(){




return new ProductA1();




}




public ProductB factoryB(){




return new ProductB1();




}




}




类别二:




public class ConcreteCreator2 implements Creator{




public ProductA factoryA(){




return new ProductA2();




}




public ProductB factoryB(){




return new ProductB2();




}




}



抽象产品



类别A




public interface ProductA




{




}




类别B




public interface ProductB




{




}



具体产品类


ProdcutA1:



public class ProductA1 implements ProductA




{




public ProductA1()




{




}




}



ProdcutA2:



public class ProductA2 implements ProductA




{




public ProductA2()




{




}




}:




ProdcutA1:




public class ProductB1 implements ProductB




{



public ProductB1()



{




}




}




public class ProductB2 implements ProductB




{



public ProductB2()



{




}




}


农场系统的案例:



//两种抽象产品:水果、蔬菜



public interface Fruit




{




}




public interface Veggie




{




}



//四种具体产品:北方水果,热带水果,北方蔬菜,热带蔬菜


//Northern Fruit



public class NorthernFruit implements Fruit




{




private String name;




public NorthernFruit(String name)




{




}




public String getName()




{




return name;




}




public void setName(String name)




{




this. name = name;




}




}



//TropicalFruit



public class TropicalFruit implements Fruit




{




private String name;




public TropicalFruit(String name)




{




}




public String getName()




{




return name;




}




public void setName(String name)




{




this. name = name;




}




}



//NorthernVeggie



public class NorthernVeggie implements Veggie




{




private String name;




public NorthernVeggie(String name)




{




}




public String getName()




{




return name;




}




public void setName(String name)




{




this. name = name;




}




}



//TropicalVeggie



public class TropicalVeggie implements Veggie




{




private String name;




public TropicalVeggie(String name)




{




}




public String getName()




{




return name;




}




public void setName(String name)




{




this. name = name;




}




}



//抽象工厂角色



public interface Gardener




{




public Fruit createFruit(String name);




public Veggie createVeggie(String name);




}



//具体工厂角色:北方工厂,热带角色



public class NorthernGardener implements Gardener




{




public Fruit createFruit(String name)




{




return new NorthernFruit(name);




}




public Veggie createVeggie(String name)




{




return new NorthernVeggie(name);




}




}




public class TropicalGardener implements Gardener




{




public Fruit createFruit(String name)




{




return new TropicalFruit(name);




}




public Veggie createVeggie(String name)




{




return new TropicalVeggie(name);




}






}

这样客户端只需要创建具体工厂的实例,然后调用工厂对象的工厂方法就可以得到所需要的产品对象。



抽象工厂模式的优点

        抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。

 

抽象工厂模式的缺点

       产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

适用场景

       当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。






标签:return,name,模式,工厂,抽象,public,String
From: https://blog.51cto.com/u_15928064/5984702

相关文章

  • 单例模式和多例模式的总结
    学习交流关注微信公众号:钟渊博客今天开始学习设计模式之单例和多例单例模式的关键有两点:1.构造方法为私有,这样外界就不能随意调用。2.get的方法为静态,由类直接调用 多例模......
  • 适配器模式
    概述《设计模式》一书中对“适配器模式”的动机描述如下:将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作......
  • 笔记本 AUTO模式是什么意思
    相关文章电脑AUTO是什么意思https://zhidao.baidu.com/question/1645428036244428940.html##简介电脑屏幕、显示器上的按键“AUTO”是用来自动校对屏幕显示的位置的按......
  • python设计模式
    设计模式设计模式中使用了一个接口类abc:AbstractBaseClasses作用:在代码中定义和使用抽象基类进行API检查。​为什么使用abc模块Abstractbaseclasses由一组接口组......
  • redis单节点与集群模式
    23.redis实战Dockerfileroot@k8s-master1:~/k8s-data/dockerfile/web/magedu/redis#catDockerfile#RedisImageFROMharbor.nbrhce.com/baseimages/centos:7.9.20......
  • 基于 Dojo toolkit 实现 web2.0 的 MVC 模式
    前言MVC模式是设计模式中的经典模式,它可以有效的分离数据层,展示层,和业务逻辑层。Web2.0技术由于其良好的用户体验被广泛应用于WEB应用的展示层。但是在传统的web开发......
  • abstract抽象类与抽象方法
    abstract抽象类与抽象方法//abstract抽象类--必须被继承,只能单继承(---接口可以多继承)publicabstractclassAction{//abstract抽象方法只有方法名字......
  • 使用Qt和Interpreter设计模式开发计算器(附源码)
    计算器软件其实有很多种,但是基本上都是模仿计算器,用鼠标点击按键来操作,这次我们反其道而行之,采用类似文本输入的操作方式。功能1.键盘输入算式,回车后计算结果。2.根据当前......
  • KMP字符串模式匹配详解
    KMP字符串模式匹配详解KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度......
  • 单例模式
    概述《设计模式》一书中对单例模式的“动机”描述如下:保证一个额类仅有一个实例,并提供一个访问它的全局访问点一般情况下,为了避免资源的浪费,可以考虑将一些不可变类......