抽象工厂模式

来源:互联网 发布:河南seo技术培训 编辑:程序博客网 时间:2024/06/05 10:12

1类图

这里写图片描述

2定义

为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定他们的具体类。

3应用场景

3.1一个对象有相同的约束时可以使用。

3.2例如组装汽车轮胎有普通和越野,发动机有国产和进口就可以使用抽象工厂模式。汽车定义为抽象工厂类,轮胎类为一个抽象产品类,有具体的普通轮胎产品类和越野轮胎产品类等,具体工厂1类内有普通轮胎的实现和国产发动机的实现。具体工厂类2有越野轮胎的实现和进口发动机的实现。

4抽象产品类A

public abstract class AbstractProductA {    public abstract void method();}

5抽象产品类B

public abstract class AbstractProductB {    public abstract void method();}

6具体产品类A1

public class ConcreteProductA1 extends AbstractProductA {    @Override    public void method() {        // TODO Auto-generated method stub        System.out.println("A1");    }}

7具体产品类A2

public class ConcernProductA2 extends AbstractProductA {    @Override    public void method() {        // TODO Auto-generated method stub        System.out.println("A2");    }}

8具体产品类B1

public class ConcreteProductB1 extends AbstractProductB {    @Override    public void method() {        // TODO Auto-generated method stub        System.out.println("B1");    }}

9具体产品类B2

public class ConcernProductB2 extends AbstractProductB {    @Override    public void method() {        // TODO Auto-generated method stub        System.out.println("B2");    }}

10抽象工厂类

public abstract class AbstractFactory {    public abstract AbstractProductA createProductA();    public abstract AbstractProductB createProductB();}

11具体工厂类1

public class ConcernFactory1 extends AbstractFactory {    @Override    public AbstractProductA createProductA() {        // TODO Auto-generated method stub        return new ConcreteProductA1();    }    @Override    public AbstractProductB createProductB() {        // TODO Auto-generated method stub        return new ConcreteProductB1();    }}

12具体工厂类2

public class ConcernFactory2 extends AbstractFactory {    @Override    public AbstractProductA createProductA() {        // TODO Auto-generated method stub        return new ConcernProductA2();    }    @Override    public AbstractProductB createProductB() {        // TODO Auto-generated method stub        return new ConcernProductB2();    }}

13测试类

public class test {    public static void main(String[] args) {        ConcernFactory1 c1 = new ConcernFactory1();        c1.createProductA().method();        c1.createProductB().method();    }}
原创粉丝点击