[Design Pattern]:Factory

    技术2022-05-11  134

    工厂模式(Factory)是我们最常用的模式,是用来创建对象的,它就相当于创建对象的new。 主要有以下三种Factory模式:

    Simple Factory模式专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。

    Factory Method模式将对象的创建交由父类中定义的一个标准方法来完成,而不是其构造函数究竟应该创建何种对象由具体的子类负责决定。

    Abstract Factory模式提供一个共同的接口来创建相互关联的多个对象。

    1 - Simple Factory模式:例:某个应用需要创建大量的Fish类,如Crucian等,而不只是Crap。抽象出的接口Fish里有方法swim() 我们要创建实例时,往往用下面的方法:

    Fish crap = new Crap();Fish crucian = new Crucian();

    如果要创建大量的Fish对象,这种方法就显得效率低下。采用简单工厂方法:

    interface Fish{    public void swim();}

    class Factory{    public static Fish factory(String type){        if (type.equalsIgnoreCase("carp")){            return new Carp();        }        else if (type.equalsIgnoreCase("crucian")){            return new Crucian();        }        else{            return null;        }    }}

    class Carp implements Fish{    public void swim(){        System.out.println("Carp can swim!");    }}

    class Crucian implements Fish{    public void swim(){        System.out.println("Crucian can swim!");    }}

    public class Test{    public static void main(String args[]){        Fish carp = Factory.factory("carp");        carp.swim();    }}

    2 - Factory Method模式:在工厂方法中,核心工厂不再负责所有商品创建,它把具体的创建工作交给具体的子类去做。 这样,允许在系统不修改具体工厂角色的情况下创建出新的产品。

    interface Creator{    public Fish factory();}

    interface Fish{    public void swim();}

    class Carp implements Fish{    public void swim(){        System.out.println("Carp can swim!");    }}

    class Crucian implements Fish{    public void swim(){        System.out.println("Crucian can swim!");     }}

    class CarpCreator implements Creator{    public Fish factory(){        return new Carp();    }}

    class CrucianCreator implements Creator{    public Fish factory(){        return new Crucian();    }}

    public class Test{    public static void main(String args[]){        CarpCreator carp = new CarpCreator();        carp.factory().swim();    }}

    3 - Abstract Factory模式:抽象工厂又称工具箱(KIT),它提供一个创建相关或相互依赖对象的接口,无需指定具体类。

    使用指南:1. 一个系统要独立于它的产品的创建、组合和表示时2. 一个系统要生产多个产品族,而系统只消费其中某一族的产品3. 当设计者要强调一系列相关的产品对象的设计以便进行联合使用时4. 当系统提供一个产品类库时,所有产品以同样的接口出现,从而使客户端不依赖于实现

    如商品有鱼类和水果类等,同时鱼类可能有热带、温带之分,水果也如此。

    interface Creator{    public Fish createFish();    public Fruit createFruit();}

    interface Fish{}interface Fruit{}

    class TropicalFish implements Fish{}class TropicalFruit implements Fruit{}class TemperateFish implements Fish{}class TemperateFruit implements Fruit{}

    class TropicalFactory implements Creator{    public Fish createFish(){        return new TropicalFish();    }     public Fruit createFruit(){        return new TropicalFruit();    }}

    class TemperateFactory implements Creator{    public Fish createFish(){        return new TemperateFish();    }     public Fruit createFruit(){        return new TemperateFruit();    }}

    public class Test{    public static void main(String args[]){        TropicalFactory crap = new TropicalFactory();        crap.createFish();    }}


    最新回复(0)