工厂方法模式:
每个具体的工厂只有一个或者一组重载的工厂方法,只能生成一种产品,可能会导致系统存在大量的工厂类,势必会增加系统的开销。
抽象工厂方法:
一个工厂可以生产一系列的产品(一族产品),极大的减少工厂类的数量。
案例:
由于智能家居的发展,一个品牌的家用电器,可以配套使用,现在有TCL的家用电器,和海尔的电器供顾客选择,请你使用抽象工厂模式,实现案例。
类图:
TV接口:
public interface TV {
public String TVBrand();
}
AC接口:
public interface AC {
public String ACBrand();
}
WM接口:
public interface WM {
public String WMBrand();
}
TCLTV类:
public class TCLTV implements TV {
public String TVBrand() {
// TODO Auto-generated method stub
return "TCL电视";
}
}
TCLAC类:
public class TCLAC implements AC{
public String ACBrand() {
// TODO Auto-generated method stub
return "TCL空调";
}
}
TCLWM类:
public class TCLWM implements WM{
public String WMBrand() {
// TODO Auto-generated method stub
return "TCL洗衣机";
}
}
HaierTV类:
public class HaierTV {
public String TVBrand() {
// TODO Auto-generated method stub
return "海尔电视";
}
}
HaierAC:
public class HaierAC implements AC{
public String ACBrand() {
// TODO Auto-generated method stub
return "海尔空调";
}
}
HaierWM:
public class HaierWM implements WM{
public String WMBrand() {
// TODO Auto-generated method stub
return "海尔洗衣机";
}
}
HAfactory接口:
public interface HAfactory {
public String makeAC();
public String makeTV();
public String makeWM();
}
HaierHAFactory:
public class HaierHAFactory implements HAfactory{
@Override
public String makeAC() {
// TODO Auto-generated method stub
return new HaierAC().ACBrand();
}
@Override
public String makeTV() {
// TODO Auto-generated method stub
return new HaierTV().TVBrand();
}
@Override
public String makeWM() {
// TODO Auto-generated method stub
return new HaierWM().WMBrand();
}
}
TCLHAFactory:
public class TCLHAFactory implements HAfactory {
@Override
public String makeAC() {
// TODO Auto-generated method stub
return new TCLAC().ACBrand();
}
@Override
public String makeTV() {
// TODO Auto-generated method stub
return new TCLTV().TVBrand();
}
@Override
public String makeWM() {
// TODO Auto-generated method stub
return new TCLWM().WMBrand();
}
配置文件:beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="tclhafactory" class="abstractFactory.TCLHAFactory"/>
<bean id="haierhafactory" class="abstractFactory.HaierHAFactory"/>
</beans>
Client:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
HAfactory haFactory=(HAfactory)applicationContext.getBean("tclhafactory");
System.out.println(haFactory.makeAC());
System.out.println(haFactory.makeTV());
System.out.println(haFactory.makeWM());
}
}
结果:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Client {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
HAfactory haFactory=(HAfactory)applicationContext.getBean("haierhafactory");
System.out.println(haFactory.makeAC());
System.out.println(haFactory.makeTV());
System.out.println(haFactory.makeWM());
}
}
结果: