抽象工厂设计模式

问题描述

假设指派这样一个任务:设计一个计算机系统,显示并打印取自数据库的几何形状。用来显示和打印形状的分辨率取决于当前运行系统的计算机:CPU的速度和可用内存。系统必须留意自己对计算机的要求。
这里难点再于,系统必须控制使用哪些驱动程序:低配置机器使用低分辨率驱动程序,高配置机器使用高分辨率的驱动程序。

驱动功能在低配置机器上,使用……在高配置机器上,使用……
显示LRDD(低分辨率显示驱动程序)HRDD(高分辨率显示驱动程序)
打印LPDD(低分辨率打印驱动程序)HPDD(高分辨率打印驱动程序)

类图展示

Abstract Factory模式

UML类图

Adapter模式

这里写图片描述

编码步骤

1、创建产品的抽象类或者接口

interface DisplayDriver {
    public void display();
}
interface PrintDriver {
    public void print();
}

2、创建产品实例

//Low DisplayDriver
public class LRDD implements DisplayDriver {

    @Override
    public void display() {
        System.out.println("display low");
    }
}
//Low PrintDriver
public class HRDD implements DisplayDriver {

    @Override
    public void display() {
        System.out.println("display high");
    }   
}
//High DisplayDriver
public class LRFD  implements PrintDriver {

    @Override
    public void print() {
        System.out.println("print low");
    }
}
//High PrintDriver
public class HRPD implements PrintDriver {

    @Override
    public void print() {
        System.out.println("print high");
    }   
}

3、创建实体工厂

//创建LowFactory
public class LowResFact extends ResFactory {
    @Override
    public DisplayDriver getDispDrvr() {
        return new LRDD();
    }
    @Override
    public PrintDriver getPrtDrvr() {
        return new LRFD();
    }
}
//创建HighFactory
public class HighResFact extends ResFactory{
    @Override
    public DisplayDriver getDispDrvr() {//定义DisplayDriver为抽象或接口,可以接收子类型
        return new HRDD();//高分辨率显示实体类
    }
    @Override
    public PrintDriver getPrtDrvr() {
        return new HRPD();
    }   
}

4、创建抽象工厂

//创建抽象工厂
public abstract class ResFactory {
    abstract public DisplayDriver getDispDrvr();
    abstract public PrintDriver getPrtDrvr();
}

5、测试类

public class Main {
    public static void main(String[] args){ 
        //生产HighDevice
        ResFactory highFact = new HighResFact();
        highFact.getDispDrvr().display();;
        highFact.getPrtDrvr().print();
    }
}

6、输出显示

display high
print high

功能扩展

需求:添加一个MiddleDevice

1、创建Middle产品实例

//MiddleDisplayDriver
public class MRDD implements DisplayDriver {
    @Override
    public void display() {
        System.out.println("display middle");
    }
}
//MiddlePrintDriver
public class MRPD implements PrintDriver {
    @Override
    public void print() {
        System.out.println("print middle");
    }
}

2、创建Middle的实体工厂

public class MiddleResFactory extends ResFactory {
    @Override
    public DisplayDriver getDispDrvr() {
        return new MRDD();
    }
    @Override
    public PrintDriver getPrtDrvr() {
        return new MRPD();
    }
}

3、测试类

public class Main {
    public static void main(String[] args){     
        ResFactory middleFact = new MiddleResFactory();
        middleFact.getDispDrvr().display();;
        middleFact.getPrtDrvr().print();        
    }
}

输出显示

display middle
print middle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值