抽象工厂模式

public class DesignPattern {

    public static void main(String[] args) {

        //抽象工厂允许获取不同种类的工厂,并进行工厂方法的调用,获取想要的对象
        FactoryProducer producer = new FactoryProducer();
        //获取pizza的制作工厂
        AbstractFactory pizzaFactory = producer.getFactory("PizzaFactory");
        //pizza的北京口味
        Pizza beijingPizza = pizzaFactory.getPizza("BeijingPizza");
        beijingPizza.taste();
        //pizza的南京口味
        Pizza nanjingPizza = pizzaFactory.getPizza("NanjingPizza");
        nanjingPizza.taste();
        //获取面包的制作工厂
        AbstractFactory breadFactory = producer.getFactory("BreadFactory");
        //面包的北京口味
        Bread beijingBread = breadFactory.getBread("BeijingBread");
        beijingBread.taste();
        //面包的南京口味
        Bread nanjingBread = breadFactory.getBread("NanjingBread");
        nanjingBread.taste();


    }

}
interface Pizza{
    //不同的pizza有不同的口味
    void taste();
}
interface Bread{
    //不同的面包有不同的口味
    void taste();
}

class BeijingPizza implements Pizza{
    @Override
    public void taste() {
        System.out.println("北京pizza口味");
    }
}
class NanjingPizza implements Pizza{
    @Override
    public void taste() {
        System.out.println("南京pizza口味");
    }
}
class BeijingBread implements Bread{
    @Override
    public void taste() {
        System.out.println("北京面包的口味");
    }
}
class NanjingBread implements Bread{
    @Override
    public void taste() {
        System.out.println("南京面包的口味");
    }
}
//抽象工厂
abstract class AbstractFactory{

  public abstract Pizza getPizza(String type);
  public abstract Bread getBread(String type);

}
//pizza工厂
class PizzaFactory extends AbstractFactory{

    @Override
    public Pizza getPizza(String type) {
        Pizza pizza = null;
        if(type == null){
            System.out.println("传入参数有误");
        }else{
            try {
                pizza = (Pizza)Class.forName("com.zhouge.design.test." + type).newInstance();
            } catch (Exception e) {
                System.out.println("输入信息有误");
            }
        }
        return pizza;
    }

    @Override
    public Bread getBread(String type) {
        return null;
    }
}
//面包工厂
class BreadFactory extends AbstractFactory{

    @Override
    public Pizza getPizza(String type) {
       return null;
    }

    @Override
    public Bread getBread(String type) {
        Bread bread = null;
        if(type == null){
            System.out.println("传入参数有误");
        }else{
            try {
                bread = (Bread) Class.forName("com.zhouge.design.test." + type).newInstance();
            } catch (Exception e) {
                System.out.println("输入信息有误");
            }
        }
        return bread;
    }
}
//工厂的工厂
class FactoryProducer{

    public  AbstractFactory getFactory(String factoryName){
        AbstractFactory factory = null;
        if(factoryName == null){
            System.out.println("工厂名不能为空");
        }else {
            try {
                factory = (AbstractFactory) Class.forName("com.zhouge.design.test." + factoryName).newInstance();
            } catch (Exception e) {
                System.out.println("该工厂不存在");
            }
        }
        return factory;
    }
}
大家一起快乐学Java 文章被收录于专栏

本人2021届应届本科生毕业于浙江海洋大学,校招拿到BAT等大厂offer,本专栏的目的是分享一些校招面试过程中的一些重要知识点,以及当前比较流行的技术底层原理和一些面试问的较多的知识点的剖析。后续也会分享一些在阿里工作过程中遇到的一些问题,把问题抽象出来给出我的思路,大家可以一起来思考,互相促进,互相学习。

全部评论

相关推荐

LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
06-26 15:33
青岛工学院 Java
积极的秋田犬要冲国企:他现在邀请我明天面试
点赞 评论 收藏
分享
06-25 16:00
武汉大学 Java
工科研究生底薪工资就开3k啊??
机械打工仔:写文章提成的岗位工资低,你怪工科?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务