水果网站系统的建设与实现,河南安阳网站建设,wordpress支付文件在哪,盘锦注册公司Java工厂模式详解#xff1a;方法工厂模式与抽象工厂模式
一、引言
在Java开发中#xff0c;设计模式是解决常见软件设计问题的一种有效方式。工厂模式作为创建型设计模式的一种#xff0c;提供了灵活的对象创建机制#xff0c;有助于降低代码的耦合度#xff0c;提高系…Java工厂模式详解方法工厂模式与抽象工厂模式
一、引言
在Java开发中设计模式是解决常见软件设计问题的一种有效方式。工厂模式作为创建型设计模式的一种提供了灵活的对象创建机制有助于降低代码的耦合度提高系统的可维护性和可扩展性。本文将详细介绍Java中的方法工厂模式Factory Method Pattern和抽象工厂模式Abstract Factory Pattern。
二、方法工厂模式
2.1 定义
方法工厂模式Factory Method Pattern是一种创建型设计模式它定义了一个用于创建对象的接口但让子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。
2.2 结构
方法工厂模式主要包含以下几个角色
抽象工厂角色Creator声明了工厂方法用于返回一个产品对象。具体工厂角色Concrete Creator实现了抽象工厂角色中的工厂方法用于返回一个具体的产品对象。抽象产品角色Product定义了产品的接口是工厂方法所创建对象的超类型也就是产品对象的共同接口。具体产品角色Concrete Product实现了抽象产品角色所定义的接口由具体工厂角色创建客户端通过抽象产品角色使用具体产品。
2.3 优点
可扩展性当需要增加新的产品时只需要增加相应的具体产品类和具体工厂类无需修改现有代码。解耦将产品的创建与使用分离客户端只需要知道产品接口而无需知道具体产品的类名。
2.4 缺点
增加类的数量每增加一个产品都需要增加一个具体产品类和一个具体工厂类增加了系统的复杂性。
2.5 代码示例
// 抽象产品角色
public interface Product {void doSomething();
}// 具体产品A
public class ProductA implements Product {Overridepublic void doSomething() {System.out.println(A do Something);}
}// 具体产品B
public class ProductB implements Product {Overridepublic void doSomething() {System.out.println(B do Something);}
}// 抽象工厂角色
public abstract class Factory {abstract Product create();
}// 具体工厂A
public class FactoryA extends Factory {OverrideProduct create() {return new ProductA();}
}// 具体工厂B
public class FactoryB extends Factory {OverrideProduct create() {return new ProductB();}
}// 客户端代码
public class Client {public static void main(String[] args) {Factory factory new FactoryA();Product product factory.create();product.doSomething();factory new FactoryB();product factory.create();product.doSomething();}
}三、抽象工厂模式
3.1 定义
抽象工厂模式Abstract Factory Pattern提供了一种创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。
3.2 结构
抽象工厂模式主要包含以下几个角色
抽象工厂角色Abstract Factory声明了一组用于创建产品的抽象方法。具体工厂角色Concrete Factory实现了抽象工厂角色中的抽象方法用于创建具体的产品对象。抽象产品角色Abstract Product定义了产品的接口是工厂方法所创建对象的超类型。具体产品角色Concrete Product实现了抽象产品角色所定义的接口由具体工厂角色创建。
3.3 优点
封装性客户端只需要知道产品的抽象类型无需关心具体产品的实现细节。可扩展性当需要增加新的产品族时只需要增加相应的具体产品类和具体工厂类无需修改现有代码。灵活性可以在不修改客户端代码的情况下更换产品族。
3.4 缺点
增加系统的复杂性由于涉及到多个抽象层增加了系统的理解和维护难度。
3.5 代码示例
// 抽象产品A
public interface Engine {void run();void start();
}// 具体产品A1
public class LuxuryEngine implements Engine {Overridepublic void run() {System.out.println(转的快);}Overridepublic void start() {System.out.println(启动快!可以自动启停!);}
}// 抽象产品B
public interface Seat {void massage();
}// 具体产品B1
public class LuxurySeat implements Seat {Overridepublic void massage() {System.out.println(可以自动按摩);}
}// 抽象工厂角色
public interface CarFactory {Engine createEngine();Seat createSeat();
}// 具体工厂A
public class LuxuryCarFactory implements CarFactory {Overridepublic Engine createEngine() {return new LuxuryEngine();}Overridepublic Seat createSeat() {return new LuxurySeat();}
}// 客户端代码
public class Client {public static void main(String[] args) {CarFactory factory new LuxuryCarFactory();Engine engine factory.createEngine();engine.run();engine.start();Seat seat factory.createSeat();seat.massage();}
}四、总结
方法工厂模式和抽象工厂模式都是用于创建对象的设计模式但它们的应用场景和侧重点不同。方法工厂模式侧重于单个对象的创建通过子类决定实例化哪个类而抽象工厂模式则侧重于创建一系列相关或相互依赖的对象通过接口来定义一组产品的创建方法。在实际开发中应根据具体需求选择合适的设计模式。