抽象工厂模式的主要角色如下。
-
抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。
-
具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
-
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
-
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系
抽象工厂:
/**
* 抽象工厂,电器工厂接口
* */
public interface ApplianceFatory {
/**
* 生产电视机
* */
public Appliance makeTv();
/**
* 生产电冰箱
* */
public Appliance makeIce();
/**
* 生产手机
* */
public Appliance makePone();
}
具体工厂:
/**
* 具体工厂,海尔电器工厂
* */
public class HaierApplianceFatory extends AbstractApplianceFatory implements ApplianceFatory {
@Override
public Appliance makeTv() {
return new HaierTv();
}
@Override
public Appliance makeIce() {
return new HaierIceBox();
}
}
/**
* 具体工厂,Tcl电器工厂
* */
public class TclApplianceFactory implements ApplianceFatory{
@Override
public Appliance makeTv() {
return new TclTv();
}
@Override
public Appliance makeIce() {
return new TclIceBox();
}
@Override
public Appliance makePone() {
return new TclPone();
}
}
public abstract class AbstractApplianceFatory implements ApplianceFatory{
@Override
public Appliance makePone() {
return null;
}
}
抽象产品:
/**
* 抽象产品,电器接口
* */
public interface Appliance {
public void show();
}
/**
* 抽象产品,tcl电器类
* */
public abstract class TclAppliance implements Appliance{
public abstract void open();
}
/**
* 抽象产品 ,海尔产品,海尔电器类
* */
public abstract class HaierAppliance implements Appliance{
}
具体产品:
/**
* 具体的产品,海尔电视机
* */
public class HaierTv extends HaierAppliance implements Appliance{
@Override
public void show() {
System.out.println("海尔电视机");
}
}
/**
* 具体产品,海尔电冰箱
* */
public class HaierIceBox extends HaierAppliance implements Appliance{
@Override
public void show() {
System.out.println("海尔电冰箱");
}
}
/**
* 具体的产品,海尔电视机
* */
public class HaierTv extends HaierAppliance implements Appliance{
@Override
public void show() {
System.out.println("海尔电视机");
}
}
/**
* 具体产品,Tcl电冰箱
* */
public class TclIceBox extends TclAppliance implements Appliance{
@Override
public void show() {
System.out.println("Tcl电冰箱");
}
@Override
public void open() {
System.out.println("我能打开冰箱");
}
}
/**
* 具体产品,Tcl手机
* */
public class TclPone extends TclAppliance implements Appliance{
@Override
public void show() {
System.out.println("我是手机");
}
@Override
public void open() {
System.out.println("手机我能开机");
}
public void open1(){
System.out.println("我的手机能开机");
}
}
测试类:
public class Test {
public static void main(String[] args) {
//海尔电器工厂
HaierApplianceFatory haierApplianceFatory = new HaierApplianceFatory();
//海尔电视机
Appliance haiertv = haierApplianceFatory.makeTv();
haiertv.show();
//海尔电冰箱
Appliance haierIceBox = haierApplianceFatory.makeIce();
haierIceBox.show();
//TclΠ电器工厂
TclApplianceFactory tclApplianceFactory = new TclApplianceFactory();
//tcl电视机
Appliance tclTv = tclApplianceFactory.makeTv();
tclTv.show();
//tcl电冰箱
Appliance tclIce = tclApplianceFactory.makeIce();
tclIce.show();
TclIceBox tclIceBox = (TclIceBox)tclIce;
tclIceBox.open();
Appliance pone = tclApplianceFactory.makePone();
pone.show();
TclPone pone1 = (TclPone) pone;
pone1.open1();
/* TclPone tclPone = new TclPone();
tclPone.open1();*/
}
}