zoukankan      html  css  js  c++  java
  • 简单工厂

    转载请注明出处。!!http://blog.csdn.net/zhonghuan1992

    所有的人都补码github上:https://github.com/ZHONGHuanGit/DesignPattern


    跟着ZHONGHuan学习设计模式

    简单工厂

    简单介绍:

             从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之中的一个。

    简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

     

    类图:

            

             从UML类图中。能够看出,简单工厂模式的意思,就是把一个类内部,须要生成的部分,提取出来,变为一个工厂。通过工厂来new对象。

             如果我们要吃苹果了,我们能够在代码中new一个苹果出来;当我们须要吃香蕉了。我们在代码中new一个香蕉出来。

    这样的做法你会不会认为麻烦,new的事情都要自己做。所以能够把new的事情交给一个工厂来做(顾名思义,工厂是生产东西的地方)。而简单工厂通过传进来的參数,决定生产什么产品。

    言语表达不清,请看以下的代码:

     

    代码:

    当我们一開始没有使用简单工厂模式,可能。我们会这样做。看以下的代码

    class apple{
             public apple(){
                       System.out.println("生产了一个苹果");
             }
    }
     
    class banana{
             public banana(){
                       System.out.println("生产了一个香蕉");
             }
    }
     
    public class Main{
             public static void main(String[] args){
                       applea=new apple();
                       bananab=new banana();
             }
    }


    我们须要什么,则自己在代码中new出来,这样有时候是非常方便的,但有时候。我们想想这种情况,代码比較复杂,我们希望非常多事情不是交给主程序来做。而是把new这种事情交给一个工厂来做,这样。在后面更改的时候,我就不用一个一个在主程序代码中去审查,而是在工厂代码中统一更改。

    看简单工厂模式的代码:

    class fruit{
            
    }
    class apple extends fruit{
             public apple(){
                       System.out.println("生产了一个苹果");
             }
    }
     
    class banana extends fruit{
             public banana(){
                       System.out.println("生产了一个香蕉");
             }
    }
     
    class Factory{
             //通过传进来的參数str,来决定生产什么产品
             public fruit create(String str){
                       if(str.equals("apple"))
                                return new apple();
                       if(str.equals("banana"))
                                return new banana();
                       return null;
             }
    }
     
    public class Main{
             public static void main(String[] args){
                       Factory fac=new Factory();
                       apple a=(apple)fac.create("apple");//传进apple。生产apple
                       banana b=(banana)fac.create("banana");
             }
    }


    希望上述代码可以表述清楚。

     

    为什么要简单工厂模式?看以下简单工厂模式的长处:

             这个模式的核心是工厂,这个工厂类有自己的逻辑。就是他懂得依据传进来的參数决定创造什么样的产品。client(就是调用工厂类方法的)不用管创建对象的事情,不过知道告诉工厂类。他要什么。然后得到什么。这样实现了创建对象责任的切割。

     

    简单工厂模式的缺点:

             没有完美的东西嘛,并且简单工厂离完美还差得远呢!这个模式关键缺点就是。工厂类好像是一个上帝一样。创造了全部。从科学的角度上说。上帝是不存在的。

    所以,当全部的创造对象都放在一个工厂类的时候。可想而知。这个工厂类是多么的复杂。

    所以,当产品多的时候。谨慎考虑是否使用该模式。

     

    遵循的原则:

             讨论一下简单工厂遵循的原则,顺便回想一下。

             比較明显的。简单工厂遵循了开闭原则

    对开闭原则忘了。请看这里http://blog.csdn.net/zhonghuan1992/article/details/37391441)设想一下。当我们须要新的产品的时候。比方客人想吃西瓜了(夏天嘛,吃西瓜解暑),该模式不用更改原来的代码,不过写一个新的类继承自fruit,然后,共产类中添加代码。这样就是满足了对拓展开放。对改动关闭的开闭原则

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    谁说AI看不懂视频?
    为什么说容器的崛起预示着云原生时代到来?
    小熊派开发实践丨漫谈LiteOS之传感器移植
    华为云如何赋能无人车飞驰?从这群AI热血少年谈起
    趣味科普丨一文读懂云服务器的那些事儿
    【API进阶之路】研发需求突增3倍,测试团队集体闹离职
    这个应用魔方厉害了,让软件开发者效率提升10倍
    数据安全无小事:揭秘华为云GaussDB(openGauss)全密态数据库
    数据湖探索DLI新功能:基于openLooKeng的交互式分析
    基本数据类型与表达式5 零基础入门学习Delphi06
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4630756.html
Copyright © 2011-2022 走看看