Java23种设计模式详解
Java作为目前最流行的编程语言之一,其设计模式的应用也越来越广泛。设计模式是指在软件设计过程中,经过实践证明的一些最佳的解决方案。Java23种设计模式可以分为三类:创建型模式、结构型模式和行为型模式。
一、创建型模式
创建型模式主要关注对象的创建和管理,包括以下5种模式:
1. 工厂方法模式
工厂方法模式是指定义一个工厂接口,由子类来实现工厂接口中的方法,并由子类来创建对象。这种模式可以避免直接使用new关键字创建对象的方式,增强了代码的可扩展性。
public interface AnimalFactory {
Animal createAnimal();
}
public class DogFactory implements AnimalFactory {
public Animal createAnimal() {
return new Dog();
}
}
public class CatFactory implements AnimalFactory {
public Animal createAnimal() {
return new Cat();
}
}
2. 抽象工厂模式
抽象工厂模式是指定义一个抽象工厂接口,由子类来实现抽象工厂接口中的方法,并由子类来创建一组相关的对象。这种模式可以避免直接使用new关键字创建对象的方式,增强了代码的可扩展性。
public interface AnimalFactory {
Animal createDog();
Animal createCat();
}
public class WhiteAnimalFactory implements AnimalFactory {
public Animal createDog() {
return new WhiteDog();
}
public Animal createCat() {
return new WhiteCat();
}
}
public class BlackAnimalFactory implements AnimalFactory {
public Animal createDog() {
return new BlackDog();
}
public Animal createCat() {
return new BlackCat();
}
}
3. 单例模式
单例模式是指一个类只有一个实例,并且该实例提供了一个访问它的全局访问点。这种模式可以保证在程序中只有一个实例,从而节省内存空间,提高程序的性能。
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
4. 建造者模式

建造者模式是指将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种模式可以简化对象的构造过程,提高代码的可读性。
public class Person {
private String name;
private int age;
private String gender;
private String address;
public static class Builder {
private String name;
private int age;
private String gender;
private String address;
public Builder(String name, int age) {
this.name = name;
this.age = age;
}
public Builder gender(String gender) {
this.gender = gender;
return this;
}
public Builder address(String address) {
this.address = address;
return this;
}
public Person build() {
return new Person(this);
}
}
private Person(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.gender = builder.gender;
this.address = builder.address;
}
}
5. 原型模式
原型模式是指通过复制一个已经存在的实例来创建新的实例。这种模式可以避免直接使用new关键字创建对象的方式,提高了代码的可扩展性。
public abstract class Shape implements Cloneable {
private String id;
protected String type;
public String getId() {
return id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public abstract void draw();
public Object clone() {
Object clone = null;
try {
clone = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
}
public class Circle extends Shape {
public Circle() {
type = "Circle";
}
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
public class Square extends Shape {
public Square() {
type = "Square";
}
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
public class ShapeCache {
private static Map shapeMap = new HashMap();
public static Shape getShape(String shapeId) {
Shape cachedShape = shapeMap.get(shapeId);
return (Shape) cachedShape.clone();
}
public static void loadCache() {
Circle circle = new Circle();
circle.setId("1");
shapeMap.put(circle.getId(), circle);
Square square = new Square();
square.setId("2");
shapeMap.put(square.getId(), square);
}
}
二、结构型模式
结构型模式主要关注对象的组合和协作,包括以下7种模式:
1. 适配器模式
适配器模式是指将一个类的接口转换成客户希望的另一个接口。这种模式可以使得原本由于接口不兼容而不能一起工作的类可以在一起工作。
public interface AdvancedMediaPlayer {
public void playVlc(String fileName);
public void playMp4(String fileName);
}
public class VlcPlayer implements AdvancedMediaPlayer {
public void playVlc(String fileName) {
System.out.println("Playing vlc file. Name: " + fileName);
}
public void playMp4(String fileName) {}
}
public class Mp4Player implements AdvancedMediaPlayer {
public void playVlc(String fileName) {}
public void playMp4(String fileName) {
System.out.println("Playing mp4 file. Name: " + fileName);
}
}
public interface MediaPlayer {
public void play(String audioType, String fileName);
}
public class MediaAdapter implements MediaPlayer {
AdvancedMediaPlayer advancedMusicPlayer;
public MediaAdapter(String audioType){
if(audioType.equalsIgnoreCase("vlc") ){
advancedMusicPlayer = new VlcPlayer();
} else if (audioType.equalsIgnoreCase("mp4")){
advancedMusicPlayer = new Mp4Player();
}
}
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("vlc")){
advancedMusicPlayer.playVlc(fileName);
}else if(audioType.equalsIgnoreCase("mp4")){
advancedMusicPlayer.playMp4(fileName);
}
}
}
public class AudioPlayer implements MediaPlayer {
MediaAdapter mediaAdapter;
public void play(String audioType, String fileName) {
if(audioType.equalsIgnoreCase("mp3")){
System.out.println("Playing mp3 file. Name: " + fileName);
} else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")){
mediaAdapter = new MediaAdapter(audioType);
mediaAdapter.play(audioType, fileName);
} else {
System.out.println("Invalid media. " + audioType + " format not supported");
}
}
}
2. 桥接模式
桥接模式是指将抽象部分与实现部分分离,使它们可以独立地变化。这种模式可以避免系统在多个维度上的复杂性。
public interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
public class RedCircle implements DrawAPI {
public void drawCircle(int radius, int x, int y) {
System.out.println("Drawing Circle[ color: red, radius: " + radius + ", x: " + x + ", " + y + "]");
}
}
public class GreenCircle implements DrawAPI 本文来源:词雅网
本文地址:https://www.ciyawang.com/y4gale.html
本文使用「 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 」许可协议授权,转载或使用请署名并注明出处。
相关推荐
-
什么是类?——解析面向对象编程中的核心概念
封装是指将数据和行为封装在一起,形成一个独立的单元,对外界隐藏了内部的实现细节,只暴露出一些必要的接口。这样做可以提高代码的可维护性、可扩展性和安全性。在面向对象编程中,类提供了封装的机制。 在上面
-
什么是软件测试?如何进行有效的软件测试?
单元测试:对软件中的每个单元(函数、类等)进行测试。 集成测试:对软件中不同单元之间的接口进行测试。 系统测试:对整个软件系统进行测试。 验收测试:由客户或用户对软件进行
-
什么是子网掩码?如何设置子网掩码?
ifconfig eth0 netmask 255.255.255.0 以上命令将eth0网络接口的子网掩码设置为255.255.255.0,如果需要设置其他网络接口的子网掩码,只需要将eth0
-
如何进行系统架构评审和可扩展性规划
系统中的耦合度,提高系统的可扩展性。 抽象化 抽象化是指将系统中的共性部分抽象出来,形成一个通用的接口或者框架。这样可以提高系统的可重用性和可扩展性。 异步处理 异步处理是指将系统中的耗时操作采用
-
如何进行代码组织和模块化开发的最佳实践
容易理解,更容易维护,更容易扩展。代码组织的基本原则是将代码分成独立的模块,每个模块都有自己的职责和接口。 在代码组织中,我们可以采用模块化的方式来组织代码。模块化是一种将代码分成独立的、可重用的部
-
如何进行代码组织和模块化开发
单体应用将所有功能都集成在一个应用程序中,而微服务则将功能拆分成多个独立的服务,每个服务都有自己的接口和实现。插件化是将应用程序设计成一组插件,每个插件都可以独立开发、部署和升级。 模块化开发 模
-
如何进行接口设计和API文档管理
联网的发展,API(Application Programming Interface,应用程序编程接口)的使用越来越广泛。API提供了一种标准的接口,使得不同的应用程序可以互相通信,从而实现更加高效
-
如何进行接口设计和API文档编写
引言 在软件开发过程中,接口设计和API文档编写是关键的环节。一个好的接口设计和API文档可以让开发人员更好地理解和使用接口,提高开发效率和软件质量。本文将介绍如何进行接口设计和API文档编写。 什
-
如何进行接口设计和API文档管理的技巧
引言 随着计算机技术的快速发展,越来越多的应用程序需要通过API进行交互。但是,设计好的接口和清晰的API文档对于开发人员来说至关重要。本文将介绍如何进行接口设计和API文档管理的技巧。 接口设计技
-
网络存储:配置和管理网络存储设备
下是一些配置步骤: 1.选购适当的网络存储设备 网络存储设备应该满足您的存储需求,并且具有适当的接口和协议,以便与您的网络和计算机兼容。 2.设置网络存储设备 您需要设置网络存储设备的网络设置
词雅网