具体代码请看尚硅谷java设计模式。
简单工厂模式
比如在经典案例中,有中国披萨,伦敦披萨,在披萨的订单中就会用到这些披萨对象,我们常规的方式,通过传入传入的披萨类型去决定要创建哪一种的披萨对象。但是这样会存在一个问题,用披萨对象的地方很多,我们要是都要判断一遍,不满足java设计模式中的开闭原则,此时我们只要创一个类,由这个类来统一决定创建那种披萨,批次订单中创建披萨对象直接调用这个类中的创建方法即可,这个类就称为简单工厂类。
工厂方法模式
当我们的业务进一步拓展,现在是有北京的奶酪披萨,北京的胡椒披萨和伦敦的奶酪披萨,伦敦的胡椒披萨。如果还用简单工厂模式,那么就需要建两个简单工厂类:北京披萨工厂类,伦敦披萨工厂类。这样的话扩展性不是很好(假如再新增一种希腊披萨,披萨订单中还需要加生产这种对象的简单工厂类)。因此引入工厂方法模式,它和简单工厂模式的区别就在于,会把披萨订单类变成抽象类。把创建披萨对象抽象一个抽象方法,并由子类披萨去分别实现创建何种披萨,比如子类北京披萨类,就由传入的类型,去判断是北京胡椒还是奶酪的披萨。这样的话,在披萨订单中,调用创建披萨的方法,就不用管到底是哪里的何种披萨。
抽象工厂模式
抽象工厂模式是对简单工厂模式和工厂方法模式进行了整合,它会创建一个接口类专门定义一个创建披萨对象的抽象方法,再分别创建创建北京披萨和伦敦披萨的工厂类去实现这个接口,并分别去判断由传入的类型决定创建何种披萨对象,由于接口可以多实现,这样就形成了工厂簇,非常好扩展。