两种语言实现设计模式(C++和Java)(五:代理模式)

参考:https://blog.csdn.net/lh844386434/article/details/18045671

代理模式指为其他对象提供一种代理以控制对这个对象的访问。这样实现了业务和核心功能分离。

Subject: 抽象角色。声明真实对象和代理对象的共同接口。
Proxy: 代理角色。代理对象与真实对象实现相同的接口,所以它能够在任何时刻都能够代理真实对象。代理角色内部包含有对真实对象的引用,所以她可以操作真实对象,同时也可以附加其他的操作,相当于对真实对象进行封装。
RealSubject: 真实角色。它代表着真实对象,是我们最终要引用的对象

举例:大众汽车工厂讲车辆代理给上汽集团SAIC生产

1.C++代码

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class ICarFactory{
 6 public:
 7     ICarFactory(){}
 8     virtual void productCar()=0;
 9 };
10 
11 class VolkswagenFactory:public ICarFactory{
12 public:
13     VolkswagenFactory(){}
14     void productCar(){
15         cout << "Product Volkswagen Car" << endl;
16     }
17 };
18 
19 class FactorySaicProxy: public ICarFactory{
20 public:
21     FactorySaicProxy(ICarFactory* factory){
22         myFactory = factory;
23     }
24     void productCar(){
25         myFactory->productCar();
26     }
27 
28 private:
29     ICarFactory* myFactory;
30 };
31 
32 
33 int main()
34 {
35     VolkswagenFactory* factory = new VolkswagenFactory();
36     FactorySaicProxy* factoryProxy = new FactorySaicProxy(factory);
37     factoryProxy->productCar();
38 }

2.Java代码

 1 public interface ICarFactory {
 2     void produceCar();
 3 }
 4 
 5 public class VolkswagenFactory implements ICarFactory {
 6     @Override
 7     public void produceCar() {
 8         System.out.println("Produce Volkswagen Car");
 9     }
10 }
11 
12 
13 public class SaicFactoryProxy implements ICarFactory {
14 
15     private ICarFactory carFactory;
16 
17     SaicFactoryProxy(ICarFactory carFactory){this.carFactory = carFactory;}
18 
19     @Override
20     public void produceCar() {
21         carFactory.produceCar();
22     }
23 }
24 
25 public class Main {
26 
27     public static void main(String[] args){
28         SaicFactoryProxy saicFactoryProxy = new SaicFactoryProxy(new VolkswagenFactory());
29         saicFactoryProxy.produceCar();
30     }
31 }

 

posted @ 2019-04-30 19:37  Asp1rant  阅读(197)  评论(0编辑  收藏  举报