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

该实例基于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 + "rn";
            proxyImage.display();
            Res += "从第二次开始就从原有缓存加载了:" + proxyImage.LoadInfo + "rn";
        }
    }
}

原文地址:https://blog.csdn.net/XiaoWang_csdn/article/details/135854663

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_62089.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注