设计模式抽象工厂模式

1.抽象工厂模式的定义及使用场景
抽象工厂也是创建型设计模式之一。为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定他们的具体类。一个对象族有相同约束时可以使用抽象工厂模式。

Paste_Image.png

2.抽象工厂模式的优缺点
2.1优点
良好封装性,低耦合
产品族内具有约束性,且为非公开状态
2.2缺点
产品族的扩展非常困难,需要修改抽象工厂及其实现,违背了开闭原则。但工厂的扩展是灵活的。
3.抽象工厂模式的实现方式
ProductA

public abstract class ProductA {  
   public abstract void excute();  
}

ProductA1

public class ProductA1 extends ProductA {  
    @Override  
   public void excute() {  
        System.out.println("ProductA1excute!");  
    }  
}```
ProductA2

public class ProductA2 extends ProductA {
@Override
public void excute() {
System.out.println("ProductA2excute!");
}
}```
ProductB

public abstract class ProductB {  
   public abstract void excute();  
}```
ProductB1

public class ProductB1 extends ProductB {
@Override
public void excute() {
System.out.println("ProductB1excute!");
}
}```
ProductB2

public class ProductB2 extends ProductB {  
    @Override  
    public void excute() {  
        System.out.println("ProductB2excute!");  
    }  
}```
Factory

public abstract class Factory {
public abstract <T extends ProductA> T createA();

public abstract <T extends ProductB> T createB();  

}```
ConcreteOneFactory

public class ConcreteOneFactory extends Factory {  
  
  
    @Override  
    public <T extends ProductA> T createA() {  
        ProductA product = null;  
        try {  
            product = new ProductA1();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return (T) product;  
    }  
  
  
    @Override  
    public <T extends ProductB> T createB() {  
        ProductB1 product = null;  
        try {  
            product = new ProductB1();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return (T) product;  
    }  
}```
ConcreteTwoFactory

public class ConcreteTwoFactory extends Factory {

@Override  
public <T extends ProductA> T createA() {  
    ProductA2 product = null;  
    try {  
        product = new ProductA2();  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
    return (T) product;  
}  


@Override  
public <T extends ProductB> T createB() {  
    ProductB2 product = null;  
    try {  
        product = new ProductB2();  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
    return (T) product;  
}  

}```
Test

public class Test {  
  
  
    public static void main(String args[]) {  
        Factory fOne = new ConcreteOneFactory();  
        Factory fTwo = new ConcreteTwoFactory();  
        ProductA a1 = fOne.createA();  
        ProductB b1 = fOne.createB();  
        a1.excute();  
        b1.excute();  
        ProductA a2 = fTwo.createA();  
        ProductB b2 = fTwo.createB();  
        a2.excute();  
        b2.excute();  
    }  
}```
出处:http://huangjunbin.com/page/3/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 设计原则: 要依赖抽象,不要依赖具体类 目录 本文的结构如下: 什么是抽象工厂模式 为什么要用该模式 模式的结构 ...
    w1992wishes阅读 4,824评论 0 6
  • 抽象工厂模式 介绍 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式...
    666真666阅读 4,996评论 0 7
  • 这一篇博文来介绍工厂模式中的第三种抽象工厂模式。 介绍 抽象工厂模式(Abstract Factory Patte...
    东西的南北阅读 3,153评论 0 1
  • 抽象工厂模式 在工厂方法模式中,每一个产品都对应一个工厂类,这么做会导致系统中存在太多的工厂类,增大了系统的开销,...
    ghwaphon阅读 2,870评论 0 0
  • 张驰坐在医院的长椅上,看到诊断书上赫然写着“癌症晚期”,一张薄薄的纸瞬间千斤重,压得她顿时喘不过气,两眼一翻,过去...
    墨浔阅读 3,269评论 0 1

友情链接更多精彩内容