抽象工厂特点:
不但工厂是抽象的,产品是抽象的,而且有多个产品需要创建。
因此,这个抽象工厂会对应到多个实际工厂,每个实际工厂负责创建多个实际产品
不多说了直接上手撸代码
1.定义抽象工厂
interface School{//创建School接口 //抽象工厂
FirstComply firstGrade(String a);//返回类型是FirstComply
SecondComply secondGrade(String b);//返回类型是SecondComply
}
interface FirstGrade{ //抽象产品
void ClassAdd(String Classnames);
}
interface SecondGrade{ //抽象产品
void ClassAdd(String Classnames);
}
注意:注意到上面的抽象工厂仅仅是一个接口,没有任何代码,现在我们并不知道如何实现它们,所以只有接口。
现在我们已经创建好了抽象工厂(Scholl)和两个抽象产品(FirstGrade,SecondGrade)
2.实现接口
class FirstComply implements FirstGrade{
private String name;
public FirstComply(String name){
this.name=name;
}
@Override
public void ClassAdd(String name){//实现FirstGrade方法
this.name=name;
}
public String getName(){
return this.name;
}
}
class SecondComply implements SecondGrade{//
private String name;
@Override
public void ClassAdd(String name){//实现SecondGrade接口方法
this.name=name;
}
public String getName(){
return this.name;
}
}
现在我们已经实现了产品,接下来实现工厂
class SchoolComply implements School{
@Override
public FirstComply firstGrade(String a){
return new FirstComply(a);
}
@Override
public SecondComply secondGrade(String b){
return new SecondComply(b);
}
}
现在我们简单的设计了一个抽象工厂,后面只需要调用即可,我把完整代码贴出来
public class Test {
public static void main(String[] args) {
School school=new SchoolComply();
FirstComply firstComply=school.firstGrade("张三");
System.out.println(firstComply.getName());
}
}
interface School{//创建School接口 //抽象接口
FirstComply firstGrade(String a);//返回类型是FirstComply
SecondComply secondGrade(String b);//返回类型是SecondComply
}
interface FirstGrade{ //抽象产品
void ClassAdd(String Classnames);
}
interface SecondGrade{ //抽象产品
void ClassAdd(String Classnames);
}
class FirstComply implements FirstGrade{
private String name;
public FirstComply(String name){
this.name=name;
}
@Override
public void ClassAdd(String name){//实现FirstGrade方法
this.name=name;
}
public String getName(){
return this.name;
}
}
class SecondComply implements SecondGrade{//
private String name;
@Override
public void ClassAdd(String name){//实现SecondGrade接口方法
this.name=name;
}
public String getName(){
return this.name;
}
}
class SchoolComply implements School{
@Override
public FirstComply firstGrade(String a){
return new FirstComply(a);
}
@Override
public SecondComply secondGrade(String b){
return new SecondComply(b);
}
}
小结:
抽象工厂模式是为了让创建工厂和一组产品与使用相分离,并可以随时切换到另一个工厂以及另一组产品;
抽象工厂模式实现的关键点是定义工厂接口和产品接口,但如何实现工厂与产品本身需要留给具体的子类实现,客户端只和抽象工厂与抽象产品打交道。