该实例基于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
<Window x:Class="设计模式练习.View.代理模式.ProxyWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:设计模式练习.View.代理模式"mc:Ignorable="d"Title="ProxyWindow" Height="450" Width="800"><Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><TextBlock Text="{Binding Res}" TextWrapping="Wrap"/><Button Content="代理加载文件" Grid.Column="1" Command="{Binding loadCommand}"/></Grid>
</Window>
三 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";}}
}