设计模式-工厂模式

本文详细介绍了简单工厂模式和工厂方法模式在软件设计中的应用。通过示例代码展示了如何创建手机产品,包括小米手机和苹果手机,并进一步扩展到抽象工厂模式,增加了生产PC产品的能力。讨论了不同模式间的区别和扩展性,为实际开发提供了指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单工厂模式

1)简单工厂模式的设计方案:定义一个可以实例化Phone对象的类,封建创建对象的代码。
在这里插入图片描述
2)看示例代码
手机标准类Phone:

public interface Phone {
    void make();
}

小米产品手机:

public class MiPhone implements Phone {
    public MiPhone() {
        this.make();
    }
    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("make xiaomi phone!");
    }
}

苹果产品手机:

public class IPhone implements Phone {
    public IPhone() {
        this.make();
    }
    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("make iphone!");
    }
}

PhoneFactory类:手机代工厂

public class PhoneFactory {
    public Phone makePhone(String phoneType) {
        if(phoneType.equalsIgnoreCase("MiPhone")){
            return new MiPhone();
        }
        else if(phoneType.equalsIgnoreCase("iPhone")) {
            return new IPhone();
        }
        return null;
    }
}

客户生产产品:

public class Client {
    public static void main(String[] arg) {
        PhoneFactory factory = new PhoneFactory();
        Phone miPhone = factory.makePhone("MiPhone");                   
        IPhone iPhone = (IPhone)factory.makePhone("iPhone");
    }
}

工厂方法模式

工厂方法模式相比于简单工厂模式是将具体的产品抽象到产品工厂
在这里插入图片描述
AbstractFactory类:生产不同产品的工厂的抽象类

public interface AbstractFactory {
    Phone makePhone();
}

MiPhoneFactory类:生产小米手机的工厂

public class MiPhoneFactory implements AbstractFactory{
    @Override
    public Phone makePhone() {
        return new MiPhone();
    }
}

IPhoneFactory类:生产苹果手机的工厂

public class IPhoneFactory implements AbstractFactory {
    @Override
    public Phone makePhone() {
        return new IPhone();
    }
}

Client类调用:

public class Client {
    public static void main(String[] args) {
         AbstractFactory miFactory = new MiPhoneFactory();
         AbstractFactory appleFactory = new IphoneFactory();
         miFactory.makePhone();            // make xiaomi phone!
         appleFactory.makePhone();        // make iphone!
    }
}

抽象工厂方法

抽象工厂是在工厂方法的模式上增加了一层抽象的产品,增加可扩展能力
在这里插入图片描述
PC类:定义PC产品的接口(AbstractPC)

public interface PC {
    void make();
}

MiPC类:定义小米电脑产品(MIPC)

public class MiPC implements PC {
    public MiPC() {
        this.make();
    }
    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("make xiaomi PC!");
    }
}

MAC类:定义苹果电脑产品(MAC)

public class MAC implements PC {
    public MAC() {
        this.make();
    }
    @Override
    public void make() {
        // TODO Auto-generated method stub
        System.out.println("make MAC!");
    }
}

下面需要修改工厂相关的类的定义:

AbstractFactory类:增加PC产品制造接口

public interface AbstractFactory {
    Phone makePhone();
    PC makePC();
}

MiPhoneFactory类:增加小米PC的制造

public class MiPhoneFactory implements AbstractFactory{
    @Override
    public Phone makePhone() {
        return new MiPhone();
    }
    @Override
    public PC makePC() {
        return new MiPC();
    }
}

IPhoneFactory类:增加苹果PC的制造

public class IPhoneFactory implements AbstractFactory {
    @Override
    public Phone makePhone() {
        return new IPhone();
    }
    @Override
    public PC makePC() {
        return new MAC();
    }
}

演示:

public class Client {
    public static void main(String[] arg) {
        AbstractFactory miFactory = new MiPhoneFactory();
        AbstractFactory appleFactory = new IPhoneFactory();
        miFactory.makePhone();            // make xiaomi phone!
        miFactory.makePC();                // make xiaomi PC!
        appleFactory.makePhone();        // make iphone!
        appleFactory.makePC();            // make MAC!
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值