做网站容易 但运营难,以前老网站,肯德基网站建设方案,网站建设预算和流程介绍#x1f600;前言 设计模式#xff0c;作为软件工程领域的核心概念之一#xff0c;向我们展示了开发过程中面对的典型问题的经典解决方案。这些模式不仅帮助开发者创建更加结构化、模块化和可维护的代码#xff0c;而且也促进了代码的复用性。通过这篇文章#xff0c;我们… 前言 设计模式作为软件工程领域的核心概念之一向我们展示了开发过程中面对的典型问题的经典解决方案。这些模式不仅帮助开发者创建更加结构化、模块化和可维护的代码而且也促进了代码的复用性。通过这篇文章我们将探讨其中一些基本的设计模式并为每个模式提供相应的代码示例以便于更好地理解它们的实际应用。 个人主页尘觉主页
个人简介大家好我是尘觉希望我的文章可以帮助到大家您的满意是我的动力 在csdn获奖荣誉: csdn城市之星2名 Java全栈群星计划top前5 端午大礼包获得者 阿里云专家博主 亚马逊DyamoDB结营 欢迎大家这里是CSDN我总结知识的地方欢迎来到我的博客感谢大家的观看 如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦 文章目录 第七章 面向对象技术 补充-上设计模式设计模式的要素创建型设计模式5种1. Simple Factory简单工厂2. Factory Method工厂方法3. Abstract Factory抽象工厂4. Builder生成器5. Prototype原型6. Singleton单例 总结 第七章 面向对象技术 补充-上
设计模式
设计模式的要素
设计模式的核心在于提供了相关问题的解决方案使得人们可以更加简单方便地复用成功的设计和体系结构。
设计模式基本要素 模式名称Pattern Name) 问题Problem 解决方案Solution 效果Consequences img srchttps://picgoowyx.oss-cn-guangzhou.aliyuncs.com/imags/202309210851610.png stylezoom:50%; /创建型设计模式5种
1. Simple Factory简单工厂
简单工厂模式属创建型模式但不属于23种设计模式之一。
定义定义一个工厂类他可以根据参数的不同返回不同类的实例被创建的实例通常都具有共同的父类。 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法因此简单工厂模式又被成为静态工厂方法(Static Factory Method)。 img srchttps://picgoowyx.oss-cn-guangzhou.aliyuncs.com/imags/202309210851611.png stylezoom:50%; //*** 简单工厂模式*/
public class SimpleFactory {public static void main(String[] args) {Product productA Factory.createProduct(A);productA.info();Product productB Factory.createProduct(B);productB.info();}
}class Factory{public static Product createProduct(String type){Product product null;switch (type){case A:product new ProductA();break;case B:product new ProductB();break;default:System.out.println(没有 type 类型的产品);return null;}return product;}
}abstract class Product{public abstract void info();
}class ProductA extends Product{Overridepublic void info() {System.out.println(产品的信息A);}
}class ProductB extends Product{Overridepublic void info() {System.out.println(产品的信息B);}
}2. Factory Method工厂方法
1意图
定义一个用于创建对象的接口让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
2结构 img srchttps://picgoowyx.oss-cn-guangzhou.aliyuncs.com/imags/202309210851612.png stylezoom:50%; //*** 工厂方法模式*/
public class FactoryMethod {public static void main(String[] args) {// 父类 对象名 new 子类();Factory factoryA new FactoryA();Product productA factoryA.createProduct();productA.info();Factory factoryB new FactoryB();Product productB factoryB.createProduct();productB.info();}
}interface Factory{Product createProduct();
}class FactoryA implements Factory{Overridepublic Product createProduct() {return new ProductA();}
}class FactoryB implements Factory{Overridepublic Product createProduct() {return new ProductB();}
}interface Product{void info();
}class ProductA implements Product{Overridepublic void info() {System.out.println(产品的信息A);}
}class ProductB implements Product{Overridepublic void info() {System.out.println(产品的信息B);}
}3适用性
Factory Method 模式适用于
当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。当类将创建对象的职责委托给多个帮助子类中的某一个并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
3. Abstract Factory抽象工厂
1意图
提供一个创建一系列相关或相互依赖对象的接口而无须指定它们具体的类。
2结构 /*** 抽象工厂模式*/
public class AbstractFactory {public static void main(String[] args) {Factory factory1 new Factory1();ProductA productA1 factory1.createProductA();productA1.info();ProductB productB1 factory1.createProductB();productB1.info();Factory factory2 new Factory2();ProductA productA2 factory2.createProductA();productA2.info();ProductB productB2 factory2.createProductB();productB2.info();}
}// 声明一个创建抽象产品对象的操作接口
interface Factory{ProductA createProductA();ProductB createProductB();
}// 实现创建具体产品对象的操作
class Factory1 implements Factory{Overridepublic ProductA createProductA() {return new ProductA1();}Overridepublic ProductB createProductB() {return new ProductB1();}
}class Factory2 implements Factory{Overridepublic ProductA createProductA() {return new ProductA2();}Overridepublic ProductB createProductB() {return new ProductB2();}
}// 为一类产品对象声明一个接口
interface ProductA{void info();
}interface ProductB{void info();
}// 定义一将被相应的具体工厂创建的产品对象
class ProductA1 implements ProductA{Overridepublic void info() {System.out.println(产品的信息A1);}
}class ProductA2 implements ProductA{Overridepublic void info() {System.out.println(产品的信息A2);}
}class ProductB1 implements ProductB{Overridepublic void info() {System.out.println(产品的信息B1);}
}class ProductB2 implements ProductB{Overridepublic void info() {System.out.println(产品的信息B2);}
}3适用性
Abstract Factory 模式适用于
一个系统要独立于它的产品的创建、组合和表示时。一个系统要由多个产品系列中的一个来配置时。当要强调一系列相关的产品对象的设计以便进行联合使用时。当提供一个产品类库只想显示它们的接口而不是实现时。
4. Builder生成器
1意图
将一个复杂对象的构建与它的表示分离使得同样的构建过程可以创建不同的表示。
2结构 import java.util.*;/*** 生成器模式*/
public class Main {public static void main(String[] args) {Director director new Director();Builder builder1 new Builder1();director.Construct(builder1);Product product1 builder1.getResult();product1.show();Builder builder2 new Builder2();director.Construct(builder2);Product product2 builder2.getResult();product2.show();}
}class Director{public void Construct(Builder builder){builder.BuildPart();}
}abstract class Builder{public abstract void BuildPart();public abstract Product getResult();
}class Builder1 extends Builder{Product product new Product();Overridepublic void BuildPart() {product.add(A);product.add(B);product.add(C);product.add(D);product.add(E);product.add(F);}Overridepublic Product getResult() {return product;}
}class Builder2 extends Builder{Product product new Product();Overridepublic void BuildPart() {product.add(A);product.add(B);product.add(C);}Overridepublic Product getResult() {return product;}
}class Product{ListString parts new ArrayListString();public void add(String part){parts.add(part);}public void show(){System.out.print(产品的组成);for (String part : parts) {System.out.print(part );}System.out.println();}
}3适用性
Builder 模式适用于
当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。当构造过程必须允许被构造的对象有不同的表示时。
5. Prototype原型
1意图
用原型实例指定创建对象的种类并且通过复制这些原型创建新的对象。
2结构
其中
Prototype声明一个复制自身的接口。ConcretePrototype 实现一个复制自身的操作。Client 让一个原型复制自身从而创建一个新的对象 /*** 原型模式*/
public class Main {public static void main(String[] args) {Product product1 new Product(2022,5.28);System.out.println(product1.getId() product1.getPrice());Product product2 (Product) product1.Chlone();System.out.println(product2.getId() product2.getPrice());}
}interface Prototype{Object Chlone();
}class Product implements Prototype{private int id;private double price;public Product(){}public Product(int id,double price){this.id id;this.price price;}public int getId() {return id;}public double getPrice() {return price;}Overridepublic Object Chlone() {Product object new Product();object.id this.id;object.price this.price;return object;}
}3适用性
Prototype 模式适用于
当一个系统应该独立于它的产品创建、构成和表示时。当要实例化的类是在运行时刻指定时例如通过动态装载。为了避免创建一个与产品类层次平行的工厂类层次时。当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
6. Singleton单例
1意图
保证一个类仅有一个实例并提供一个访问它的全局访问点。
2结构 其中Singleton指定一个Instance操作允许客户访问它的唯一实例Instance是一个类
操作可能负责创建它自己的唯一实例。
/** * 单例模式*/
public class SingletonPattern {public static void main(String[] args) {Singleton instance1 Singleton.getInstance();Singleton instance2 Singleton.getInstance();Singleton instance3 Singleton.getInstance();System.out.println(instance1: instance1);System.out.println(instance2: instance2);System.out.println(instance3: instance3);}
}class Singleton{private static Singleton instance new Singleton();private Singleton(){};public static Singleton getInstance(){return instance;}
}3适用性 Singleton 模式适用于
当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的并且客户无须更改代码就能使用一个扩展的实例时。
总结
经过对各种创建型设计模式的深入探讨和代码实例展示我们可以更加深入地理解它们如何帮助我们更有效地创建对象。从简单工厂到单例模式每一种设计模式都有其独特的应用场景和优势。当面对软件设计中的具体问题时了解如何选择和应用合适的设计模式至关重要。希望本文的内容能为您提供有关设计模式的深入了解以及如何在实际开发中灵活运用这些模式的启示。
热门专栏推荐 想学习vue的可以看看这个
java基础合集
数据库合集
redis合集
nginx合集 linux合集
手写机制
微服务组件
spring_尘觉
springMVC
mybits
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持
欢迎大家加入我的社区 尘觉社区 文章到这里就结束了如果有什么疑问的地方请指出诸佬们一起来评论区一起讨论 希望能和诸佬们一起努力今后我们一起观看感谢您的阅读 如果帮助到您不妨3连支持一下创造不易您们的支持是我的动力