您的位置:首页 > 其它

设计模式之抽象工厂模式

2017-08-14 11:25 323 查看
抽象工厂模式

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
从定义中可知,我们是要创建一个接口,而这个接口是干嘛的呢,是为了创建一组相关或者相互依赖的对象,而且我们创建的对象不是具体的类,也就是说我们创建的是一个接口或者一个抽象类。
UML:



具体实现
产品代码实现:

interface ProductA {
   void methodA();
}
 
interface ProductB {
   void methodB();
}
 
class ProductA1 implements ProductA{
   public void methodA() {
       System.out.println("产品A系列中1型号产品的方法");
   
}
}
 
class ProductA2 implements ProductA{
   public void methodA() {
       System.out.println("产品A系列中2型号产品的方法");
   
}
}
 
class ProductB1 implements ProductB{
   public void methodB() {
       System.out.println("产品B系列中1型号产品的方法");
   
}
}
 
class ProductB2 implements ProductB{
   public void methodB() {
       System.out.println("产品B系列中2型号产品的方法");
   
}
}
public class ConcreteCreator1 implementsCreator{
   public ProductA createProductA() {
       return new ProductA1();
   
}
   public ProductB createProductB() {
       return new ProductB1();
   
}
}
工厂实现:

public interface Creator {
   ProductA createProductA();
   ProductB createProductB();
}

class ProductB2 implements ProductB{
   public void methodB() {
       System.out.println("产品B系列中2型号产品的方法");
   
}
}
public class ConcreteCreator1 implementsCreator{
   public ProductA createProductA() {
       return new ProductA1();
   
}
 
   public ProductB createProductB() {
       return new ProductB1();
   
}
}

public class ConcreteCreator2 implementsCreator{
   public ProductA createProductA() {
       return new ProductA2();
   
}
   public ProductB createProductB() {
       return new ProductB2();
   
}
}

public class Client {
   public static void main(String[] args) throws Exception {
       Creator creator = new ConcreteCreator1();
       ProductA productA = creator.createProductA();
       ProductB productB = creator.createProductB();
       productA.methodA();
       productB.methodB();
       
       creator = new ConcreteCreator2();
       productA = creator.createProductA();
       productB = creator.createProductB();
       productA.methodA();
       productB.methodB();
   
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: