抽象工厂

工厂方法模式:
每个具体工厂只有一个或者一组重载的工厂方法,只能生产一种产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。
抽象工厂模式:
一个工厂可以生产一系列产品(一族产品),极大减少了工厂类的数量

产品等级结构:产品等级结构即产品的继承结构
产品族:产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品
这里写图片描述
系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构、属于不同类型的具体产品时就可以使用抽象工厂模式
抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形式

当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率

缺点:对于增加新的产品等级结构,需要修改所有的工厂角色,包括抽象工厂类,在所有的工厂类中都需要增加生产新产品的方法,不能很好地支持“开闭原则”。

抽象工厂设计中的角色:
1、抽象产品
2、具体产品
3、抽象工厂
4、具体工厂

和工厂方法的角色相比,并没有什么不同,只不过抽象工厂中的产品等级结构不止一个;

工厂模式的退化:
当抽象工厂模式中每一个具体工厂类只创建一个产品对象,也就是只存在一个产品等级结构时,抽象工厂模式退化成工厂方法模式;当工厂方法模式中抽象工厂与具体工厂合并,提供一个统一的工厂来创建产品对象,并将创建对象的工厂方法设计为静态方法时,工厂方法模式退化成简单工厂模式。

package AbstractFactoryTest;
/*
 * 抽象产品1
 */
interface artsInterface
{
    public void createArts();
}
/*
 * 抽象产品2
 */
interface scientistInterface
{
    public void createScientist();
}
/*
 * 具体产品1
 */
class artsA implements artsInterface{
    @Override
    public void createArts() {
        System.out.println("文科生A已产生");
    }
}
/*
 * 具体产品2
 */
class scientistA implements scientistInterface{

    @Override
    public void createScientist() {
        System.out.println("理科生A已产生");
    }
}
/*
 * 抽象工厂
 */
interface abstractFactory{
    public artsInterface createConcreteArts();
    public scientistInterface createConcreteScientist();
}
/*
 * 具体工厂
 */
class concreteFactory implements abstractFactory{
    @Override
    public artsInterface createConcreteArts() {
        // TODO Auto-generated method stub
        return new artsA();
    }
    @Override
    public scientistInterface createConcreteScientist() {
        // TODO Auto-generated method stub
        return new scientistA();
    }
}
public class abstractFactoryModel {
    public static void main(String[] args) {
         abstractFactory af = new concreteFactory();
         af.createConcreteArts().createArts();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值