美文网首页
工厂方法模式

工厂方法模式

作者: 谢凯 | 来源:发表于2016-06-20 01:54 被阅读0次

    工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。工厂方法模式是一种类创建型模式。

    在工厂方法模式中,与简单工厂的区别在于,不是由一个统一的工厂来创建所有的对象,而是一个子对象产品对应一个具体的工厂。

    工厂方法模式结构图.jpg
    • Product(抽象产品)

    它是定义产品的接口,是工厂方法模式所创建对象的超类型,也就是产品对象的公共父类。和简单工厂模式中的写法一样。

    • ConcreteProduct(具体产品)

    它实现了抽象产品接口,某种类型的具体产品由专门的具体工厂创建,具体工厂和具体产品之间一一对应。和简单工厂模式中的写法一样。

    • Factory(抽象工厂)

    在抽象工厂类中,声明了工厂方法(Factory Method),用于返回一个产品。抽象工厂是工厂方法模式的核心,所有创建对象的工厂类都必须实现该接口。

    public interface MapFactory {
    
        // GWIMapBaseLayout createMapView();
        
        GWIMapBaseLayout createMapView(Context context);
    }
    
    • ConcreteFactory(具体工厂)

    它是抽象工厂类的子类,实现了抽象工厂中定义的工厂方法,并可由客户端调用,返回一个具体产品类的实例。

    public class BaiduOutdoorMapFactory implements MapFactory {
    
        @Override
        public GWIMapBaseLayout createMapView(Context context) {
            LayoutInflater inflater = LayoutInflater.from(context);
            return (GWIMapBaseLayout) inflater.inflate(R.layout.baidu_map_layout, null);
        }
    }
    
    • 调用方式

    调用方只需要关注工厂类即可,需要什么对象产品就拿到对应的工厂类来创建对应的产品。

    MapFactory mapFactory = new BaiduOutdoorMapFactory();
    GWIMapBaseLayout gwiMapBaseLayout = mapFactory.createMapView(this);
    

    • 工厂方法模式基本包含了简单工厂模式的所有优点,并且解决了简单工厂模式的一个缺点,不再是一个工厂创建所有的子对象,而是由一个抽象工厂,然后很多的子工厂类来创建对应的子对象,这样避免了一个静态工厂方法过于复杂,容错率低,以后新增子对象只需要增加一个子对象类和一个具体工厂类即可,不需要修改原有的代码,完全符合了开闭原则。

    • 但是由于每个工厂只生产一个类,如果子对象具体产品过多的话,项目中的类是成对增加的,一个子对象类一个具体工厂类,这样的话项目中会有很多的类。

    相关文章

      网友评论

          本文标题:工厂方法模式

          本文链接:https://www.haomeiwen.com/subject/fgpbdttx.html