当前位置: 首页 > news >正文

创建型设计模式与面向接口编程

创建型设计模式(Creational Patterns)的主要目的之一就是帮助实现面向接口编程,避免直接创建实现类的实例。通过这些模式,可以将对象的创建过程封装起来,使得客户端代码不需要知道具体的实现类,从而提高代码的灵活性和可维护性。

以下是创建型设计模式的详细说明及其如何支持面向接口编程:

1. 单例模式(Singleton Pattern)

  • 目的:确保一个类只有一个实例,并提供一个全局访问点。
  • 面向接口编程:虽然单例模式通常不涉及接口的使用,但它通过控制实例的创建,避免了客户端直接创建实例。
  • 示例
    public class Singleton {private static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
    }
    
    客户端代码只能通过 getInstance() 方法获取实例,无法直接实例化 Singleton 类。

2. 工厂方法模式(Factory Method Pattern)

  • 目的:定义一个创建对象的接口,但将实例化的具体类延迟到子类中实现。
  • 面向接口编程:客户端代码通过工厂接口创建对象,而不需要知道具体的实现类。
  • 示例
    interface Product {void doSomething();
    }class ConcreteProductA implements Product {@Overridepublic void doSomething() {System.out.println("Product A");}
    }interface Factory {Product createProduct();
    }class ConcreteFactoryA implements Factory {@Overridepublic Product createProduct() {return new ConcreteProductA();}
    }// 客户端代码
    Factory factory = new ConcreteFactoryA();
    Product product = factory.createProduct();
    product.doSomething();
    
    客户端代码只与 Factory 接口和 Product 接口交互,不直接创建 ConcreteProductA 的实例。

3. 抽象工厂模式(Abstract Factory Pattern)

  • 目的:提供一个接口,用于创建一系列相关或依赖的对象,而不指定具体的类。
  • 面向接口编程:客户端代码通过抽象工厂接口创建一组相关对象,而不需要知道具体的实现类。
  • 示例
    interface Button {void paint();
    }class WinButton implements Button {@Overridepublic void paint() {System.out.println("Windows Button");}
    }interface GUIFactory {Button createButton();
    }class WinFactory implements GUIFactory {@Overridepublic Button createButton() {return new WinButton();}
    }// 客户端代码
    GUIFactory factory = new WinFactory();
    Button button = factory.createButton();
    button.paint();
    
    客户端代码只与 GUIFactory 接口和 Button 接口交互,不直接创建 WinButton 的实例。

4. 建造者模式(Builder Pattern)

  • 目的:将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
  • 面向接口编程:客户端代码通过建造者接口构建对象,而不需要知道具体的实现类。
  • 示例
    class Product {private String partA;private String partB;// 构造函数和方法省略
    }interface Builder {void buildPartA();void buildPartB();Product getProduct();
    }class ConcreteBuilder implements Builder {private Product product = new Product();@Overridepublic void buildPartA() {product.setPartA("Part A");}@Overridepublic void buildPartB() {product.setPartB("Part B");}@Overridepublic Product getProduct() {return product;}
    }class Director {private Builder builder;public Director(Builder builder) {this.builder = builder;}public Product construct() {builder.buildPartA();builder.buildPartB();return builder.getProduct();}
    }// 客户端代码
    Builder builder = new ConcreteBuilder();
    Director director = new Director(builder);
    Product product = director.construct();
    
    客户端代码只与 Builder 接口和 Director 类交互,不直接创建 Product 的实例。

5. 原型模式(Prototype Pattern)

  • 目的:通过克隆现有对象来创建新对象,而不是通过标准构造函数。
  • 面向接口编程:客户端代码通过原型接口克隆对象,而不需要知道具体的实现类。
  • 示例
    interface Prototype {Prototype clone();
    }class ConcretePrototype implements Prototype {@Overridepublic Prototype clone() {return new ConcretePrototype();}
    }// 客户端代码
    Prototype prototype = new ConcretePrototype();
    Prototype clone = prototype.clone();
    
    客户端代码只与 Prototype 接口交互,不直接创建 ConcretePrototype 的实例。

总结

创建型设计模式通过封装对象的创建过程,实现了面向接口编程,避免了客户端代码直接依赖具体的实现类。这种方式提高了代码的灵活性、可维护性和可扩展性,是实现面向对象设计原则的重要手段。

http://www.lryc.cn/news/484352.html

相关文章:

  • 算法每日双题精讲——滑动窗口(长度最小的子数组,无重复字符的最长子串)
  • 1.7 JS性能优化
  • STL - vector的使用和模拟实现
  • 《鸿蒙生态:开发者的机遇与挑战》
  • 【C++融会贯通】二叉树进阶
  • 使用python-Spark使用的场景案例具体代码分析
  • 如何查看本地的个人SSH密钥
  • 本人认为 写程序的三大基本原则
  • A030-基于Spring boot的公司资产网站设计与实现
  • React Hooks 深度解析与实战
  • #渗透测试#SRC漏洞挖掘#蓝队基础之网络七层杀伤链04 终章
  • 计算机毕业设计Python+大模型农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop
  • 爬虫补环境案例---问财网(rpc,jsdom,代理,selenium)
  • SpringBoot有几种获取Request对象的方法
  • 在 Windows 11 中使用 MuMu 模拟器 12 国际版配置代理
  • ASP.NET Core Webapi 返回数据的三种方式
  • SQL面试题——蚂蚁SQL面试题 连续3天减少碳排放量不低于100的用户
  • Python酷库之旅-第三方库Pandas(216)
  • 论文解析:计算能力资源的可信共享:利益驱动的异构网络服务提供机制
  • Spring AOP技术
  • 数字IC实践项目(10)—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证(付费项目)
  • MATLAB保存多帧图形为视频格式
  • redis7.x源码分析:(3) dict字典
  • 连续九届EI稳定|江苏科技大学主办
  • HarmonyOS NEXT应用开发实战 ( 应用的签名、打包上架,各种证书详解)
  • 【CICD】CICD 持续集成与持续交付在测试中的应用
  • Dolby TrueHD和Dolby Digital Plus (E-AC-3)编码介绍
  • 数字频率计的设计-- 基于 HDL 方法
  • [程序员] 没有产生core文件的原因
  • 【数字图像处理+MATLAB】基于 Sobel 算子计算图像梯度并进行边缘增强:使用 imgradientxy 函数