抽象工厂模式


一、抽象工厂模式涉及角色

1、AbstractFactory:声明一个创建抽象产品对象的接口;
2、ConcreteFactory:实现创建具体产品的操作,实现了抽象工厂接口 || 继承了抽象产品父类;
3、AbstractProduct:为一类产品对象声明一个接口;
4、ConcreteProduct:定义一个将被具体工厂创建的产品对象,实现了抽象产品接口 || 继承了抽象产品父类;
5、Client:仅使用抽象产品和抽象工厂类声明的接口。



二、使用场景和说明

1、一个系统要独立于它的产品的创建、组装和表示时;
2、一个系统要由多个产品系列中的一个来配置时,即有多个产品等级时候,针对一个产品族。
3、要强调一系列相关的产品对象的设计以便进行联合使用时;
4、当你提供一个产品类库,而只是想显示他们的接口而不是实现时;

5、抽象工厂模式的缺点:产品族扩展比较困难,而不是产品等级。


三、代码示例  

public abstract class CPU {
    public abstract void createCpu();
}

public class CPUA1  extends CPU {
    @Override
    public void createCpu() {
        System. out.println( "制造A1型号的CPU");
    }
}

public class CPUA2  extends CPU {
    @Override
    public void createCpu() {
        System. out.println( "制造A2型号的CPU");
    }
}

public abstract class Display {
    public abstract void createDispalyer();
}

public class DisplayA1  extends Display {
    @Override
    public void createDispalyer() {
        System. out.println( "制造A1型号的显示器");
    }
}

public class DisplayA2  extends Display {
    @Override
    public void createDispalyer() {
        System. out.println( "制造A2型号的显示器");
    }
}

public abstract class ComCreater {
    public abstract CPU createCPU();
    public abstract Display createDisplay();
}

public class CreateComA1  extends ComCreater {
    @Override
    public CPU createCPU() {
        return new CPUA1();
    }

    @Override
    public Display createDisplay() {
        return new DisplayA1();
    }
}

public class CreateComA2  extends ComCreater {
    @Override
    public CPU createCPU() {
        return new CPUA2();
    }

    @Override
    public Display createDisplay() {
        return new DisplayA2();
    }
}

public class ClientTest {
    public static void main(String args[]) {

        ComCreater createA1 =  new CreateComA1();
        ComCreater createA2 =  new CreateComA2();

        //制造型号为A1的电脑
        CPU cpua1 = createA1.createCPU();
        Display displayA1 = createA1.createDisplay();
        cpua1.createCpu();
        displayA1.createDispalyer();

        //制造型号为A2的电脑
        CPU cpua2 = createA2.createCPU();
        Display displayA2 = createA2.createDisplay();
        cpua2.createCpu();
        displayA2.createDispalyer();

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值