抽象工厂模式(Abstract Factory Pattern)

来源:互联网 发布:腾讯视频会员破解软件 编辑:程序博客网 时间:2024/06/11 03:03

抽象工厂模式定义:抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类

其实和策略模式还是蛮像的,只不过现在抽象分离出去的不是一个普通类,而是一个工厂类,并且工厂类依赖于多个抽象类(比如:酱料和火腿)

public class Store {private AbstractSourceFactory factory;public Store(AbstractSourceFactory factory){this.factory = factory;}public void getSource(){factory.sendSauce();factory.sendHam();}}
public abstract class AbstractSourceFactory {public abstract Sauce sendSauce();public abstract Ham sendHam();}
public class NYSourceFactory extends AbstractSourceFactory {public Sauce sendSauce() {return new TomatoSauce();}public Ham sendHam() {return new OriginalHam();}}
public class CHSourceFactory extends AbstractSourceFactory {public Sauce sendSauce() {return new StrawBerrySauce();}public Ham sendHam() {return new BakeHam();}}
public class Ham {protected String des;protected String getDes(){return this.des;}}
public class OriginalHam extends Ham {public OriginalHam(){System.out.println("OriginalHam");}}
public class BakeHam extends Ham {public BakeHam(){System.out.println("BakeHam");}}
public class Sauce {protected String des;protected String getDes(){return this.des;}}
public class StrawBerrySauce extends Sauce {public StrawBerrySauce(){System.out.println("StrawBerrySauce");}}
public class TomatoSauce extends Sauce {public TomatoSauce(){System.out.println("TomatoSauce");}}

 

ps:

缺点比较明显,当工厂方法中需要加上一类抽象或者移除一类抽象的时候(比如移除Hum),需要修改所有的具体工厂

但是考虑到抽象工厂方法通常用来创建一个产品家族(原料),比如,制作眼镜的原料一般是固定的(google眼镜除外),除非有创新,否则常年不会变,这时候使用抽象工厂方法就没有上面的扩展性问题,一定范围内不会变的东西不需要太考虑其扩展性

 

 

 

 

原创粉丝点击