抽象工厂模式

一.抽象工厂模式

        在工厂方法模式中我们提到,每个具体工厂创造一个具体产品,那么抽象工厂模式就是在工厂方法模式中增加不同类别的产品,比如原来的工厂只可以造手机,现在抽象工厂可以造手机和电脑.

        说白了,抽象工厂模式就是工厂方法模式的一种扩展

二.角色

还是四个角色

  • 抽象工厂
  • 具体工厂
  • 抽象产品
  • 具体产品

以前我只卖产品,现在我卖产品和点子

卖产品

//抽象产品类
abstract class Product{
    abstract public void show();
}
//产品子类A
class ProductA extends Product{
    @Override
    public void show() {
        System.out.println("创建了产品A");
    }
}
//产品子类B
class ProductB extends Product{
    @Override
    public void show() {
        System.out.println("创建了产品B");
    }
}

同理,卖点子

abstract class Ider{
    abstract public void show();
}
class IderA extends Ider{
    @Override
    public void show(){
        System.out.println("创建了想法A");
    }
}
class IderB extends Ider{
    @Override
    public void show(){
        System.out.println("创建了想法B");
    }
}

工厂类

//抽象工厂类
interface Facytory{
    public Product createProduct(String type);
    public Ider createIder(String type);
}
//工厂子类A
class FacytoryA implements Facytory{
    @Override
    public Product createProduct(String type) {
        if(type.equals("Protduct")){
            return new ProductA();
        }else{
            return null;
        }
    }

    @Override
    public Ider createIder(String type) {
        if(type.equals("Ider")){
            return new IderA();
        }else{
            return null;
        }
    }
}
//工厂子类B
class FacytoryB implements Facytory{
    @Override
    public Product createProduct(String type) {
        if(type.equals("Protduct")){
            return new ProductB();
        }else{
            return null;
        }
    }

    @Override
    public Ider createIder(String type) {
        if(type.equals("Ider")){
            return new IderB();
        }else{
            return null;
        }
    }
}

到这里,如果我想创建一个新产品或者工厂,那就得改变了,不是违反开闭原则吗?

其实在实际的开发设计过程中,是要在扩展与修改中权衡的,设计模式只提供一种思想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值