💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### 工厂方法模式 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。(摘抄) 工厂方法模式和简单工厂模式都是用于去创建新的类,但是工厂方法模式传承了简单工厂模式封装对象创建的过程,同时也改掉了简单工厂模式违背开放——封闭原则的缺点。 简单工厂模式,如果需要生产/去掉一个子类的话,那么需要在SimpleFactory类中修改 switch case 语句,所以违背了开放——封闭原则。 工厂方法创建对象是通过子工厂来创建,所以添加或删除子类的话是不需要改变原有的代码的。 ~~~ class Factory { public Product create() { // TODO Auto-generated method stub return null; } } class AFactory extends Factory { public Product create() { // TODO Auto-generated method stub return new AProduct(); } } class BFactory extends Factory { public Product create() { // TODO Auto-generated method stub return new BProduct(); } } class Product { public void domethod() { // TODO Auto-generated method stub } } class AProduct extends Product { public void domethod() { // TODO Auto-generated method stub } } class BProduct extends Product { public void domethod() { // TODO Auto-generated method stub } } //新增类 class CFactory extends Factory { public Product create() { return new CProduct(); } } class CProduct extends Product { public void domethod() { } } public static void main() { Factory factory = new AFactory(); Product product = factory.create(); product.domethod(); //新增一个类的话,那么只需要添加,而不需要修改原有代码,因为生产类的判断交给了客户端 factory = new CFactory(); Product newP = factory.create(); newP.domethod(); } ~~~ 工厂方法模式差不多也就这样,还是那句话实际使用中必须活学活用,多种模式结合出来的四不像模式,也许才是正确的使用方法。。。 话说《大话》的例子越来越扯了。。。感觉解释还是蛮清楚,就是例子有点蛋疼,但是我也还蛮佩服作者,这样子也可以圆过来。。。 好希望自己把这本书看完之后,可以去看下那本Gof写的原版的设计模式,正好提升一下英文水平