/* 抽象角色:订单 */ public interface Order { /** * 买外卖 */ void buyFiredTofu(); /** * 买烤外卖 */ void buyBakeTofu(); } OrderImpl.java: /* 具体角色:具体某个特定的订单 */ public class OrderImpl implements Order { /** * 买外卖 */ @Override public void buyFiredTofu() { System.out.println("外卖店在外卖平台上收到了一份外卖的订单"); } /** * 买烤外卖 */ @Override public void buyBakeTofu() { System.out.println("外卖店在外卖平台上收到了一份烤外卖的订单"); } } Proxy.java: /* 代理角色:外卖平台 */ public class Proxy implements Order { /** * 买外卖 */ @Override public void buyFiredTofu() { OrderImpl orderImpl = new OrderImpl(); orderImpl.buyFiredTofu(); } /** * 买烤外卖 */ @Override public void buyBakeTofu() { OrderImpl orderImpl = new OrderImpl(); orderImpl.buyBakeTofu(); } }为什么要用代理模式
时间: 2024-02-17 21:26:27 浏览: 24
代模式是一种结构型设计模式,它为某个对象提供一个代理对象,通过代理对象来控制对真实对象的访问。代理模式可以用来控制对真实对象的访问权限,隐藏真实对象的实现细节,提高系统的安全性和稳定性。在上面的代码中,外卖平台是一个代理对象,它代表外卖店向外提供服务。外卖平台可以对外提供某些服务,但是具体的服务是由外卖店来提供的。外卖平台控制对外卖店的访问,避免了外卖店直接面对顾客,提高了外卖店的安全性和稳定性。
如果我们没有使用代理模式,外卖店需要直接面对顾客,容易受到各种攻击和恶意,同时外卖店需要处理与顾客的所有交互,系统的复杂度也会随之增加。通过代理模式,我们可以将外卖店与外界隔离开来,降低了外卖店的复杂度,同时也提高了外卖店的安全性和稳定性。
相关问题
/* 抽象产品 */ public abstract class Product { public abstract void show(); } ProductA.java: /* 具体产品A:外卖 */ public class ProductA extends Product { @Override public void show() { System.out.println("外卖制作出来了"); } } ProductB.java: /* 具体产品B:烤外卖 */ public class ProductB extends Product { @Override public void show() { System.out.println("烤外卖做出来了"); } }为什么要用简单工厂模式
使用简单工厂模式有以下几个优点:
1. 将对象的创建和使用分离,客户端无需知道具体的产品类,只需要知道对应的产品类型即可。
2. 简化了客户端的使用,客户端不再需要负责对象的创建,只需要调用工厂方法即可。
3. 可以对产品类的实现进行封装,客户端只需要知道产品的抽象类或接口即可,无需关心具体实现细节。
4. 可以根据需要动态地改变产品类的创建方式,只需要修改工厂类即可,而客户端代码不需要做任何修改。
综上所述,使用简单工厂模式可以提高代码的可维护性、可扩展性和可重用性,是一种非常实用的设计模式。
/** * 汽车类:有启动和停止方法 * @author zouzhenxing * */ public class Car { public void strat() { System.out.println("汽车启动了"); } public void stop() { System.out.println("汽车停止了"); } } /** * 项目类:有启动和停止方法 * @author zouzhenxing * */ public cla
可以将汽车类和项目类抽象成一个启动停止接口,让实现类去实现具体的启动和停止方法。这样可以提高代码的可扩展性和重用性。
可以使用实现接口实现,创建一个名为 "StartStop" 的接口,包含 "start" 和 "stop" 两个方法。然后让汽车类和项目类实现 "StartStop" 接口,实现它的方法。
例如:
```
public interface StartStop {
public void start();
public void stop();
}
public class Car implements StartStop {
@Override
public void start() {
System.out.println("汽车启动了");
}
@Override
public void stop() {
System.out.println("汽车停止了");
}
}
public class Project implements StartStop {
@Override
public void start() {
System.out.println("项目启动了");
}
@Override
public void stop() {
System.out.println("项目停止了");
}
}
```
这样做的好处是,如果需要添加新的类,只需要实现 "StartStop" 接口即可。同时,由于 "StartStop" 接口已经定义了规范,可提高代码的可读性和可维护性。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)