Java设计模式实战指南
创始人
2024-11-11 08:37:02
0

设计模式是在软件工程中用来解决常见问题的一种标准解决方案。通过使用设计模式,开发者可以编写出更加灵活、可维护和易于扩展的代码。本文将介绍几种常见的设计模式,并通过具体的Java代码示例来展示它们的实际应用。

1. 单例模式

单例模式是一种常用的创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。

实战代码示例

 

java

深色版本

1public class Singleton { 2    private static Singleton instance; 3 4    private Singleton() {} 5 6    public static synchronized Singleton getInstance() { 7        if (instance == null) { 8            instance = new Singleton(); 9        } 10        return instance; 11    } 12}

应用场景

  • 当系统只需要一个对象来协调某些活动时。
  • 当对象的创建成本很高时。

2. 工厂模式

工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。

实战代码示例

 

java

深色版本

1interface Shape { 2    void draw(); 3} 4 5class Circle implements Shape { 6    @Override 7    public void draw() { 8        System.out.println("Drawing a circle"); 9    } 10} 11 12class Square implements Shape { 13    @Override 14    public void draw() { 15        System.out.println("Drawing a square"); 16    } 17} 18 19class ShapeFactory { 20    public Shape getShape(String shapeType) { 21        if (shapeType == null) { 22            return null; 23        } 24        if (shapeType.equalsIgnoreCase("CIRCLE")) { 25            return new Circle(); 26        } else if (shapeType.equalsIgnoreCase("SQUARE")) { 27            return new Square(); 28        } 29        return null; 30    } 31}

应用场景

  • 当客户端不知道应该实例化哪个类时。
  • 当创建对象的逻辑很复杂时。

3. 建造者模式

建造者模式是一种创建型设计模式,它允许你逐步构建一个复杂的对象。

实战代码示例

 

java

深色版本

1class Meal { 2    private List items = new ArrayList<>(); 3 4    public void addItem(String item) { 5        items.add(item); 6    } 7 8    @Override 9    public String toString() { 10        return "Meal{" + 11                "items=" + items + 12                '}'; 13    } 14} 15 16interface MealBuilder { 17    void buildFood(); 18    void buildDrink(); 19    Meal getMeal(); 20} 21 22class VegMealBuilder implements MealBuilder { 23    private Meal meal; 24 25    public VegMealBuilder() { 26        this.meal = new Meal(); 27    } 28 29    @Override 30    public void buildFood() { 31        meal.addItem("Vegetarian Burger"); 32    } 33 34    @Override 35    public void buildDrink() { 36        meal.addItem("Orange Juice"); 37    } 38 39    @Override 40    public Meal getMeal() { 41        return meal; 42    } 43} 44 45class MealDirector { 46    private MealBuilder mealBuilder; 47 48    public MealDirector(MealBuilder mealBuilder) { 49        this.mealBuilder = mealBuilder; 50    } 51 52    public Meal construct() { 53        mealBuilder.buildFood(); 54        mealBuilder.buildDrink(); 55        return mealBuilder.getMeal(); 56    } 57}

应用场景

  • 当对象的构建过程很复杂时。
  • 当需要构建的对象有多个变体时。

4. 装饰者模式

装饰者模式是一种结构型设计模式,它允许向对象添加新的功能,同时保持类结构的灵活性。

实战代码示例

 

java

深色版本

1interface Component { 2    String operation(); 3} 4 5class ConcreteComponent implements Component { 6    @Override 7    public String operation() { 8        return "ConcreteComponent"; 9    } 10} 11 12abstract class Decorator implements Component { 13    protected Component component; 14 15    public Decorator(Component component) { 16        this.component = component; 17    } 18 19    @Override 20    public String operation() { 21        return component.operation(); 22    } 23} 24 25class ConcreteDecoratorA extends Decorator { 26    public ConcreteDecoratorA(Component component) { 27        super(component); 28    } 29 30    @Override 31    public String operation() { 32        return "ConcreteDecoratorA(" + super.operation() + ")"; 33    } 34} 35 36class ConcreteDecoratorB extends Decorator { 37    public ConcreteDecoratorB(Component component) { 38        super(component); 39    } 40 41    @Override 42    public String operation() { 43        return "ConcreteDecoratorB(" + super.operation() + ")"; 44    } 45}

应用场景

  • 当需要扩展一个类的功能,但是不希望使用继承。
  • 当需要动态地给对象添加职责时。

5. 观察者模式

观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。

实战代码示例

 

java

深色版本

1import java.util.ArrayList; 2import java.util.List; 3 4interface Observer { 5    void update(String message); 6} 7 8interface Subject { 9    void registerObserver(Observer o); 10    void removeObserver(Observer o); 11    void notifyObservers(String message); 12} 13 14class ConcreteSubject implements Subject { 15    private List observers = new ArrayList<>(); 16    private String message; 17 18    @Override 19    public void registerObserver(Observer o) { 20        observers.add(o); 21    } 22 23    @Override 24    public void removeObserver(Observer o) { 25        observers.remove(o); 26    } 27 28    @Override 29    public void notifyObservers(String message) { 30        this.message = message; 31        for (Observer observer : observers) { 32            observer.update(message); 33        } 34    } 35} 36 37class ConcreteObserver implements Observer { 38    private String name; 39 40    public ConcreteObserver(String name) { 41        this.name = name; 42    } 43 44    @Override 45    public void update(String message) { 46        System.out.println(name + " received: " + message); 47    } 48}

应用场景

  • 当一个对象的状态发生变化时,需要通知其他对象。
  • 当一个对象需要维护一组依赖对象,但不知道有多少个这样的对象时。

总结

本文介绍了五种常用的设计模式,并给出了它们在Java中的实战代码示例。通过使用这些设计模式,开发者可以更好地组织代码,提高程序的可维护性和可扩展性。

每种设计模式都有其适用场景,了解这些模式可以帮助你在遇到相关问题时做出更好的设计决策。

相关内容

热门资讯

一分钟了解“金花链接房卡找谁买... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享受...
华为买谷歌安卓系统,探索自主创... 你知道吗?最近有个大新闻在科技圈里炸开了锅,那就是华为竟然出手购买了谷歌的安卓系统!这可不是一个简单...
实测分享”海洋世界有挂吗“卡农... 实测分享”海洋世界有挂吗“卡农大厅房间卡怎么购买游戏中心打开微信,添加客服【113857776】,进...
秒懂教程!玩拼三张房卡从哪里买... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:71319951许多玩家在游戏中会购买房卡来享...
正版授权“玩链接牛牛金花房卡是... 新天道是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来享...
推荐一款!金花房卡专卖店新西游... 您好!微信新西游/飞鹰互娱大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(新西游/飞鹰...
玩家须知”海洋世界怎么买房卡“... 来教大家如何使用怎么买房卡房卡充值 添加房卡批售商:微【113857775】复制到微信搜索、直接添加...
重大通报,金花微信链接市场价格... 海草众厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
秒懂教程!怎么创建拼三张房间卡... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:66336574许多玩家在游戏中会购买房卡来享...
IA解析/金花房卡出售新奇玩乐... IA解析/金花房卡出售新奇玩乐/微信链接房卡购买渠道新奇玩乐是一款非常受欢迎的游戏,咨询房/卡添加微...
ia实测“金花房卡链接怎么购买... 新超圣牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
实测分享”赢家众娱房卡获取“拼... 实测分享”赢家众娱房卡获取“拼十房卡充值 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服【11...
ia攻略/斗牛房间怎么创建的生... 生肖系列/新大圣是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:33...
秒懂教程!微信牛牛房卡怎样开,... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:56001354许多玩家在游戏中会购买房卡来享受...
科技实测!牛牛房卡出售旺旺大厅... 您好!微信旺旺大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(旺旺大厅)大厅介绍:...
玩家攻略”赢家众娱是如何购买的... 玩家攻略”赢家众娱是如何购买的“详细房卡使用教程 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客...
一分钟推荐“微信怎样开炸金花房... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享受...
推荐一款!牛牛房卡出售江山大厅... 今 日消息,江山大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
正规平台有哪些,游戏推荐斗牛房... 神盾大厅/新天道房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 ...
玩家须知”海豚大厅如何购买房卡... 玩家须知”海豚大厅如何购买房卡“拼三张房卡充值 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服...