抽象工厂模式

canca canca
2007-03-26 14:41
1
0

//抽象工厂模式
//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);
 }
}

发表评论