抽象工厂模式

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,本专栏的目的是分享一些校招面试过程中的一些重要知识点,以及当前比较流行的技术底层原理和一些面试问的较多的知识点的剖析。后续也会分享一些在阿里工作过程中遇到的一些问题,把问题抽象出来给出我的思路,大家可以一起来思考,互相促进,互相学习。

全部评论

相关推荐

点赞 评论 收藏
分享
矫健的闭门羹烹饪师又熬夜了:本人双非本,在鹅厂测开实习,你这个简历上写的这两个项目的技术栈都差不多,能够让面试官去延伸去问的八股除了redis就再没啥了,建议项目这边可以再改改,然后专业技能那块的话,感觉linux和测试工具可以分开写,毕竟不是干一件事的,反正没实习的基础上面试就深挖项目和八股,好好卷吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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