package com.dding.pmsmigrateServer.test;
/**
* 抽象工厂模式和工厂模式最大的不同就是,工厂模式是类创建型模式。抽象工厂模式是对象创建型模式
* 且抽象工厂模式的不止一类产品族。而工厂模式只有一类产品族
*
* 结构划分
* 1、抽象工厂:只有一个,申明创建不同产品的方法。有多少种产品就有多少种方法。
* 2、抽象产品类。可以有多个。
* 3、具体工厂类:可以有多个,分别对应不同的产品类的组合。这里的不同指的是族的不同
* 4、具体产品类:每个产品产品类都可以有多个不同的产品子类
* 缺点:不符合开闭原则,因为新增抽象产品类的时候,需要更改具体工厂类的代码。
*/
public class AbstractFactory {
}
//抽象工厂
interface AbFactory{
AbProduct1 createProduct1();
AbProduct2 createProduct2();
AbProduct3 createProduct3();
}
//抽象产品类1
interface AbProduct1{
void show();
}
//抽象产品类2
interface AbProduct2{
void show();
}
//抽象产品类3
interface AbProduct3{
void show();
}
//抽象产品类1的具体产品子类
class Product1A implements AbProduct1{
public void show(){
System.out.println("product1A");
}
}
class Product1B implements AbProduct1{
public void show(){
System.out.println("product1B");
}
}
//抽象产品类2的具体子类
class Product2A implements AbProduct2{
public void show(){
System.out.println("Product2A");
}
}
class Product2B implements AbProduct2{
public void show(){
System.out.println("Product2B");
}
}
//抽象产品类3的具体子类
class Product3A implements AbProduct3{
public void show(){
System.out.println("Product3A");
}
}
class Product3B implements AbProduct3{
public void show(){
System.out.println("Product3B");
}
}
//抽象工厂的子类
class AbFactory1 implements AbFactory{
public AbProduct1 createProduct1(){
return new Product1A();
}
public AbProduct2 createProduct2(){
return new Product2A();
}
public AbProduct3 createProduct3(){
return new Product3A();
}
}