using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
//重点是使用了3次image.Display(),但是只执行了一次new Image();
IImage image = new ImageProxy();
image.Display();
image.Display();
image.Display();
Console.ReadLine();
}
}
#region 代理模式
public interface IImage
{
void Display();
}
public class Image: IImage
{
public void Display()
{
Console.WriteLine("使用原始图片显示");
}
}
public class ImageProxy : IImage
{
private Image _image;
private bool _loaded;
public ImageProxy()
{
_loaded = false;
}
public void Display()
{
if (!_loaded)
{
//代理模式本质,第一次调用本体,后面操作全部用代理就行了,不需要一直去new Image()了
_image = new Image();
_loaded = true;
}
_image.Display();
}
}
#endregion
}