【JAVA长虹键法】第四式 普通工厂模式(23种设计模式)

2年前 (2022) 程序员胖胖胖虎阿
306 0 0

🔎这里是JAVA长虹键法,关注我学习JAVA不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

🗡专栏介绍

【JAVA长虹键法】 主要讲了23种设计模式,本系列专栏会以虹猫蓝兔七侠传的故事为例来给大家详细分析所有模式,希望能给大家带来帮助!

🗡本期介绍

模式: 普通工厂模式
案例: 一个天外陨石(抽象产品),七剑(产品)
一个铸剑传承(抽象工厂),两个铸剑师(工厂)
男铸剑师负责铸造至阳之剑(长虹剑、青光剑、奔雷剑、旋风剑、雨花剑)
女铸剑师负责铸造至阴之剑(冰魄剑、紫云剑)

文章目录

      • 🗡专栏介绍
      • 🗡本期介绍
    • 👀什么是工厂模式
      • 🗡优点
      • 🗡缺点
      • 🗡应用场景
    • 👀普通工厂的实现
      • 🗡抽象产品、产品
      • 🗡抽象工厂、工厂
      • 🗡测试
    • 下期预告


【JAVA长虹键法】第四式 普通工厂模式(23种设计模式)

👀什么是工厂模式

在《【JAVA长虹键法】第三式 简单工厂模式》一期中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。

🗡优点

1、用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
2、灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
3、典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。

🗡缺点

1、类的个数容易过多,增加复杂度
2、增加了系统的抽象性和理解难度
3、抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决。

🗡应用场景

1、客户只知道创建产品的工厂名,而不知道具体的产品名。如 TCL 电视工厂、海信电视工厂等。
2、创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
3、客户不关心创建产品的细节,只关心产品的品牌

👀普通工厂的实现

案例的主要角色如下:
抽象工厂(Abstract Factory):铸剑传承
工厂(SimpleFactory):男铸剑师、女铸剑师
抽象产品(Product):天外陨石(铸剑的原材料)
具体产品(ConcreteProduct):长虹剑、青光剑、奔雷剑、旋风剑、雨花剑、冰魄剑、紫云剑

案例:
七剑分阴阳,长虹剑、青光剑、奔雷剑、旋风剑、雨花剑属至阳之剑。
冰魄剑、紫云剑属至阴之剑。
男铸剑师传承了打造至阳之剑的方法,女铸剑师传承了打造至阴之剑的方法。
七侠分别找两位铸剑师打造属于自己的剑

🗡抽象产品、产品

Ss接口(天外陨石):

接口内声明了一个方法

public interface Ss {
    void show();
}

Aa类实现接口Ss(长虹剑):

实现Ss接口

public class Aa implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把长虹剑");

    }
}

Bb类实现接口Ss(冰魄剑):

实现Ss接口

public class Bb implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把冰魄剑");

    }
}

Cc类实现接口Ss(紫云剑):

实现Ss接口

public class Cc implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }
}

Dd类实现接口Ss(雨花剑):

实现Ss接口

public class Dd implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }
}

Ee类实现接口Ss(青光剑):

实现Ss接口

public class Ee implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }
}

Ff类实现接口Ss(奔雷剑):

实现Ss接口

public class Ff implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }
}

Gg类实现接口Ss(旋风剑):

实现Ss接口

public class Gg implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }
}

🗡抽象工厂、工厂

Zz接口(铸剑传承):

接口内声明了一个铸剑方法abc()

public interface Zz {
    Ss abc(String a);
}

Nan类实现接口Zz(男铸剑师):

实现Zz接口

public class Nan implements Zz {
    private static Ss ss;

    public Ss abc(String a) {
        if ("长虹剑".equals(a)) {
            ss = new Aa();
        } else if ("奔雷剑".equals(a)) {
            ss = new Ff();
        } else if ("青光剑".equals(a)) {
            ss = new Ee();
        } else if ("雨花剑".equals(a)) {
            ss = new Dd();
        } else if ("旋风剑".equals(a)) {
            ss = new Gg();
        } else {
            System.out.println("铸剑失败");
        }
        return ss;
    }
}

Nv类实现接口Zz(女铸剑师):

实现Zz接口

public class Nv implements Zz {
    private static Ss ss;

    public Ss abc(String a) {
        if ("冰魄剑".equals(a)) {
            ss = new Bb();
        } else if ("紫云剑".equals(a)) {
            ss = new Cc();
        } else {
            System.out.println("铸剑失败");
        }
        return ss;
    }
}

🗡测试

测试类:

public class Demo {
    public static void main(String[] args) {
        System.out.println("---------至阳之剑-------------");
        //男铸剑师
        Nan nan = new Nan();
        Ss aa = nan.abc("长虹剑");
        Ss dd = nan.abc("雨花剑");
        Ss ee = nan.abc("青光剑");
        Ss ff = nan.abc("奔雷剑");
        Ss gg = nan.abc("旋风剑");
        aa.show();
        dd.show();
        ee.show();
        ff.show();
        gg.show();
        System.out.println("---------至阴之剑-------------");
        //女铸剑师
        Nv nv = new Nv();
        Ss bb = nv.abc("冰魄剑");
        Ss cc = nv.abc("紫云剑");
        bb.show();
        cc.show();
    }
}

【JAVA长虹键法】第四式 普通工厂模式(23种设计模式)

下期预告

模式: 抽象工厂模式
案例: 七侠师傅和师母为七侠打造七剑和培养小灵鸽
【JAVA长虹键法】第四式 普通工厂模式(23种设计模式)

相关文章

暂无评论

暂无评论...