博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂模式
阅读量:6648 次
发布时间:2019-06-25

本文共 2019 字,大约阅读时间需要 6 分钟。

      工厂模式(Factory Pattern)用于将大量有着共同接口的类实例化,工厂模式可以动态地决定将哪一个类实例化。

      工厂模式有以下集中分类:

      简单工厂模式:又称为静态工厂方法模式。

      工厂方法模式:又称为多态性工厂模式。

      抽象工厂模式:又称为工具箱模式。

     

      简单工厂模式的结构如下所示:

      

      单例模式可以看做是简单工厂模式的特殊形式,工厂,具体产品都集中在一个类里面。

      简单工厂模式的核心是工厂类,工厂类中存在判断逻辑,决定在某种情况下创建什么样的实例。

      缺点就是对于工厂类过于依赖,增加新的具体产品时需要修改工厂类的实现逻辑。

      

     public class HumanBuilder{

          public static Human build(String sex){

               if(sex.equalsIgnoreCase("male")){

                     return new ZhangSan();

              }else if(sex.equalsIgnoreCase("female")){

                    return new Lisi();

              }

          }

     }

     系统中需要创造新的人类的地方可以使用:

     HumanBuilder.build("male");

     HumanBuilder.build("female");

 

     工厂方法模式

     工厂方法模式是简单工厂模式的抽象和推广。

     

      FruitGardener是工厂方法模式的核心,但是FruitGardener不再负责生产具体的对象,而是由其子类去负责生产。

      Class AppleGardener implements FruitGardener{

              private AppleGardener(){}

              private static AppleGardener gardener = null;

              public synchronized static AppleGardener getInstance(){

                       if(gardener == null){

                               gardener = new AppleGardener();

                       }

                       return gardener;

              }

              public  Fruit factory(){

                      return  new Apple();

               }

      }

      需要获取Apple对象时可以使用:

      Fruit  apple  = AppleGardener.getInstance().factory();

      工厂可以每次创建一个新的对象以供使用,也可以只创建一个对象,将对象加入到某个集合中。有获取对象的请求时,先去集合中查找有无合适的实例,有则直接返回,没有就创建并保存至集合,这就是享元模式。

     

     

       抽象工厂模式

       抽象工厂模式是工厂模式最为抽象和最具一般性的形态。

      

       

         “开-闭”原则要求要求一个软件系统在不修改代码的前提下,通过扩展以达到增强功能的目的。    

        Class UnixFactory implements AbstractFactory{

              private UnixFactory (){}

              private static UnixFactory factory = null;

              public synchronized static UnixFactory getInstance(){

                       if(factory == null){

                               factory = new UnixFactory ();

                       }

                       return factory;

              }

              public  Button createButton{

                      return  new UnixButton();

               }             

              public  Text createText{

                      return  new UnixText();

               }

      }   

      需要获取UnixButton对象时可以使用:

      Button button  = UnixFactory .getInstance().createButton();

        

      实际开发工作中利用XML做配置文件,再从XML文件中读取类的名称并实例化也可以看做工厂模式的变种。

     <?xml version="1.0"?>

      <Apple>

         <Constructor Class ="com.AppleConstructor"/>

     </Apple>

     <Pear>

         <Constructor Class ="com.PearConstructor"/>

     </Pear> 

 

     ObjService 0bj = XMLFileParser.parse("text.xml");

     String  appleConstructor = 0bj.objectAt(0).getString('"Class");

     Fruit apple = Class.forName(appleConstructor).newInstance().construct();

转载于:https://www.cnblogs.com/lnlvinso/p/3792645.html

你可能感兴趣的文章
forms身份认证仍然能访问html页面解决办法
查看>>
EXTJS4-----Date控件使用
查看>>
JavaScript基础学习--02属性操作
查看>>
python psutil简单示例
查看>>
VC中CListCtrl设置滚动条在最下边的方法(MSDN中的例子)
查看>>
Requests库详解
查看>>
中文分词
查看>>
js_字符转Unicode
查看>>
二分查找算法
查看>>
mysql基础认识1
查看>>
字体资料
查看>>
leetcode--Divide two integers
查看>>
C#窗体加载和控件加载不同步导致控件闪烁
查看>>
js 2
查看>>
PHP支付宝手机网站支付功能
查看>>
Lambda 表达式
查看>>
【转】Windows_makefile_01
查看>>
[杂谈]记第一次出差有感
查看>>
block的作用
查看>>
poj1163 数字三角形 (动态规划)
查看>>