Java设计模式-抽象工厂模式

抽象工厂模式

抽象工厂模式是围绕一个生成工厂的超级工厂。在该设计模式下,方便获取工厂对象,更加便于理解。即在获取对象时不用再考虑选择使用什么工厂接口,而是直接从超级工厂中获取。

实现

在这里插入图片描述
创建clothing 服装类接口。 clothes,pants接口继承于clothing

public interface Clothing {
    void show();
}
public interface Clothes extends Clothing {
}
public interface Pants extends Clothing {
}
//clothes与pants接口仅作标记

创建coat、shirt实现clothes接口, jeans、slacks实现pants接口,并重写show方法

public class Coat implements Clothes {
    @Override
    public void show() {
        System.out.println("this is a coat");
    }
}
....

创建ClothingFactory接口

public interface ClothingFactory {
    Clothing getClothing(String type);
}

创建ClothesFactory,PantsFactory实现ClothingFactory

public class ClothesFactory implements ClothingFactory {
    @Override
    public Clothing getClothing(String type) {
        switch (type) {
            case "shirt": return new Shirt();
            case "coat": return new Coat();
            default: return null;
        }
    }
}

public class PantsFactory implements ClothingFactory {
    @Override
    public Clothing getClothing(String type) {
        switch (type){
            case "jeans": return new Jeans();
            case "slacks": return new Slacks();
            default: return null;
        }
    }
}

最后创建超级工厂ClothingAbsFactory,该类即是用来创建衣服和裤子的工厂的类

public class ClothingAbsFactory {
    public ClothingFactory getFactory(String type) {
        switch (type) {
            case "clothes": return new ClothesFactory();
            case "pants": return new PantsFactory();
            default: return null;
        }
    }
}

//主函数
public class mian {
    public static void main(String[] args) {
        var factory = new ClothingAbsFactory();
        factory.getFactory("clothes")
                .getClothing("coat")
                .show();
        //this is a coat
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值