GOF的23种设计模式(2)—工厂模式

工厂模式


效果

  • 实例化对象,用工厂方法代替new。实现了创建者和调用者的分离。

  • 将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。

分类

  • 简单工厂模式:用来产生同一等级结构中的任意产品。对于增加新的产品,需要修改已有代码。
  • 工厂方法模式:用来产生同一等级结构中的固定产品。支持增加任意产品。
  • 抽象工厂模式:用来生产不同产品族的全部产品。对于增加新的产品,无能为力;支持增加产品族。

简单工厂模式VS工厂方法模式

  • 结构复杂度:显然简单工厂模式占优,简单工厂模式只要一个工厂,而工厂方法模式的工厂类随着产品类个数增加而增加。

  • 代码复杂度:代码复杂度与结构复杂度相反,简单工厂模式的工厂类随着产品增加需要增加更多方法(代码),而工厂方法模式每个具体工厂类只完成单一任务,代码简单。

  • 客户端编程难度:工厂方法模式虽然满足了OCP,但客户端编码中需要对工厂实例化,而简单工厂模式的工厂类是一个静态类。

  • 管理上的难度:工厂方法模式需要维护的工厂类过多,而简单工厂模式只有一个。

    设计理论建议使用工厂方法模式,但实际中一般都用简单工厂模式。

代码

    //简单工厂模式
    public class PhoneSimpleFactory {
        public static Phone getPhone(String name) {
            if (name.equals("小米")) {
                return new XiaoMiPhone();
            } else if (name.equals("苹果")) {
                return new ApplePhone();
            } else {
                return null;
            }
        }
    }
    public interface Phone {
        void name();
    }

    //工厂方法模式
    public interface PhoneFactory {
        Phone getPhone();
    }
    public class AppleFactory implements PhoneFactory {
        @Override
        public Phone getPhone() {
            return new ApplePhone();
        }
    }
    public class XiaoMiFactory implements PhoneFactory {
        @Override
        public Phone getPhone() {
            return new XiaoMiPhone();
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值