工厂模式

三、工厂模式

1.作用

完成创建者和调用者的分离。

2.分类

简单工厂模式

就是一个工厂去创建所有东西。

 

 

复制代码
class Car1{
    public void product(){
        System.out.println("Car1 已生产");
    }
}

class Car2{
    public void product(){
        System.out.println("Car2 已生产");
    }
}

//简单工厂
class SimpleFactory{
        public void product(String name){
            switch (name){
                case "car1":
                    new Car1().product();
                    break;
                case "car2":
                    new Car2().product();
                    break;
                default:
                    System.out.println("没有这个车");
                    break;
            }
        }
}
复制代码

 

但是这样如果再加一种车,车工厂类要去修改代码,不符合开闭。工厂方法模式解决,但是代码变多了

工厂方法模式

比简单工厂模式多了个工厂接口和工厂类,就是多加一种产品就需要多加一个工厂。

 

 

复制代码
public class THS {
    public static void main(String[] args) {
        new FactoryMethod1().product();
        new FactoryMethod2().product();
    }
}


class Car1{
    public void product(){
        System.out.println("Car1 已生产");
    }
}

class Car2{
    public void product(){
        System.out.println("Car2 已生产");
    }
}

class FactoryMethod1{
    public void product(){
        new Car1().product();
    }
}

class FactoryMethod2{
    public void product(){
        new Car2().product();
    }
}
复制代码

 

抽象工厂模式

这样如果你需要增加苹果手机和苹果电脑只需要加一个苹果工厂就行了。但是缺点就是如果想加一个手表产品,所有需要的工厂都需要去增加一个创建手表的方法。

 

复制代码
public class THS {
    public static void main(String[] args) {
        new AbstractFactoryXiaoMi().productA();
        new AbstractFactoryHuaWei().productB();
    }
}

class Phone{
    public void product(){
        System.out.println("手机已生产");
    }
}

class Book{
    public void product(){
        System.out.println("电脑已生产");
    }
}

//抽象工厂模式
class AbstractFactoryXiaoMi{
    public void productA(){
        System.out.print("小米牌"+" ");
        new Phone().product();
    }
    public void productB(){
        System.out.print("小米牌"+" ");
        new Book().product();
    }
}

class AbstractFactoryHuaWei{
    public void productA(){
        System.out.print("华为牌"+" ");
        new Phone().product();
    }
    public void productB(){
        System.out.print("华为牌"+" ");
        new Book().product();
    }
}
复制代码

 最后:其实这个做的并不规范。比如说产品可以去实现一个产品接口或抽象类去规范或者将产品共有功能整合。抽象工厂中其实这两个工厂可以实现一个工厂接口。

posted @   大大怪下士  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示