首页 > 其他分享 >简单设计模式讲解

简单设计模式讲解

时间:2024-04-03 20:00:15浏览次数:19  
标签:sortingStrategy observer void 讲解 public 简单 设计模式 class

设计模式是在软件开发中经常使用的最佳实践,用于解决在软件设计中经常遇到的问题。它们提供了可重用的设计,使得代码更加灵活、可维护和可扩展。下面我将为你讲解几种常见的设计模式,并提供相应的C#代码示例。

 

1. 单例模式(Singleton Pattern)

确保一个类仅有一个实例,并提供一个全局访问点。

public class Singleton

{

    private static Singleton _instance;

    private static readonly object _lock = new object();

 

    private Singleton() { } // 私有构造函数,防止外部直接实例化

 

    public static Singleton Instance

    {

        get

        {

            lock (_lock)

            {

                if (_instance == null)

                {

                    _instance = new Singleton();

                }

            }

            return _instance;

        }

    }

}

 

2. 工厂模式(Factory Pattern)

用于创建对象,隐藏了实例化对象的具体逻辑。

public interface IProduct

{

    void Use();

}

 

public class ConcreteProductA : IProduct

{

    public void Use()

    {

        Console.WriteLine("Using product A");

    }

}

 

public class ConcreteProductB : IProduct

{

    public void Use()

    {

        Console.WriteLine("Using product B");

    }

}

 

public class ProductFactory

{

    public IProduct CreateProduct(string type)

    {

        if (type == "A")

        {

            return new ConcreteProductA();

        }

        else if (type == "B")

        {

            return new ConcreteProductB();

        }

        else

        {

            throw new ArgumentException("Invalid product type");

        }

    }

}

 

3. 观察者模式(Observer Pattern)

定义对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

public interface IObserver

{

    void Update(string message);

}

 

public class ConcreteObserver : IObserver

{

    public void Update(string message)

    {

        Console.WriteLine($"Observer received: {message}");

    }

}

 

public class Subject

{

    private List<IObserver> _observers = new List<IObserver>();

    private string _state;

 

    public void Attach(IObserver observer)

    {

        _observers.Add(observer);

    }

 

    public void Detach(IObserver observer)

    {

        _observers.Remove(observer);

    }

 

    public void Notify()

    {

        foreach (var observer in _observers)

        {

            observer.Update(_state);

        }

    }

 

    public void SetState(string state)

    {

        _state = state;

        Notify();

    }

}

 

4. 策略模式(Strategy Pattern)

定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户变化。

public interface ISortingStrategy

{

    void Sort(List<int> numbers);

}

 

public class BubbleSortStrategy : ISortingStrategy

{

    public void Sort(List<int> numbers)

    {

        // Bubble sort implementation

    }

}

 

public class QuickSortStrategy : ISortingStrategy

{

    public void Sort(List<int> numbers)

    {

        // Quick sort implementation

    }

}

 

public class Context

{

    private ISortingStrategy _sortingStrategy;

 

    public Context(ISortingStrategy sortingStrategy)

    {

        _sortingStrategy = sortingStrategy;

    }

 

    public void SetSortingStrategy(ISortingStrategy sortingStrategy)

    {

        _sortingStrategy = sortingStrategy;

    }

 

    public void SortNumbers(List<int> numbers)

    {

        _sortingStrategy.Sort(numbers);

    }

}

这些只是设计模式中的一小部分,每种设计模式都有其特定的应用场景和优势。通过学习和实践这些设计模式,你可以更好地解决软件开发中遇到的各种问题,提高代码的质量和可维护性。

标签:sortingStrategy,observer,void,讲解,public,简单,设计模式,class
From: https://blog.csdn.net/laizhixue/article/details/137243062

相关文章

  • 三个列表的简单解释
    1.有序列表2.无序列表3.自定义列表1.有序列表<ol><li>第一个</li><li>第二个</li><li>第三个</li></ol>展示图2.无序列表<ul><li>第一个</li><li>第二个</li><li>第三个</li></u......
  • 简单的redis分布式锁实现
    简单的redis分布式锁实现1.需求我们公司想实现一个简单的分布式锁,用于服务启动初始化执行init方法的时候,只执行一次,避免重复执行加载缓存规则的代码,还有预防高并发流程发起部分,产品超发,多发问题。所以结合网上信息,自己简单实现了一个redis分布式锁,可以进行单次资源锁定,排......
  • 简单的网贷独立子服务搭建
    简单的网贷独立子服务搭建1.需求我们公司正在进行新信贷系统的迭代升级,但是之间呢我们系统又承接了一个网贷业务接口,需要给行内小型网贷提供预放款接口等几个接口,但是信贷系统还正在开发,所以就先提供一个子模块,一个独立的online-server,对外提供简单的网贷接口使用。这里......
  • WebKit简单介绍
    WebKit是一个开源的浏览器网页排版引擎,起源于苹果公司,最初是为了开发Safari浏览器而创建的。WebKit主要包含两个核心组件:WebCore和JavaScriptCore。WebCore:主要负责解析HTML文档、样式表(CSS)以及处理DOM树结构。它基于KDE项目的KHTML引擎,并进行了大量改进和优化。WebCore将HTM......
  • 【WCH以太网接口系列芯片】STM32+CH390+Lwip协议栈简单应用测试
    本篇文章基于STM32F103和CH390H芯片进行例程移植及相关注意事项,简单验证TCP\UDP\Ping基础功能。硬件:STM32F103开发板+沁恒CH390H的评估版图一示,SPI使用接口为:INT->PA0,RST->PA1,CS->PA2,SCK->PA5,MISO->PA6,MOSI->PA7,WOL->PA8。 图一 软件移植:采用的沁恒官方提供的CH......
  • 【算法】冒泡排序、简单选择排序、基数排序、插入排序、希尔排序
    冒泡排序冒泡排序的核心思想是两两进行对比交换。从索引i=0开始,索引i所对应的值与索引i+1所对应的值进行对比交换。不断进行以上操作,每一轮都会让至少一个数变得符合顺序。packagecom.test;importjava.util.Arrays;publicclassBubbleSort{ publicstaticvoi......
  • springboot实战---5.最简单最高效的后台管理系统开发
    ......
  • 被别吓到了,很多复杂事情的背后其实是简单
    在学习的过程中,我们总是容易遇到很多晦涩难懂和复杂了,尤其是我熟悉的编程领域。就像我很喜欢的一本书《从一到无穷大》说的那样,但其实很多概念本身并没有多复杂,只是解读的人喜欢添油加醋而已,其实很多看似隐晦,高大上的专业名词和概念,都可以用简单的比喻的方式就很容易让人理解。......
  • mathematical-expression(MAE)数学表达式 数学函数 解析编译库,有效的快速和简单易用的数
    数学表达式SwitchtoEnglishDocument介绍本框架是一种针对数学公式解析的有效工具,能够解析包含嵌套函数,包含函数,数列步长累加等数学公式,返回值是一个数值的结果对象,同时也可以进行比较运算的操作,再进行比较的时候,返回值是一个布尔值结果对象。PS请尽量使用1.3.1版......
  • 基于Node.js和ws库搭建WebSocket服务并实现消息互通的简单示例
    环境要求:Node.js环境安装npm(Node.js的包管理器)步骤:安装Node.js:如果你还没有安装Node.js,请从Node.js官网下载并安装。创建项目:创建一个新的目录作为项目文件夹,并在该目录下初始化一个新的Node.js项目。        mkdirmy-websocket-server        cdmy......