工厂模式
一.核心本质
实现了调用者和创建者的分离,用工厂方法代替new操作
将选择实现类,创建对象统一管理和控制.从而将调用者和实现类解耦
详细分类:
简单工厂模式
用来生产同一等级结构的任意产品(增加新产品需要修改已有代码, 可通过装饰者模式优化)
工厂方法模式
用来生产同一等级结构的固定产品(支持增加任意产品)
抽象工厂模式
用来生产不同产品族的全部产品(支持增加产品族)
二. 工厂示例
2.1 简单工厂
package com.skd.designMode.factory; public class SimpleFactory { public static Xiaomi getXiaomi() { return new Xiaomi(); } public static Huawei getHuawei() { return new Huawei(); } } class Xiaomi { } class Huawei { }
2.2 工厂方法
package com.skd.designMode.factory; /** * @TODO 工厂方法 * * 不同工厂实现同一个接口生产不同型号的同一类型产品 * */ public class methodFactory { public static void main(String[] args) { MiPhone miPhone = (MiPhone) new MiPhone().createPhone(); IPhone iPhone = (IPhone) new IPhone().createPhone(); } } interface Phone{ Phone createPhone(); } class MiPhone implements Phone{ @Override public Phone createPhone() { return new MiPhone(); } } class IPhone implements Phone{ @Override public Phone createPhone() { return new IPhone(); } }
2.3 抽象工厂
package com.skd.designMode.factory; /** * @TODO 抽象工厂模式 用于生产产品族 支持增加产品族 * * 针对多个业务类型的场景(多个接口) */ public class AbstractFactory { public static void main(String[] args) { // 高端汽车 Car nbcar = new NBCar(); // 高端引擎 nbcar.createEngine(); // 高端轮胎 nbcar.createTyre(); // 低端汽车 Car sbcar = new SBCar(); // 低端引擎 sbcar.createEngine(); // 低端轮胎 sbcar.createTyre(); } } /** * @TODO 汽车接口 */ interface Car{ Tyre createTyre(); Engine createEngine(); } /** * @TODO 生产高端汽车 */ class NBCar implements Car { @Override public Tyre createTyre() { return new NBTyre().createTyre(); } @Override public Engine createEngine() { return new NBEngine().createEngine(); } } /** * @TODO 生产低端汽车 */ class SBCar implements Car { @Override public Tyre createTyre() { return new SBTyre().createTyre(); } @Override public Engine createEngine() { return new SBEngine().createEngine(); } } /** * @TODO 轮胎接口 */ interface Tyre{ Tyre createTyre(); } /** * @TODO 高端轮胎 */ class NBTyre implements Tyre{ @Override public Tyre createTyre() { return new NBTyre(); } } /** * @TODO 低端轮胎 */ class SBTyre implements Tyre{ @Override public Tyre createTyre() { return new SBTyre(); } } /** * @TODO 引擎接口 */ interface Engine{ Engine createEngine(); } /** * @TODO 高端引擎 */ class NBEngine implements Engine{ @Override public Engine createEngine() { return new NBEngine(); } } /** * @TODO 低端引擎 */ class SBEngine implements Engine{ @Override public Engine createEngine() { return new SBEngine(); } }
如果文章对您有所帮助,可以点一下推荐