概述
创建一系列相关或相互依赖对象(一个产品族)。
围绕一个超级工厂创建其他工厂,每个生成的工厂都能按照工厂模式提供全部对象(每个工厂都有一个产品族)。
产品族扩展非常困难,既要在抽象的 Creator 里加代码,又要在具体的里面加代码
比如人穿衣,你需要1套衣服,包括 上衣 裤子 鞋子,通常来说你不会西装配大裤衩和球鞋,你需要成套的,运动套,或者时尚套,或正装。
那么 这个超级工厂 (interface (我习惯用接口,你也可以写成个抽象类))就是穿衣原则,规定了要 上衣 裤子 鞋子
根据超级工厂设计的工厂 (实现超级工厂interface的类)(多个产品族)(正装厂商,运动服厂)能为你提供套装。
同等级产品(不同产品族)也有设计规范,
interface 裤子, 实现它你可以得到 西裤,运动裤,破洞牛仔;
interface 上衣…
当你想要一套衣服 (正装),你需要
你首先要这个工厂,你可以直接new 这个工厂,也可以用加一个用来选择的方法
超级工厂interface XiZhuang_factory =getFactory(“正装”);
(用更抽象的类结构声明 具体类 ,抽象工厂到处都是这钟逻辑)
然后你可以
XiZhuang_factory.get上衣();
XiZhuang_factoryget裤子();
…
示例
public interface KuZi {
void method();
}
public class KuZi_KuCha implements KuZi {
public KuZi_KuCha() {
System.out.println("裤衩");
}
@Override
public void method() {
}
}
public class KuZi_XiKu implements KuZi {
public KuZi_XiKu() {
System.out.println("西裤");
}
@Override
public void method() {
}
}
public interface ShangYi {
void method();
}
public class shangYi_Txue implements ShangYi {
public shangYi_Txue() {
System.out.println("T桖");
}
@Override
public void method() {
}
}
public class shangYi_XiFu implements ShangYi {
public shangYi_XiFu() {
System.out.println("西装");
}
@Override
public void method() {
}
}
public interface suitFactory {
KuZi get_KuZI();
ShangYi get_ShangYi();
}
public class suitFactory_Summer implements suitFactory {
@Override
public KuZi get_KuZI() {
return new KuZi_KuCha();
}
@Override
public ShangYi get_ShangYi() {
return new shangYi_Txue();
}
}
public class suitFactory_XiZhuang implements suitFactory {
@Override
public KuZi get_KuZI() {
return new KuZi_XiKu();
}
@Override
public ShangYi get_ShangYi()
{
return new shangYi_XiFu();
}
}
public class factoryProducer {
static suitFactory getFactory(String a) {
if(a=="西装") return new suitFactory_XiZhuang();
else if(a=="夏装") return new suitFactory_Summer();
return null;
}
}
public class demo {
public static void main(String[] args) {
System.out.println("正装");
suitFactory factory=factoryProducer.getFactory("西装");
factory.get_KuZI();
factory.get_ShangYi();
System.out.println("\n夏季");
suitFactory factory2=factoryProducer.getFactory("夏装");
factory2.get_KuZI();
factory2.get_ShangYi();
}
}
运行结果
正装
西裤
西装
夏季
裤衩
T桖