设计模式-抽象工厂模式

来源:互联网 发布:移动数据流量监控 编辑:程序博客网 时间:2024/06/05 15:13

一、定义

抽象工厂模式(Abstract Factory Pattern)是一种比较常见的模式,其定义如下:

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。)

抽象工厂模式的通用类图为:

抽象工厂模式的通用类图

//抽象产品类public abstract class AbstractProductA {    public void shareMethod() {        //每个产品共有的方法    }    //每个产品相同方法,不同实现    public abstract void doSomething();}//产品A1的实现类public class ProductA1 extends AbstractProductA {    public void doSomething() {        System.out.println("产品A1的实现方法");    }}//产品A2的实现类public class ProductA2 extends AbstractProductA {    public void doSomething() {        System.out.println("产品A2的实现方法");    }}//抽象工厂类public abstract class AbstractCreator {    public abstract AbstractProductA createProductA();    public abstract AbstractProductB createProductB();}//产品等级1的实现类public class Creator1 extends AbstractCreator {    public AbstractProductA createProductA {        return new ProductA1();    }    public AbstractProductB createProductB() {        return new ProductB1();    }}//产品等级2的实现类public class Creator2 extends AbstractCreator{    public AbstractProductA createProductA() {        return new ProductA2();    }    public AbstractProductB createProductB() {        return new ProductB2();    }}

注意:有M个产品就应该有M个实现工厂类,在每个实现工厂中,实现不同产品族的生成任务。

public class Client {   public static void main(String[] args) {       AbstractCreator creator1 = new Creator1();       AbstractCreator creator2 = new Creator2();       AbstractProductA a1 = creator1.createProductA();       AbstractProductA a2 = creator2.createProductA();       AbstractProductB b1 = creator1.createProductB();       AbstractProductB b2 = creator2.createProductB();   }}

二、应用

2.1 优点

  • 封装性,每个产品的实现类不是高层模块要关心的,他要关心的是接口,是抽象,他不关心对象是如何创建出来。这是由工厂类负责的,只要知道工厂类是谁,我就能创建出一个需要需要的对象。
  • 产品族内的约束为非公开状态。

2.2 缺点

最大缺点就是产品族扩展非常困难。如果我们要增加一个产品,抽象类AbstractCreator要增加一个方法,然后两个实现类都要修改,这违背了开闭原则。

2.3 使用场景

一个对象族(或是一组没有任何关系的对象)都有相同的约束,就可以使用抽象工厂模式。例如一个文本编辑器和一个图片处理器,都是软件实体。但是*nixd下的文本编辑器和windows下的文本编辑器虽然功能和界面都相同,但是代码实现不同,图片处理器也有类似情况。也就是具备了相同的约束条件:操作系统类型。于是我们可以使用抽象工厂模式,产生不同操作系统下的编辑器和图片处理器。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 婴儿车铆钉松了怎么办 扇子上的铆钉松怎么办 锅的把手松了怎么办 奶锅把手松了怎么办 锅的手柄烧坏了怎么办 鞋子上的铆钉生锈了怎么办 包包上的铆钉生锈了怎么办 凉鞋的铆钉生锈了怎么办 扇子的铆钉坏了怎么办 包包的铆钉坏了怎么办 汽车半轴螺丝母拧不动怎么办? 卫衣袖子短了怎么办 u型导轨蚊帐下垂怎么办 100的水管螺纹出漏水怎么办 吊顶螺丝没有防锈处理怎么办 膨胀螺丝洞松了怎么办 膨胀螺丝眼大了怎么办 墙上螺丝孔大了怎么办 膨胀螺丝孔深了怎么办 克霉膨胀栓的线怎么办 摩托车排气管螺丝断了怎么办 汽车轮胎螺丝卸不下来怎么办 内六角螺丝卸不下来怎么办 洗衣机六角螺丝卸不动怎么办 黄油嘴打不进去怎么办 螺杆冷水机氟系统有空气怎么办 脚踏式加油枪皮碗不下去怎么办? 自攻螺丝滑丝怎么办? 大工打小工老板不管怎么办 虾缸的过滤吸虾怎么办 加热棒坏了鱼怎么办 钢材软打孔断钻头怎么办 空调余额下水管检查口按不上怎么办 风机盘管噪音大怎么办 混凝土水泥放少了怎么办 门式钢梁端板连接下料短啦怎么办? 灌桩导管堵了怎么办 公路车尾钩歪了怎么办 铃木羚羊车大灯不亮怎么办 玻璃瓶打碎了里面食物怎么办 玻璃门上轴坏了怎么办