设计模式之抽象工厂模式

**

设计模式之抽象工厂模式

**
抽象工厂模式(Abstract Factory Pattern)定义
provide an interface for creating families of related or dependent objects without specifying their concrete classes.
(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。)

图解
这里写图片描述

优点

  • 封装性,每个产品的实现类不是高层模块要关心的,它要关心的是什么?是接口,是抽象,它不关心对象是如何创建出来,是由谁负责的?工厂类,只要知道工厂类是谁,我就能创建出一个需要的对象,省时省力,优秀设计就应该如此
  • 产品族内的约束为非公开状态

代码详解
1.首先创建一个抽象产品A类


public abstract class AbstractProductA {
    //每个商品都共有都方法
    public void shareMethod(){

    }

    //每个商品特有都方法
    public abstract void doSomething();

}

2.然后为它指定两道工序ProductA1.class ProductA2.class

public class ProductA1 extends AbstractProductA {

    //产品A1需要做的事情
    @Override
    public void doSomething() {

    }
}
public class ProductA2 extends  AbstractProductA {

    //产品A2需要做的事情
    @Override
    public void doSomething() {

    }
}

3.接着创建一个抽象产品B类

public abstract class AbstractProductB {

    //每个商品都有方法
    public void shareMethod(){

    }
    //每个商品特有都方法
    public abstract void doSomething();
}

4.然后为它指定两道工序ProductB1.class ProductB2.class

public class ProductB1 extends AbstractProductB {


    //产品B1需要做的事情
    @Override
    public void doSomething() {

    }
}
public class ProductB2 extends AbstractProductB{


    //产品B1需要做的事情
    @Override
    public void doSomething() {

    }
}

5.创建一个工厂抽象类


public abstract class AbstractCreator {

    //生产产品A
    public abstract AbstractProductA createProductA();

    //生产产品B
    public abstract AbstractProductB createProductB();
}

6.创建一个工厂类Creator1.class完成产品的第一套工序,在创建一个工厂类Creator2.class完成产品的第二套工序

public class Creator1 extends AbstractCreator {


    //生产产品A的A1类产品
    @Override
    public AbstractProductA createProductA() {
        return new ProductA1();
    }

    //生产产品B的B1类产品
    @Override
    public AbstractProductB createProductB() {
        return new ProductB1();
    }
}

public class Creator2 extends AbstractCreator {


    //生产产品A的A2类产品
    @Override
    public AbstractProductA createProductA() {
        return new ProductA2();
    }

    //生产产品B的B2类产品
    @Override
    public AbstractProductB createProductB() {
        return new ProductB2();
    }
}

7.开工创建产品

public class Client {

    @Test
    public void test(){
        //1类产品创建工厂
        AbstractCreator creator1 = new Creator1();
        //2类产品的创建工厂
        AbstractCreator creator2 = new Creator2();

        //创建出1类产品
        AbstractProductA productA1 = creator1.createProductA();
        AbstractProductB productB1 = creator1.createProductB();

        //创建出2类产品
        AbstractProductA productA2 = creator2.createProductA();
        AbstractProductB productB2 = creator2.createProductB();

        //做自己想做的事情


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值