代理模式-C#实现

该实例基于WPF实现,直接上代码,下面为三层架构的代码。

目录

一 Model

二 View

三 ViewModel


一 Model

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.代理模式
{
    //1,定义接口
    public interface Image
    {
        void display();
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.代理模式
{
    //3,定义代理类
    internal class ProxyImage : Image
    {
        private RealImage realImage;
        public string FilePath { get; set; }
        public string LoadInfo { get; set; }


        public ProxyImage(string filePath)
        {
            FilePath = filePath;
        }

        public void display()
        {
            if (realImage == null)
            {
                realImage = new RealImage(FilePath);
            }

            realImage.display();
            LoadInfo = realImage.LoadInfo;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式练习.Model.代理模式
{
    //2,实现接口
    public class RealImage : Image
    {
        public string FilePath { get; set; }
        public string LoadInfo { get; set; }


        public RealImage(string filePath)
        {
            FilePath = filePath;
        }


        public void display()
        {
            LoadInfo = $"文件:{FilePath}加载完成!!!";
        }
    }
}

二 View


    
        
            
            
        
        
        

代理模式-C#实现_第1张图片

三 ViewModel

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 设计模式练习.Model.代理模式;

namespace 设计模式练习.ViewModel.代理模式
{
    partial class ProxyWindow_ViewModel : ObservableObject
    {

        [ObservableProperty]
        private string res;

        [RelayCommand]
        private void load()
        {
            ProxyImage proxyImage = new ProxyImage("我的图片.png");
            proxyImage.display();
            Res += "第一次从磁盘加载" + proxyImage.LoadInfo + "\r\n";
            proxyImage.display();
            Res += "从第二次开始就从原有缓存加载了:" + proxyImage.LoadInfo + "\r\n";
        }
    }
}

你可能感兴趣的:(C#,代理模式,c#,开发语言)