抽象工厂 设计模式系列3

概述

创建一系列相关或相互依赖对象(一个产品族)。

围绕一个超级工厂创建其他工厂,每个生成的工厂都能按照工厂模式提供全部对象(每个工厂都有一个产品族)。

产品族扩展非常困难,既要在抽象的 Creator 里加代码,又要在具体的里面加代码

比如人穿衣,你需要1套衣服,包括 上衣 裤子 鞋子,通常来说你不会西装配大裤衩和球鞋,你需要成套的,运动套,或者时尚套,或正装。

那么 这个超级工厂 (interface (我习惯用接口,你也可以写成个抽象类))就是穿衣原则,规定了要 上衣 裤子 鞋子

根据超级工厂设计的工厂 (实现超级工厂interface的类)(多个产品族)(正装厂商,运动服厂)能为你提供套装。

同等级产品(不同产品族)也有设计规范,

interface 裤子, 实现它你可以得到 西裤,运动裤,破洞牛仔;

interface 上衣…

当你想要一套衣服 (正装),你需要

你首先要这个工厂,你可以直接new 这个工厂,也可以用加一个用来选择的方法

超级工厂interface XiZhuang_factory =getFactory(“正装”);

(用更抽象的类结构声明 具体类 ,抽象工厂到处都是这钟逻辑)

然后你可以

XiZhuang_factory.get上衣();

XiZhuang_factoryget裤子();

示例

在这里插入图片描述

public interface KuZi {
    void method();
}

public class KuZi_KuCha implements KuZi {
    public KuZi_KuCha() {
        System.out.println("裤衩");
    }
    @Override
    public void method() {

    }
}

public class KuZi_XiKu implements KuZi {
    public KuZi_XiKu() {
        System.out.println("西裤");
    }
    @Override
    public void method() {

    }
}




public interface ShangYi {
    void method();
}

public class shangYi_Txue implements ShangYi {
    public shangYi_Txue() {
        System.out.println("T桖");
    }

    @Override
    public void method() {

    }
}

public class shangYi_XiFu implements ShangYi {
    public shangYi_XiFu() {
        System.out.println("西装");
    }
    @Override
    public void method() {

    }
}



public interface suitFactory {
    KuZi get_KuZI();
    ShangYi get_ShangYi();
}


public class suitFactory_Summer implements suitFactory {
    @Override
    public KuZi get_KuZI() {
        return new KuZi_KuCha();
    }

    @Override
    public ShangYi get_ShangYi() {
        return  new shangYi_Txue();
    }
}


public class suitFactory_XiZhuang implements suitFactory {
    @Override
    public KuZi get_KuZI() {
        return new KuZi_XiKu();
    }

    @Override
    public ShangYi get_ShangYi()
    {
        return new shangYi_XiFu();
    }

}


public class factoryProducer {
    static suitFactory getFactory(String a) {
        if(a=="西装") return new suitFactory_XiZhuang();
        else if(a=="夏装") return new suitFactory_Summer();
        return null;
    }
}


public class demo {
    public static void main(String[] args) {
        System.out.println("正装");
        suitFactory factory=factoryProducer.getFactory("西装");
        factory.get_KuZI();
        factory.get_ShangYi();


        System.out.println("\n夏季");
        suitFactory factory2=factoryProducer.getFactory("夏装");
        factory2.get_KuZI();
        factory2.get_ShangYi();
    }
}

运行结果
    
正装
西裤
西装

夏季
裤衩
T桖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值