还为那些设计模式烦恼吗-抽象工厂模式

定义

为创建一组相关或者相互依赖的对象提供一个接口,而不需要指定它们的具体类。

public abstract class AbstractProductA {
    public abstract void method();
}

public class ConcreteProductA1 extends AbstractProductA {

    @Override
    public void method() {
        // TODO Auto-generated method stub

    }
}

public class ConcreteProductA2 extends AbstractProductA {

    @Override
    public void method() {
        // TODO Auto-generated method stub

    }

}

public abstract class AbstractProductB {
    public abstract void method();
}

public class ConcreteProductB1 extends AbstractProductB {

    @Override
    public void method() {
        // TODO Auto-generated method stub

    }

}

public class ConcreteProductB2 extends AbstractProductB {

    @Override
    public void method() {
        // TODO Auto-generated method stub

    }

}

public abstract class AbstractFactory {
    public abstract AbstractProductA createProductA();
    public abstract AbstractProductB createProductB();
}

public abstract class AbstractProductA {
    public abstract void method();
}

public abstract class AbstractProductB {
    public abstract void method();
}

public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AbstractFactory mAbstractFactory1 = new ConcreteFactory1();
        mAbstractFactory1.createProductA().method();
        mAbstractFactory1.createProductB().method();
        
        AbstractFactory mAbstractFactory2 = new ConcreteFactory2();
        mAbstractFactory2.createProductA().method();
        mAbstractFactory2.createProductB().method();
    }

}

结论

优点:分离接口与实现,客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已,使其从具体的产品实现中解耦,同时基于接口与实现的分离,使抽象该工厂方法模式在切换产品类时更加灵活,容易。
缺点:类文件的爆炸性增加;不太容易扩展新的产品类,因为每当我们增加一个产品类就需要修改抽象工厂,那么的具体工厂类均会被修改

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 4,003评论 1 15
  • 1 场景问题# 1.1 选择组装电脑的配件## 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选...
    七寸知架构阅读 4,453评论 6 67
  • 1.接口基础回顾 设计模式六大原则,其中依赖倒转原则,强调我们应该面向接口编程,那什么是接口?接口的作用? 接口如...
    孟婆汤不解渴阅读 872评论 0 3
  • 简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建...
    justCode_阅读 1,231评论 1 9
  • 8点备皮插尿管,备皮,说穿了就是剃毛,虽略有不适但相对无感,重点是插尿管,那“酸爽”,不是一般词汇可以形容。8点半...
    魚子澄阅读 190评论 0 0