好的,以下是一个简单的球衣购买系统的Java代码,它使用了五种设计模式:工厂模式、单例模式、策略模式、观察者模式和装饰器模式。
1. 工厂模式
工厂模式用于创建球衣对象。我们定义一个球衣接口和两个具体的球衣类:Nike球衣和Adidas球衣。然后创建一个工厂类,根据用户输入的品牌选择创建对应的球衣对象。
```java
// 球衣接口
public interface Jersey {
void showJersey();
}
// Nike球衣类
public class NikeJersey implements Jersey {
@Override
public void showJersey() {
System.out.println("This is a Nike jersey.");
}
}
// Adidas球衣类
public class AdidasJersey implements Jersey {
@Override
public void showJersey() {
System.out.println("This is an Adidas jersey.");
}
}
// 工厂类
public class JerseyFactory {
public Jersey createJersey(String brand) {
if (brand.equals("Nike")) {
return new NikeJersey();
} else if (brand.equals("Adidas")) {
return new AdidasJersey();
} else {
return null;
}
}
}
```
2. 单例模式
单例模式用于创建购物车对象。我们定义一个购物车类,使用私有构造函数和静态方法getInstance()来确保只有一个购物车实例被创建。
```java
// 购物车类
public class ShoppingCart {
private static ShoppingCart instance;
private ShoppingCart() {}
public static ShoppingCart getInstance() {
if (instance == null) {
instance = new ShoppingCart();
}
return instance;
}
public void addJersey(Jersey jersey) {
System.out.println("Adding " + jersey.getClass().getSimpleName() + " to the cart.");
}
public void removeJersey(Jersey jersey) {
System.out.println("Removing " + jersey.getClass().getSimpleName() + " from the cart.");
}
}
```
3. 策略模式
策略模式用于计算球衣的价格。我们定义一个计算价格的接口和两个具体的计算价格类:按品牌计算价格和按季节计算价格。然后创建一个球衣类,包含品牌和季节两个属性,并在构造函数中根据用户选择的品牌和季节选择对应的计算价格策略。
```java
// 计算价格接口
public interface PriceCalculator {
double calculatePrice(Jersey jersey);
}
// 按品牌计算价格类
public class BrandPriceCalculator implements PriceCalculator {
@Override
public double calculatePrice(Jersey jersey) {
if (jersey instanceof NikeJersey) {
return 100.0;
} else if (jersey instanceof AdidasJersey) {
return 90.0;
} else {
return 0.0;
}
}
}
// 按季节计算价格类
public class SeasonPriceCalculator implements PriceCalculator {
@Override
public double calculatePrice(Jersey jersey) {
// 假设夏季和冬季球衣价格不同
if (LocalDate.now().getMonthValue() >= 6 && LocalDate.now().getMonthValue() <= 8) {
return 80.0;
} else {
return 100.0;
}
}
}
// 球衣类
public class Jersey {
private String brand;
private String season;
private PriceCalculator priceCalculator;
public Jersey(String brand, String season) {
this.brand = brand;
this.season = season;
if (season.equals("Summer") || season.equals("Winter")) {
this.priceCalculator = new SeasonPriceCalculator();
} else {
this.priceCalculator = new BrandPriceCalculator();
}
}
public double getPrice() {
return priceCalculator.calculatePrice(this);
}
public String getBrand() {
return brand;
}
public String getSeason() {
return season;
}
}
```
4. 观察者模式
观察者模式用于在购物车中添加或删除球衣时通知用户。我们定义一个观察者接口和两个具体的观察者类:添加球衣观察者和删除球衣观察者。然后在购物车类中添加一个观察者列表,在添加或删除球衣时通知观察者。
```java
// 观察者接口
public interface Observer {
void update(Jersey jersey);
}
// 添加球衣观察者类
public class AddObserver implements Observer {
@Override
public void update(Jersey jersey) {
System.out.println(jersey.getClass().getSimpleName() + " added to the cart.");
}
}
// 删除球衣观察者类
public class RemoveObserver implements Observer {
@Override
public void update(Jersey jersey) {
System.out.println(jersey.getClass().getSimpleName() + " removed from the cart.");
}
}
// 购物车类
public class ShoppingCart {
private static ShoppingCart instance;
private List<Observer> observers = new ArrayList<>();
private ShoppingCart() {}
public static ShoppingCart getInstance() {
if (instance == null) {
instance = new ShoppingCart();
}
return instance;
}
public void addObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
observers.remove(observer);
}
public void addJersey(Jersey jersey) {
System.out.println("Adding " + jersey.getClass().getSimpleName() + " to the cart.");
notifyObservers(jersey);
}
public void removeJersey(Jersey jersey) {
System.out.println("Removing " + jersey.getClass().getSimpleName() + " from the cart.");
notifyObservers(jersey);
}
private void notifyObservers(Jersey jersey) {
for (Observer observer : observers) {
observer.update(jersey);
}
}
}
```
5. 装饰器模式
装饰器模式用于为球衣添加额外的功能,比如定制名字或号码。我们定义一个装饰器接口和一个具体的装饰器类:定制装饰器。然后在购物车中添加球衣时,根据用户选择的装饰器为球衣添加额外的功能。
```java
// 装饰器接口
public interface JerseyDecorator extends Jersey {
}
// 定制装饰器类
public class CustomizedJerseyDecorator implements JerseyDecorator {
private Jersey jersey;
private String name;
private int number;
public CustomizedJerseyDecorator(Jersey jersey, String name, int number) {大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!
this.jersey = jersey;
this.name = name;
this.number = number;
}
@Override
public void showJersey() {
jersey.showJersey();
System.out.println("Customized with name " + name + " and number " + number + ".");
}大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!
}
// 添加球衣到购物车
JerseyFactory factory = new JerseyFactory();
Jersey jersey = factory.createJersey("Nike");大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!
CustomizedJerseyDecorator customizedJersey = new CustomizedJerseyDecorator(jersey, "Tom", 10);
ShoppingCart cart = ShoppingCart.getInstance();
cart.addObserver(new AddObserver());
cart.addJersey(customizedJersey);
```
版权声明
本文仅代表作者观点,不代表xx立场。
本文系作者授权xx发表,未经许可,不得转载。
发表评论