概要
- 工厂模式提供了一种创建对象的方法,而无需指定要创建的具体类
- 通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。
类型
- 简单工厂模式:简单工厂模式不是一个正式的设计模式,但它是工厂模式的基础。它使用一个单独的工厂类来创建不同的对象,根据传入的参数决定创建哪种类型的对象。
- 工厂方法模式:工厂方法模式定义了一个创建对象的接口,但由子类决定实例化哪个类。工厂方法将对象的创建延迟到子类。
- 抽象工厂模式:抽象工厂模式提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。
意图
定义一个创建对象的接口,让其子类决定实例化哪一个具体的类。工厂模式使对象的创建过程延迟到子类。
何时使用
当我们需要在不同条件下创建不同实例时。
关键代码
对象的创建过程在子类中实现。
应用实例
- 汽车制造:客户需要一辆汽车,只需从工厂提货,而不需要关心汽车的制造过程及其内部实现。
优点
- 调用者只需要知道对象的名称即可创建对象。
- 扩展性高,如果需要增加新产品,只需扩展一个工厂类即可。
- 屏蔽了产品的具体实现,调用者只关心产品的接口。
缺点
每次增加一个产品时,都需要增加一个具体类和对应的工厂,使系统中类的数量成倍增加,增加了系统的复杂度和具体类的依赖。
代码示例
简单工厂模式
建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
- 手机接口类
//手机接口类
public interface Phone {
public void call();
}
- 两个手机实现类
//手机实现类
public class Iphone implements Phone{
@Override
public void call(){
System.out.println("用苹果手机打电话!");
}
}
//手机实现类
public class Mphone implements Phone{
@Override
public void call(){
System.out.println("用小米手机打电话!");
}
}
- 生产手机的工厂类
//生产手机的工厂类
public class PhoneFactory {
public Phone create(String type){
if (type.equals("Iphone")){
return new Iphone();
}else if (type.equals("Mphone")){
return new Mphone();
}else
return null;
}
}
- 测试类
public class PhoneTest {
public static final String Iphone = "Iphone";
public static final String Mphone = "Mphone";
public static void main(String[] args) {
// 生产小米手机
PhoneFactory factory1 = new PhoneFactory();
factory1.create(Mphone).call();
// 生产苹果手机
PhoneFactory factory2 = new PhoneFactory();
factory2.create(Iphone).call();
}
}
- 运行结果:
用小米手机打电话!
用苹果手机打电话!
工厂方法模式
对简单工厂模式的改进,使用一个工厂接口,创建多个工厂类,每个工厂创建对应的对象。一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。有利于代码的维护和扩展。
- 工厂接口
public interface PhoneFactory_1 {
public Phone create();
}
- 小米手机工厂
public class MPhoneFactory_1 implements PhoneFactory_1{
@Override
public Phone create() {
return new Mphone();
}
}
- 苹果手机工厂
public class IPhoneFactory_1 implements PhoneFactory_1{
@Override
public Phone create() {
return new Iphone();
}
}
- 测试类
public class PhoneTest_1 {
public static void main(String[] args) {
// 生产苹果手机
PhoneFactory_1 factory1 = new IPhoneFactory_1();
factory1.create().call();
// 生产小米手机
PhoneFactory_1 factory2 = new MPhoneFactory_1();
factory2.create().call();
}
}
- 运行结果
用苹果手机打电话!
用小米手机打电话!
标签:JAVA,create,模式,工厂,PhoneFactory,new,手机,public
From: https://www.cnblogs.com/shihongpin/p/18369406