怎么制作私人网站教程,专业视频剪辑培训机构,商品推广文案,百度云盘网页登录入口系列文章目录
设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式#xff0c;5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式#xff0c;每一种模式的概念、使用…系列文章目录
设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式每一种模式的概念、使用场景和优缺点。 设计模式之模板方法模式通俗易懂快速理解以及模板方法模式的使用场景 设计模式之-建造者模式通俗易懂理解以及建造者模式的使用场景和示列代码 设计模式之-代理模式快速掌握理解代理模式以及代理模式的使用场景 设计模式之-原型模式快速掌握原型模式通俗易懂的理解原型模式以及使用场景 设计模式之-中介者模式快速掌握中介者模式通俗易懂的讲解中介者模式以及它的使用场景 设计模式之-责任链模式快速掌握责任链模式通俗易懂的讲解责任链模式以及它的使用场景 设计模式之-装饰模式快速掌握装饰模式通俗易懂的讲解装饰模式以及它的使用场景 文章目录 系列文章目录前言一、3种模式的概念、使用场景和优缺点简单工厂模式Simple Factory Pattern工厂方法模式Factory Method Pattern抽象工厂模式Abstract Factory Pattern 二、3种工厂模式的代码示例简单工厂模式工厂方法模式抽象工厂模式 前言
当谈到工厂模式时通常指的是三种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式。下面我将详细讲解每一种模式的概念、使用场景和优缺点。
一、3种模式的概念、使用场景和优缺点
简单工厂模式Simple Factory Pattern
概念简单工厂模式通过一个工厂类来创建不同类型的对象客户端只需要知道所需对象的类型即可。 使用场景当对象的创建逻辑相对简单且不需要频繁修改时可以使用简单工厂模式。 优点客户端代码与具体产品解耦易于扩展和维护。 缺点违反了开闭原则新增产品需要修改工厂类的代码不符合开放封闭原则。
工厂方法模式Factory Method Pattern
概念工厂方法模式将对象的创建延迟到子类中由子类决定具体创建哪个对象。 使用场景当需要创建一组相关或相互依赖的对象时可以使用工厂方法模式。 优点符合开闭原则新增产品只需要添加相应的工厂类不需要修改现有代码。 缺点增加了系统的复杂度每个产品都需要一个对应的工厂类。
抽象工厂模式Abstract Factory Pattern
概念抽象工厂模式提供一个接口用于创建一系列相关或相互依赖的对象而不需要指定具体的类。 使用场景当需要创建一组相关对象的产品族时可以使用抽象工厂模式。 优点符合开闭原则新增产品族只需要添加相应的具体工厂类不需要修改现有代码。 缺点增加了系统的复杂度每个产品族都需要一个对应的具体工厂类。
二、3种工厂模式的代码示例
简单工厂模式
// 产品接口
interface Product {void operation();
}// 具体产品A
class ConcreteProductA implements Product {Overridepublic void operation() {System.out.println(ConcreteProductA operation);}
}// 具体产品B
class ConcreteProductB implements Product {Overridepublic void operation() {System.out.println(ConcreteProductB operation);}
}// 简单工厂类
class SimpleFactory {public static Product createProduct(String type) {if (type.equals(A)) {return new ConcreteProductA();} else if (type.equals(B)) {return new ConcreteProductB();}return null;}
}// 客户端代码
public class Main {public static void main(String[] args) {Product productA SimpleFactory.createProduct(A);productA.operation();Product productB SimpleFactory.createProduct(B);productB.operation();}
}工厂方法模式
// 产品接口
interface Product {void operation();
}// 具体产品A
class ConcreteProductA implements Product {Overridepublic void operation() {System.out.println(ConcreteProductA operation);}
}// 具体产品B
class ConcreteProductB implements Product {Overridepublic void operation() {System.out.println(ConcreteProductB operation);}
}// 工厂接口
interface Factory {Product createProduct();
}// 具体工厂A
class ConcreteFactoryA implements Factory {Overridepublic Product createProduct() {return new ConcreteProductA();}
}// 具体工厂B
class ConcreteFactoryB implements Factory {Overridepublic Product createProduct() {return new ConcreteProductB();}
}// 客户端代码
public class Main {public static void main(String[] args) {Factory factoryA new ConcreteFactoryA();Product productA factoryA.createProduct();productA.operation();Factory factoryB new ConcreteFactoryB();Product productB factoryB.createProduct();productB.operation();}
}抽象工厂模式
// 产品接口A
interface ProductA {void operation();
}// 具体产品A1
class ConcreteProductA1 implements ProductA {Overridepublic void operation() {System.out.println(ConcreteProductA1 operation);}
}// 具体产品A2
class ConcreteProductA2 implements ProductA {Overridepublic void operation() {System.out.println(ConcreteProductA2 operation);}
}// 产品接口B
interface ProductB {void operation();
}// 具体产品B1
class ConcreteProductB1 implements ProductB {Overridepublic void operation() {System.out.println(ConcreteProductB1 operation);}
}// 具体产品B2
class ConcreteProductB2 implements ProductB {Overridepublic void operation() {System.out.println(ConcreteProductB2 operation);}
}// 抽象工厂接口
interface AbstractFactory {ProductA createProductA();ProductB createProductB();
}// 具体工厂1
class ConcreteFactory1 implements AbstractFactory {Overridepublic ProductA createProductA() {return new ConcreteProductA1();}Overridepublic ProductB createProductB() {return new ConcreteProductB1();}
}// 具体工厂2
class ConcreteFactory2 implements AbstractFactory {Overridepublic ProductA createProductA() {return new ConcreteProductA2();}Overridepublic ProductB createProductB() {return new ConcreteProductB2();}
}// 客户端代码
public class Main {public static void main(String[] args) {AbstractFactory factory1 new ConcreteFactory1();ProductA productA1 factory1.createProductA();ProductB productB1 factory1.createProductB();productA1.operation();productB1.operation();AbstractFactory factory2 new ConcreteFactory2();ProductA productA2 factory2.createProductA();ProductB productB2 factory2.createProductB();productA2.operation();productB2.operation();}
}