• 技术文章 >Java >java教程

    实例详解JAVA抽象工厂模式

    长期闲置长期闲置2022-04-20 20:56:19转载537
    本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于抽象工厂模式的相关问题,根据实际的示例来学习什么是抽象工厂模式,下面一起来看一下,希望对大家有帮助。

    推荐学习:《java视频教程

    什么是抽象工厂模式

    抽象工厂(AbstractFactory)模式的定义: 是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。

    满足条件:

    优点:

    缺点:

    抽象工厂的实现

    案例的主要角色如下:
    抽象工厂(Abstract Factory): 七侠传承
    工厂(SimpleFactory): 师傅、师娘
    抽象产品(Product): 天外陨石(铸剑的原材料)、一窝灵鸽蛋(未孵化的灵鸽)
    具体产品(ConcreteProduct): 七剑。七只灵鸽

    案例:
    师傅拥有七侠传承,会打造至阳之剑和培养雄性小灵鸽。
    师娘拥有七侠传承,会打造至阴之剑和培养雌性小灵鸽。
    七侠找师傅师娘打造自己的剑和领养自己的小灵鸽。

    抽象产品、产品

    S1接口(天外陨石):

    接口内声明了一个方法

    public interface S1 {
        void show();}

    S2接口(一窝灵鸽蛋):

    接口内声明了一个方法

    public interface S2 {
        void show();}

    A1类实现接口S1(长虹剑):

    实现S1接口

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

    B1类实现接口S1(冰魄剑):

    实现S1接口

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

    C1类实现接口S1(紫云剑):

    实现S1接口

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

    D1类实现接口S1(雨花剑):

    实现S1接口

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

    E1类实现接口S1(青光剑):

    实现Ss接口

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

    F1类实现接口S1(奔雷剑):

    实现Ss接口

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

    G1类实现接口S1(旋风剑):

    实现Ss接口

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

    A2类实现接口S2(灵鸽一号):

    实现S1接口

    public class A2 implements S2 {
        @Override
        public void show() {
            System.out.println("灵鸽七号");
    
        }}

    B2类实现接口S2(灵鸽二号):

    实现S1接口

    public class B2 implements S2 {
        @Override
        public void show() {
            System.out.println("灵鸽七号");
    
        }}

    C2类实现接口S2(灵鸽三号):

    实现S1接口

    public class C2 implements S2 {
        @Override
        public void show() {
            System.out.println("灵鸽七号");
        }}

    D2类实现接口S2(灵鸽四号):

    实现S1接口

    public class D2 implements S2 {
        @Override
        public void show() {
            System.out.println("灵鸽七号");
        }}

    E2类实现接口S2(灵鸽五号):

    实现Ss接口

    public class E2 implements S2 {
        @Override
        public void show() {
            System.out.println("灵鸽七号");
        }}

    F2类实现接口S2(灵鸽六号):

    实现Ss接口

    public class F2 implements S2 {
        @Override
        public void show() {
            System.out.println("灵鸽七号");
        }}

    G2类实现接口S2(灵鸽七号):

    实现Ss接口

    public class G2 implements S2 {
        @Override
        public void show() {
            System.out.println("灵鸽七号");
        }}

    抽象工厂、工厂

    Zz接口(七侠传承):

    接口内声明了一个铸剑方法abc1()和一个养鸽子方法abc2()

    public interface Zz {
        S1 abc1(String a);
        S2 abc2(String a);}

    Nan类实现接口Zz(师傅):

    实现Zz接口

    public class Nan implements Zz {
        private static S1 s1;
        private static S2 s2;
    
        public S1 abc1(String a) {
            if ("长虹剑".equals(a)) {
                s1 = new A1();
            } else if ("奔雷剑".equals(a)) {
                s1 = new F1();
            } else if ("青光剑".equals(a)) {
                s1 = new E1();
            } else if ("雨花剑".equals(a)) {
                s1 = new D1();
            } else if ("旋风剑".equals(a)) {
                s1 = new G1();
            } else {
                System.out.println("铸剑失败");
            }
            return s1;
        }
        public S2 abc2(String a) {
            if ("灵鸽一号".equals(a)) {
                s2 = new A2();
            } else if ("灵鸽二号".equals(a)) {
                s2 = new F2();
            } else if ("灵鸽三号".equals(a)) {
                s2 = new E2();
            } else if ("灵鸽四号".equals(a)) {
                s2 = new D2();
            } else if ("灵鸽五号".equals(a)) {
                s2 = new G2();
            } else {
                System.out.println("领养失败");
            }
            return s2;
        }}

    Nv类实现接口Zz(师娘):

    实现Zz接口

    public class Nv implements Zz {
        private static S1 s1;
        private static S2 s2;
    
        public S1 abc1(String a) {
            if ("冰魄剑".equals(a)) {
                s1 = new B1();
            } else if ("紫云剑".equals(a)) {
                s1 = new C1();
            } else {
                System.out.println("铸剑失败");
            }
            return s1;
        }
        public S2 abc2(String a) {
            if ("灵鸽六号".equals(a)) {
                s2 = new B2();
            } else if ("灵鸽七号".equals(a)) {
                s2 = new C2();
            } else {
                System.out.println("领养失败");
            }
            return s2;
        }}

    测试

    测试类:

    public class Demo {
        public static void main(String[] args) {
            System.out.println("---------至阳传承-------------");
            //师傅
            Nan nan = new Nan();
            //造剑
            S1 a1 = nan.abc1("长虹剑");
            S1 d1 = nan.abc1("雨花剑");
            S1 e1 = nan.abc1("青光剑");
            S1 f1 = nan.abc1("奔雷剑");
            S1 g1 = nan.abc1("旋风剑");
            //养鸽子
            S2 a2 = nan.abc2("灵鸽一号");
            S2 d2 = nan.abc2("灵鸽二号");
            S2 e2 = nan.abc2("灵鸽三号");
            S2 f2 = nan.abc2("灵鸽四号");
            S2 g2 = nan.abc2("灵鸽五号");
            a1.show();
            d1.show();
            e1.show();
            f1.show();
            g1.show();
            a2.show();
            d2.show();
            e2.show();
            f2.show();
            g2.show();
            System.out.println("---------至阴传承-------------");
            //女铸剑师
            Nv nv = new Nv();
            S1 b1 = nv.abc1("冰魄剑");
            S1 c1 = nv.abc1("紫云剑");
            b1.show();
            c1.show();
            S2 b2 = nv.abc2("灵鸽六号");
            S2 c2 = nv.abc2("灵鸽七号");
            b2.show();
            c2.show();
        }}

    推荐学习:《java视频教程

    以上就是实例详解JAVA抽象工厂模式的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:java
    上一篇:带你搞懂Java的接口(实例详解) 下一篇:一起聊聊Java多线程之线程安全问题
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• JavaScript代码必须写在head标签里吗• javascript可以用el表达式吗• 完全掌握Java单例模式• JAVA详细解析之IO流、File、字节流以及字符流• 带你了解JavaScript中的键盘、鼠标事件
    1/1

    PHP中文网