工厂方法模式学习笔记

工厂方法demo

在这里插入图片描述

工厂方法测试类
package com.zhh.designpattern.factorymethod;

// 为解决简单工厂不便扩展新的品牌的产品问题(可以扩展,但违背开闭原则),
// 使用工厂方法模式,接口定义创建冰箱的规范,即抽象方法,具体创建由各个产品的实现工厂来完成
// 简单的说,工厂方法模式,就是由抽象工厂定义创建产品的规范,而产品的创建延迟到子类工厂来完成
// 这里将使用空调作为产品来举例
public class FactoryMethodTest
{
    public static void main(String[] args) {
        IAirConditionFactory haierFactory = new HaierAirConditionFactory();
        IAirCondition haierAirCondition = haierFactory.createAirCondition();
        haierAirCondition.working();

        IAirConditionFactory meiDiFactory = new MeidiAirConditionFactory();
        IAirCondition meidiAirConDition = meiDiFactory.createAirCondition();
        meidiAirConDition.working();

        // 这里如果要增加格力品牌的空调,不需要修改顶层的工厂接口,而是直接增加一个格力的空调工厂,实现工厂接口就可以
        // 增加格力工厂后,实现createAirCondition方法,创建格力空调,
        // 这时候没有定义格力空调的实例类,也只需要增加格力空调的实例类即可
        // 此时还没有GeliAirConditionFactory和GeliAirCondition,所以将下面代码注释
//        IAirConditionFactory geliFactory = new GeliAirConditionFactory();
//        geliFactory.createAirCondition();
    }
}
测试效果

在这里插入图片描述

工厂抽象类(接口)
package com.zhh.designpattern.factorymethod;

// 工厂方法模式 顶层的空调工厂的接口,定义了创建空调的规范,客户端需要具体的空调产品时,
// 只需创建一个相应品牌的空调工厂,实现这个工厂接口,也即拥有了生产空调的能力
// 另外再增加一个相应品牌的空调实体,就可以真正实现产品的创建了
// 优点:与简单工厂相比,不需要修改原来已有的代码逻辑,符合开放封闭原则,具有较强的可扩展性
// 缺点:每增加一个品牌的产品,需要同时增加一个产品工厂和一个产品实体,对于项目开发来说,项目结构的复杂度会骤然提升
public interface IAirConditionFactory {

    // 定义创建空调的规范
    IAirCondition createAirCondition();

}
产品抽象类
package com.zhh.designpattern.factorymethod;

public interface IAirCondition {

    void working();

}
具体工厂类(海尔品牌工厂)
package com.zhh.designpattern.factorymethod;

public class HaierAirConditionFactory implements IAirConditionFactory {
    @Override
    public IAirCondition createAirCondition() {
        return new HaierAirCondition();
    }
}
具体工厂类(美的品牌工厂)
package com.zhh.designpattern.factorymethod;

public class MeidiAirConditionFactory implements IAirConditionFactory{
    @Override
    public IAirCondition createAirCondition(){
        return new MeidiAirCondition();
    }
}
产品产品类(海尔空调)
package com.zhh.designpattern.factorymethod;

public class HaierAirCondition implements IAirCondition {

    public HaierAirCondition(){
        System.out.println("海尔空调生产完成.");
    }

    @Override
    public void working() {
        System.out.println("海尔空调开始工作..\n-------------------\n");
    }
}
产品产品类(美的空调)
package com.zhh.designpattern.factorymethod;

public class MeidiAirCondition implements IAirCondition {

    MeidiAirCondition(){
        System.out.println("美的空调生产完成.");
    }

    @Override
    public void working() {
        System.out.println("美的空调开始工作..\n-------------------\n");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值