抽象工厂模式
//抽象工厂模式
//Copyright CAnca Software office
//Created by CAnca.2006
public class AbstractFactory{
public static void main(String[] args){
AbstractFactory factory1 = new concreteFactory1();
Client client1 = new Client(factory1);
client1.getNames();
AbstractFactory factory2 = new concreteFactory2();
Client client2 = new Client(factory2);
client2.getNames();
}
}
abstract class AbstractFactory{
public abstract AbstractProductA createProductA();
public abstract AbstractProductB createProductB();
}
class concreteFactory1 extends AbstractFactory{
public AbstractProductA createProductA(){
return new productA1();
}
public AbstractProductB createProductB(){
return new productB1();
}
}
class concreteFactory2 extends AbstractFactory{
public AbstractProductA createProductA(){
return new productA2();
}
public AbstractProductB createProductB(){
return new productB2();
}
}
abstract class AbstractProductA{
}
abstract class AbstractProductB{
public abstract void getName(AbstractProductA a);
}
class productA1 extends AbstractProductA{
}
class productB1 extends AbstractProductB{
public void getName(AbstractProductA a){
System.out.println(this.getClass().getName() + " interacts with " + a.getClass().getName());
}
}
class productA2 extends AbstractProductA{
}
class productB2 extends AbstractProductB{
public void getName(AbstractProductA a){
System.out.println(this.getClass().getName() + " interacts with " + a.getClass().getName());
}
}
class Client{
private AbstractProductA abstractProductA;
private AbstractProductB abstractProductB;
public Client(AbstractFactory factory){
this.abstractProductA = factory.createProductA();
this.abstractProductB = factory.createProductB();
}
public void getNames(){
abstractProductB.getName(abstractProductA);
}
}