两种语言实现设计模式(C++和Java)(五:代理模式)
Posted asp1rant
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两种语言实现设计模式(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 }
以上是关于两种语言实现设计模式(C++和Java)(五:代理模式)的主要内容,如果未能解决你的问题,请参考以下文章