生产商(Factory)需要销售商品(Product),网上商城(E-Shop)提供了一个平台,可以帮助销售这些商品,获得更大的销量。当顾客(Custom)从网上商城选购商品的时候,实际是从生产商获得的商品。应用代理模式,用JAVA控制台应用程序改进该设计。
时间: 2024-02-27 09:58:12 浏览: 101
JAVA设计模式(代理模式)
好的,以下是一个简单的实现,使用了代理模式来控制顾客访问生产商的商品:
Product.java(商品接口)
```java
public interface Product {
void sell();
}
```
Factory.java(生产商)
```java
public class Factory implements Product {
private String name;
private int quantity;
public Factory(String name, int quantity) {
this.name = name;
this.quantity = quantity;
}
public void sell() {
if (quantity > 0) {
quantity--;
System.out.println(name + " sells a product. Remaining quantity: " + quantity);
} else {
System.out.println(name + " is out of stock.");
}
}
}
```
Eshop.java(网上商城)
```java
public class Eshop implements Product {
private Factory factory;
public Eshop() {
factory = new Factory("Factory", 10);
}
public void sell() {
factory.sell();
}
}
```
Proxy.java(代理)
```java
public class Proxy implements Product {
private Eshop eshop;
public void sell() {
if (eshop == null) {
eshop = new Eshop();
}
eshop.sell();
}
}
```
Main.java(测试)
```java
public class Main {
public static void main(String[] args) {
Product product = new Proxy();
for (int i = 0; i < 15; i++) {
product.sell();
}
}
}
```
在这个例子中,代理类 Proxy 控制了顾客对生产商 Factory 的访问,顾客通过访问代理类 Proxy 来购买商品。代理类 Proxy 中包含了一个私有的 Eshop 类型的对象,当顾客访问代理类 Proxy 时,代理类 Proxy 会调用 Eshop 的 sell() 方法来实现商品的销售,而 Eshop 的 sell() 方法会调用生产商 Factory 的 sell() 方法来实现商品的销售。
当顾客购买商品时,代理类 Proxy 会首先创建一个 Eshop 对象,然后通过 Eshop 对象来访问生产商 Factory 的 sell() 方法。如果顾客再次购买商品时,代理类 Proxy 不需要再创建一个新的 Eshop 对象,而是直接使用之前创建的对象,从而避免了重复创建对象的开销。
阅读全文