设计模式是一种在软件开发中广为应用的抽象化描述,是指在特定的场景下,用来解决特定问题的一系列经过实践验证的套路。设计模式是一个经过实践验证的经验总结,是软件开发过程中的一种通用解决方案。
在软件开发中,设计模式可以给开发者提供一种可靠、可复用的解决方案,从而节省开发成本和时间。设计模式能够提高软件开发的可维护性、可扩展性和可复用性,对于提高软件系统的质量和效率具有不可替代的作用。
以下是设计模式在实战中的应用方案:
1. 单例模式
单例模式是一种常用的设计模式,其目的是保证一个类仅有一个实例,并提供一个全局访问点。在实际开发中,单例模式经常被用于管理全局资源和状态。例如,在开发一个日志系统时,需要确保只有一个日志实例在工作,这时就可以使用单例模式。
下面是单例模式的实现代码:
```
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
2. 工厂模式
工厂模式是一种常用的设计模式,其目的是为客户端创建对象,并提供一个统一的接口。在实际开发中,工厂模式常用于创建复杂的对象,例如在游戏开发中,可以使用工厂模式来创建各种不同的角色。
下面是工厂模式的实现代码:
```
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle::draw() method.");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Rectangle::draw() method.");
}
}
public class ShapeFactory {
public Shape getShape(String shapeType) {
if (shapeType == null) {
return null;
}
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if(shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}
return null;
}
}
```
3. 观察者模式
观察者模式是一种常用的设计模式,其目的是在对象之间定义一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都能够得到通知并自动更新。
在实际开发中,观察者模式常用于设计事件驱动型程序,例如用户界面的交互就可以使用观察者模式。
下面是观察者模式的实现代码:
```
public interface Observer {
void update();
}
public class ConcreteObserver implements Observer {
@Override
public void update() {
System.out.println("Observer received the message.");
}
}
public interface Subject {
void attach(Observer observer);
void detach(Observer observer);
void notifyObservers();
}
public class ConcreteSubject implements Subject {
private List
@Override
public void attach(Observer observer) {
observers.add(observer);
}
@Override
public void detach(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
```
4. 建造者模式
建造者模式是一种常用的设计模式,其目的是将一个复杂的对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。在实际开发中,建造者模式常用于创建复杂的对象,例如在游戏开发中,可以使用建造者模式来创建复杂的游戏场景。
下面是建造者模式的实现代码:
```
public interface Item {
String name();
Packing packing();
float price();
}
public interface Packing {
String pack();
}
public class Wrapper implements Packing {
@Override
public String pack() {
return "Wrapper";
}
}
public class Bottle implements Packing {
@Override
public String pack() {
return "Bottle";
}
}
public abstract class Burger implements Item {
@Override
public Packing packing() {
return new Wrapper();
}
@Override
public abstract float price();
}
public abstract class ColdDrink implements Item {
@Override
public Packing packing() {
return new Bottle();
}
@Override
public abstract float price();
}
public class VegBurger extends Burger {
@Override
public float price() {
return 25.0f;
}
@Override
public String name() {
return "Veg Burger";
}
}
public class ChickenBurger extends Burger {
@Override
public float price() {
return 50.0f;
}
@Override
public String name() {
return "Chicken Burger";
}
}
public class Coke extends ColdDrink {
@Override
public float price() {
return 30.0f;
}
@Override
public String name() {
return "Coke";
}
}
public class Pepsi extends ColdDrink {
@Override
public float price() {
return 35.0f;
}
@Override
public String name() {
return "Pepsi";
}
}
public class Meal {
private List
public void addItem(Item item) {
items.add(item);
}
public float getCost() {
float cost = 0.0f;
for (Item item : items) {
cost += item.price();
}
return cost;
}
public void showItems() {
for (Item item : items) {
System.out.println("Item : " + item.name() + ", Packing : " + item.packing().pack() + ", Price : " + item.price());
}
}
}
public class MealBuilder {
public Meal prepareVegMeal() {
Meal meal = new Meal();
meal.addItem(new VegBurger());
meal.addItem(new Coke());
return meal;
}
public Meal prepareNonVegMeal() {
Meal meal = new Meal();
meal.addItem(new ChickenBurger());
meal.addItem(new Pepsi());
return meal;
}
}
```
在实际开发中,设计模式不仅仅是一种理论,而是一种实践经验。通过在实践中应用设计模式,可以不断积累经验,逐步提高软件开发的水平。设计模式的应用不仅仅限于以上几个例子,更多其他的设计模式可以在实际开发中得到应用。