• 工厂模式


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

  • 相关阅读:
    我的“.vimrc”配置
    js写的简单购物车2
    js写的简单购物车
    用css3绘制你需要的几何图形
    给父级DIV清除浮动
    HTML中canvas的大小调整
    Python
    Python文本编辑器推荐
    jQuery mobile基础
    Bootstrap网格系统
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/3792645.html
Copyright © 2020-2023  润新知