工厂设计模式

简介: 工厂设计模式

工厂设计模式好处

工厂模式是为了解耦:就是 Class A 想调用 Class B ,那么A只是调用B的方法,而至于B的实例化,就交给工厂类。

工厂模式可以降低代码重复:如果创建对象 B 的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。我们可以将这些创建对象 B 的代码放到工厂里统一管理。既减少了重复代码,也方便以后对 B 的创建过程的修改维护。

因为工厂管理了对象的创建逻辑,使用者并不需要知道具体的创建过程,只管使用即可,减少了使用者因为创建逻辑导致的错误

简单工厂设计模式

定义一个接口

public interface Fruit {
    void show();
}

定义两个水果类

public class Apple implements Fruit {
    @Override
    public void show() {
        System.out.println("苹果");
    }
}

public class Pear implements Fruit {
    @Override
    public void show() {
        System.out.println("梨");
    }
}

创建工厂

public class FruitFactory {
    public Fruit createFruit(String type) {
        if (type.equals("apple")) {
            return new Apple();
        } else if (type.equals("pear")) {
            return new Pear();
        } else {
            return null;
        }
    }
}

public static void main(String[] args) {
    FruitFactory fruitFactory = new FruitFactory();
    Apple apple = (Apple)fruitFactory.createFruit("apple");
    apple.show();
    Pear pear = (Pear)fruitFactory.createFruit("pear");
    pear.show();
}

工厂方法设计模式

定义一个接口

public interface Fruit {
    void show();
}

定义两个水果类

public class Apple implements Fruit {
    @Override
    public void show() {
        System.out.println("苹果");
    }
}

public class Pear implements Fruit {
    @Override
    public void show() {
        System.out.println("梨");
    }
}

创建FruitFactory接口

public interface FruitFactory {
    Fruit createFruit();
}

用到什么类, 写什么工厂

AppleFactory

public class AppleFactory implements FruitFactory{
    @Override
    public Fruit createFruit() {
        return new Apple();
    }
}

PearFactory

public class PearFactory implements FruitFactory{
    @Override
    public Fruit createFruit() {
        return new Pear();
    }
}

使用

public class Test {
    public static void main(String[] args) {
        AppleFactory appleFactory = new AppleFactory();
        PearFactory pearFactory = new PearFactory();
        Apple apple = (Apple) appleFactory.createFruit();//获得苹果
        apple.show();
        Pear pear = (Pear) pearFactory.createFruit();//获得梨
        pear.show();
    }
}

抽象工厂设计模式

public interface FruitFactory {
    void show();
    class Apple implements FruitFactory {
        @Override
        public void show() {
            System.out.println("苹果");
        }
    }
    class Pear implements FruitFactory {
        @Override
        public void show() {
            System.out.println("梨");
        }
    }
}

public class Test {
    public static void main(String[] args) {
        FruitFactory.Apple apple = new FruitFactory.Apple();
        apple.show();
        FruitFactory.Pear pear = new FruitFactory.Pear();
        pear.show();
    }
}

cpu

public interface Cpu {
    void run();
    class Cpu600 implements Cpu{
        @Override
        public void run() {
            System.out.println("Cpu600---run");
        }
    }
    class Cpu800  implements  Cpu{
        @Override
        public void run() {
            System.out.println("Cpu800----run");
        }
    }
}

screen

public interface Screen {
    void size();
    class Screen5  implements Screen{
        @Override
        public void size() {
            System.out.println("Screen5----size");
        }
    }
    class Screen8 implements Screen {
        @Override
        public void size() {
            System.out.println("Screen8---size");
        }
    }
}

PhoneFactory

public interface PhoneFactory {
    Cpu getCpu();
    Screen getScreen();
}

HongMiFactory

public class HongMiFactory implements PhoneFactory{
    @Override
    public Cpu getCpu() {
        return new Cpu.Cpu800();
    }
    @Override
    public Screen getScreen() {
        return new Screen.Screen8();
    }
}

使用

选择

对于简单工厂和工厂方法来说,两者的使用方式实际上是一样的,如果对于产品的分类和名称是确定的,数量是相对固定的,推荐使用简单工厂模式,抽象工厂用来解决相对复杂的问题,适用于一系列、大批量的对象生产;

相关文章
|
5月前
|
设计模式 Java
设计模式之工厂
设计模式之工厂
|
2月前
|
设计模式 XML 数据格式
python之工厂设计模式
python之工厂设计模式
python之工厂设计模式
|
2月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
21 0
|
2月前
|
设计模式 测试技术
依赖注入与工厂设计模式的区别
【8月更文挑战第22天】
34 0
|
4月前
|
设计模式 Java 编译器
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
设计模式——创建型模式(工厂,简单工厂,单例,建造者,原型)
|
3月前
|
设计模式 Java 开发者
工厂设计模式的实现与应用场景分析
工厂设计模式的实现与应用场景分析
|
5月前
|
设计模式
设计模式之工厂 Factory
设计模式之工厂 Factory
42 1
|
5月前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
5月前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
5月前
|
设计模式 Java 关系型数据库
Java设计模式--创建模式工厂--用披萨订购案例 详细讲解三种工厂模式
Java设计模式--创建模式工厂--用披萨订购案例 详细讲解三种工厂模式