其他分享
首页 > 其他分享> > 三种工厂设计模式

三种工厂设计模式

作者:互联网

三种工厂模式

我们平时说的工厂设计模式包含简单工厂工厂模式,工厂方法模式和抽象工厂模式。

总结就是如下:

简单工厂

简单工厂,顾名思义简单,开发起来迅速。

Show Me The Code

interface Phone {
}

class MiPhone implements Phone {
}

class IPhone implements Phone {
}

public class SimplePhoneFactory {
    public static Phone build(String type) {
        if ("mi".equals(type)) {
            return new MiPhone();
        } else if ("apple".equals(type)) {
            return new IPhone();
        }

        // "还不支持代工这个手机品牌"
        return null;
    }
}

// 生产一台小米手机
Phone miPhone = SimplePhoneFactory.build("mi");
// 生产一台苹果手机
Phone iphone = SimplePhoneFactory.build("apple");

那生产一台魅族手机呢?是不是去生产方法里,添加魅族的类型即可呢。确实是这样。

那有没有到他的缺点呢?不遵循开闭原则,开闭原则讲的是对扩展开放,对修改关闭。我们新增魅族就是扩展,增加就要修改旧方法,那就不符合修改关闭原则。

工厂方法

工厂方法,准确来说应该叫做抽象工厂方法。因为本类不负责生产对象,而将生产对象的任务交给子类来完成。

大家看到这里有没有觉得跟模板方法相似,模板方法也是本类中定义好流程,具体的实现交给子类来完成。

既然叫工厂方法,重点就在子类实现工厂方法。

Show Me The Code

public class PhoneFactory {
    public abstract Phone build();
}

class MiFactory extends PhoneFactory {
    @Override
    public Phone build() {
        return new MiPhone();
    }
}

class AppleFactory extends PhoneFactory {
    @Override
    public Phone build() {
        return new IPhone();
    }
}

// 生产一台小米手机
Phone miPhone = new MiFactory().build();
// 生产一台苹果手机
Phone iphone = new AppleFactory().build();

看到工厂方法的优势了吧,假如要生产魅族手机,只需要新增一个魅族手机工厂即可。不要修改旧代码。

抽象工厂

Show Me The Code

interface Pad {
}

class MiPad implements Pad {
}

class IPad implements Pad {
}

public abstract class AbstractFactory {
    public abstract Phone buildPhone();

    public abstract Pad buildPad();
}

class MiFactory extends AbstractFactory {
    @Override
    public Phone buildPhone() {
        return new MiPhone();
    }

    @Override
    public Pad buildPad() {
        return new MiPad();
    }
}

class AppleFactory extends AbstractFactory {
    @Override
    public Phone buildPhone() {
        return new IPhone();
    }

    @Override
    public Pad buildPad() {
        return new IPad();
    }
}

// 生产一台小米手机
Phone miPhone = new MiFactory().buildPhone();
// 生产一台小米pad
Pad pad = new MiFactory().buildPad();
// 生产一台苹果手机
Phone iphone = new AppleFactory().buildPhone();
// 生产一台ipad
Pad ipad = new AppleFactory().buildPad();

其实上面这些抽象类,你改为接口也是可以的。

标签:return,class,工厂,Phone,三种,new,设计模式,public
来源: https://www.cnblogs.com/okbuok/p/16492164.html