代理模式-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

<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";
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值