一、抽象工厂模式
1.1 题目:
计算机包含内存(RAM)、CPU等硬件设备,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。
1.2类图:
1.3程序代码:
//定义接口CPU
publicinterface CPU {
void create();
}
//定义接口RAM
public interface RAM {
void create();
}
//定义类PcCPU
publicclass PcCPU implements CPU{
publicvoid create() {
System.out.println(" win cpu");
}
}
//定义类PcRAM
publicclass PcRAM implements RAM {
publicvoid create() {
System.out.println("win RAM");
}
}
//定义类MacCPU
publicclass MacCPU implements CPU{
publicvoid create() {
System.out.println("mac CPU");
}
}
//定义类MacRAM
publicclass MacRAM implements RAM{
publicvoid create() {
System.out.println("mac RAM");
}
}
//定义接口ComputerFactory
interfaceComputerFactory {
CPU produceCPU();
RAM produceRAM();
}
//定义类ComputerPartsClient
publicclassComputerPartsClient {
publicstaticvoid main(String args[]) {
ComputerFactory factory;
CPU cpu;
RAM ram;
factory = new PcFactory();
cpu = factory.produceCPU();
cpu.create();
ram = factory.produceRAM();
ram.create();
ComputerFactory factory1;
factory1 = new MacFactory();
cpu = factory1.produceCPU();
cpu.create();
ram = factory1.produceRAM();
ram.create();
}
}
//定义类PcFactory
publicclass PcFactory implements ComputerFactory {
public PcCPU produceCPU() {
System.out.println("请使用PC产品族的CPU");
returnnew PcCPU();
}
public PcRAM produceRAM() {
System.out.println("请使用PC产品族的RAM");
returnnew PcRAM();
}
}
//定义类MacFactory
publicclass MacFactory implements ComputerFactory{
public MacCPU produceCPU() {
System.out.println("请使用Mac产品族的CPU");
returnnew MacCPU();
}
public MacRAM produceRAM() {
System.out.println("请使用Mac产品族的RAM");
returnnew MacRAM();
}
}
1.4运行结果:
二、桥接模式
2.1题目:
如果系统中某对象有三个维度,如某日志
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
器既可以支持不同的操作系统(Windows、Linux、Unix),还可以支持多种编程语言(C#、C++、Java),并且可以使用不同的输出方式(File、Console、XML)。请使用桥接模式设计该系统。
2.2类图:
2.3程序代码:
定义类Language
publicabstractclass Language
{
protected Logger log;
publicvoid setLogger(Logger log)
{
this.log = log;
}
publicabstractvoid writeLog();
}
定义类 C
publicclass C extends Language{
publicvoid writeLog(){
System.out.println("用C开发该系统");
this.log.outwork();
}
}
定义类 Java
publicclass Java extends Language {
publicvoid writeLog(){
System.out.println("用JAVA开发该系统");
this.log.outwork();
}
}
定义类CAA
publicclass CAA extends Language{
publicvoid writeLog(){
System.out.println("用C++开发该系统");
this.log.outwork();
}
}
定义类Operation
publicabstractclass Operation {
protected Language language;
publicvoid setLanguage(Language language) {
this.language = language;
}
publicabstractvoid writeLanguageVersion();
}
定义类Windows
publicclass Windows extends Operation{
publicvoid writeLanguageVersion() {
System.out.println("基于Windows操作系统!");
this.language.writeLog();
}
}
定义类Linux
publicclass Linux extends Operation{
publicvoid writeLanguageVersion() {
System.out.println("基于Linux操作系统!");
this.language.writeLog();
}
}
定义类Unix
publicclass Unix extends Operation{
publicvoid writeLanguageVersion() {
System.out.println("基于Unix操作系统!");
this.language.writeLog();
}
}
定义接口Logger
publicinterface Logger {
publicvoid outwork();
}
定义类ConsoleLogger
publicclass ConsoleLogger implements Logger{
publicvoid outwork() {
System.out.println("输出流到控制台日志完成");
}
}
定义类FileLogger
publicclass FileLogger implements Logger{
publicvoid outwork() {
System.out.println("输出流到文件日志完成");
}
}
定义类Client
publicclass Client {
publicstaticvoid main(String[] args) {
Logger filelog = new FileLogger();
Logger consolelog = new ConsoleLogger();
Language java = new Java();
java.setLogger(filelog);
Language caa = new CAA();
caa.setLogger(consolelog);
Language c = new C();
c.setLogger(consolelog);
Operation windows = new Windows();
windows.setLanguage(caa);
windows.writeLanguageVersion();
System.out.println("***************************");
Operation linux = new Linux();
linux.setLanguage(java);
linux.writeLanguageVersion();
System.out.println("***************************");
Operation unix = new Unix();
unix.setLanguage(c);
unix.writeLanguageVersion();
}
}
2.4运行结果: