工厂模式

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