public abstract class AbstractProductA {
public void shareMethod ( ) { }
public abstract void doSomething ( ) ;
}
public abstract class AbstractProductB {
public void shareMethod ( ) { }
public abstract void doSomething ( ) ;
public abstract void b ( ) ;
}
public class ProductA1 extends AbstractProductA {
@Override
public void doSomething ( ) {
System. out. println ( "产品A1的实现" ) ;
}
}
public class ProductA2 extends AbstractProductA {
@Override
public void doSomething ( ) {
System. out. println ( "产品A2的实现" ) ;
}
}
public class ProductA3 extends AbstractProductA {
@Override
public void doSomething ( ) {
System. out. println ( "产品A3的实现" ) ;
}
}
public class ProductB1 extends AbstractProductB {
@Override
public void doSomething ( ) {
System. out. println ( "产品B1的实现" ) ;
}
@Override
public void b ( ) {
System. out. println ( "B1特有功能" ) ;
}
}
public class ProductB2 extends AbstractProductB {
@Override
public void doSomething ( ) {
System. out. println ( "产品B2的实现" ) ;
}
@Override
public void b ( ) {
System. out. println ( "B2特有功能" ) ;
}
}
public class ProductB3 extends AbstractProductB {
@Override
public void doSomething ( ) {
System. out. println ( "产品B3的实现" ) ;
}
@Override
public void b ( ) {
System. out. println ( "B3特有功能" ) ;
}
}
public abstract class AbstractCreator {
public abstract AbstractProductA abstractProductA ( ) ;
public abstract AbstractProductB abstractProductB ( ) ;
}
public class CreatorFreeImpl extends AbstractCreator {
@Override
public AbstractProductA abstractProductA ( ) {
return new ProductA3 ( ) ;
}
@Override
public AbstractProductB abstractProductB ( ) {
return new ProductB3 ( ) ;
}
}
public class CreatorOneImpl extends AbstractCreator {
@Override
public AbstractProductA abstractProductA ( ) {
return new ProductA1 ( ) ;
}
@Override
public AbstractProductB abstractProductB ( ) {
return new ProductB1 ( ) ;
}
}
public class CreatorTwoImpl extends AbstractCreator {
@Override
public AbstractProductA abstractProductA ( ) {
return new ProductA2 ( ) ;
}
@Override
public AbstractProductB abstractProductB ( ) {
return new ProductB2 ( ) ;
}
}
public class Main {
public static void main ( String[ ] args) {
CreatorOneImpl creatorOne = new CreatorOneImpl ( ) ;
CreatorTwoImpl creatorTwo = new CreatorTwoImpl ( ) ;
AbstractProductA productA = creatorOne. abstractProductA ( ) ;
AbstractProductB productB = creatorTwo. abstractProductB ( ) ;
productA. doSomething ( ) ;
productB. doSomething ( ) ;
productB. b ( ) ;
CreatorFreeImpl creatorFree = new CreatorFreeImpl ( ) ;
AbstractProductA productA1 = creatorFree. abstractProductA ( ) ;
AbstractProductB productB1 = creatorFree. abstractProductB ( ) ;
productA1. doSomething ( ) ;
productB1. doSomething ( ) ;
productB1. b ( ) ;
}
}