问题描述
假设指派这样一个任务:设计一个计算机系统,显示并打印取自数据库的几何形状。用来显示和打印形状的分辨率取决于当前运行系统的计算机:CPU的速度和可用内存。系统必须留意自己对计算机的要求。
这里难点再于,系统必须控制使用哪些驱动程序:低配置机器使用低分辨率驱动程序,高配置机器使用高分辨率的驱动程序。
驱动功能 在低配置机器上,使用…… 在高配置机器上,使用…… 显示 LRDD(低分辨率显示驱动程序) HRDD(高分辨率显示驱动程序) 打印 LPDD(低分辨率打印驱动程序) HPDD(高分辨率打印驱动程序)
类图展示
Abstract Factory模式
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