常用设计模式实例代码汇总

目录

单例模式

原型模式

外观模式

简单工厂模式

工厂方法模式

抽象工厂方法

策略模式

装饰模式

观察者模式

适配器模式

状态模式(状态类切换)

状态模式(环境类切换)


单例模式

void Main()
{Singleton instance1 = Singleton.GetInstance();Singleton instance2 = Singleton.GetInstance();Console.WriteLine(instance1.GetHashCode());Console.WriteLine(instance2.GetHashCode());
}class Singleton{private static Singleton _instance = null;private Singleton(){}public static Singleton GetInstance(){if(_instance == null){_instance = new Singleton();}return _instance;}}

原型模式

void Main()
{Resume resume1 = new Resume("桃子","20","温州");Resume resume2 = resume1.Clone();resume2.Name = "桃子的爸爸";resume2.Age = "28";Resume resume3 = resume1.Clone();resume3.Name = "桃子的妈妈";resume3.Age = "30";resume1.Display();resume2.Display();resume3.Display();}class Resume
{public string Name { get; set;}public string Age {get;set;}public string Home {get;set;}public Resume(string name, string age, string home){Name = name;Age = age;Home = home;}public void Display(){Console.WriteLine($"名字:{Name}");Console.WriteLine($"年龄:{Age}");Console.WriteLine($"家:{Home}");Console.WriteLine($"-------------------------------------");}public Resume Clone(){return new Resume(Name, Age, Home);}
}

外观模式

void Main()
{Facade facade = new Facade();facade.Method();
}class SystemA
{public void MethodA(){Console.WriteLine("系统A开启了");}
}class SystemB
{public void MethodB(){Console.WriteLine("系统B开启了");}
}class SystemC
{public void MethodC(){Console.WriteLine("系统C开启了");}
}class Facade
{private SystemA _systemA = new SystemA();private SystemB _systemB = new SystemB();private SystemC _systemC = new SystemC();public void Method(){_systemA.MethodA();_systemB.MethodB();_systemC.MethodC();}
}

简单工厂模式

void Main()
{Product productA = Factory.GetProduct("A");productA.MethodSame();productA.MethodDiff();Product productB = Factory.GetProduct("B");productB.MethodSame();productB.MethodDiff();}abstract class Product
{public void MethodSame(){Console.WriteLine("这里是公共的方法");}public abstract void MethodDiff();
}class ProductA : Product
{public override void MethodDiff(){Console.WriteLine("这里是ProductA");}
}class ProductB : Product
{public override void MethodDiff(){Console.WriteLine("这里是ProductB");}
}class Factory
{public static Product GetProduct(string arg){Product product = null;if (arg.Equals("A")){product = new ProductA();}else if (arg.Equals("B")){product = new ProductA();}return product;}
}

工厂方法模式

void Main()
{IFactory factoryA = new FactoryA();Product productA = factoryA.CreateProduct();productA.MethodSame();productA.MethodDo();IFactory factoryB = new FactoryB();Product productB = factoryB.CreateProduct();productB.MethodSame();productB.MethodDo();
}abstract class Product{public void MethodSame(){Console.WriteLine("这是公共方法");}public abstract void MethodDo();
}class ProductA : Product
{public override void MethodDo(){Console.WriteLine("这里是产品A");}
}class ProductB : Product
{public override void MethodDo(){Console.WriteLine("这里是产品B");}
}interface IFactory
{Product CreateProduct();
}class FactoryA : IFactory
{public Product CreateProduct(){return new ProductA();}
}class FactoryB : IFactory
{public Product CreateProduct(){return new ProductB();}
}

抽象工厂方法

void Main()
{IFactory factory1 = new Factory1();AbProductA productA1 = factory1.CreateProductA();AbProductB productB1 = factory1.CreateProductB();productA1.Method();productB1.Method();IFactory factory2 = new Factory2();AbProductA productA2 = factory2.CreateProductA();AbProductB productB2 = factory2.CreateProductB();productA2.Method();productB2.Method();
}abstract class AbProductA{public abstract void Method();
}abstract class AbProductB{public abstract void Method();
}class ProductA1 : AbProductA
{public override void Method(){Console.WriteLine("这里是产品A1");}
}class ProductA2 : AbProductA
{public override void Method(){Console.WriteLine("这里是产品A2");}
}class ProductB1 : AbProductB
{public override void Method(){Console.WriteLine("这里是产品B1");}
}class ProductB2 : AbProductB
{public override void Method(){Console.WriteLine("这里是产品B2");}
}interface IFactory
{public AbProductA CreateProductA();public AbProductB CreateProductB();
}class Factory1 : IFactory
{public AbProductA CreateProductA(){return new ProductA1();}public AbProductB CreateProductB(){return new ProductB1();}
}class Factory2 : IFactory
{public AbProductA CreateProductA(){return new ProductA2();}public AbProductB CreateProductB(){return new ProductB2();}
}

策略模式

void Main()
{IStrategy strategyA = new StrategyA();Context contextA = new Context(strategyA);contextA.oper();IStrategy strategyB = new StrategyB();Context contextB = new Context(strategyB);contextB.oper();
}interface IStrategy
{void Do();
}class StrategyA : IStrategy{public void Do(){Console.WriteLine("这里是StrategyA");}
}class StrategyB : IStrategy
{public void Do(){Console.WriteLine("这里是StrategyB");}
}class Context{IStrategy _strategy;public Context(IStrategy strategy){_strategy = strategy;}public void oper(){_strategy.Do();}
}

装饰模式

void Main()
{Component component = new ConcreteComponent();Decorator decorator = new ConcreteDecorator(component);decorator.Operation();
}abstract class Component {public abstract void Operation();
}class ConcreteComponent : Component{public override void Operation(){Console.WriteLine("Operation");}
}class Decorator : Component{private Component component;public Decorator(Component component){this.component = component;}public override void Operation(){component.Operation();}
}class ConcreteDecorator : Decorator{public ConcreteDecorator(Component component) : base(component){}public override void Operation(){base.Operation();AddedBehavior();}public void AddedBehavior(){Console.WriteLine("AddedBehavior");}
}

观察者模式

void Main()
{Subject subject = new ConcreteSubject();Observer observer = new ConcreteObserver();subject.Attach(observer);subject.Notify();
}abstract class Subject{protected List<Observer> observers = new List<Observer>();public abstract void Attach(Observer observer);public abstract void Detach(Observer observer);public abstract void Notify();
}class ConcreteSubject : Subject
{public override void Attach(Observer observer){observers.Add(observer);}public override void Detach(Observer observer){observers.Remove(observer);}public override void Notify(){foreach (object obs in observers){((Observer)obs).Update();}}
}abstract class Observer{public abstract void Update();
}class ConcreteObserver : Observer{public override void Update(){Console.WriteLine("调用了Update");}
}

适配器模式

void Main()
{Adaptee adaptee = new Adaptee();Target targetA = new Adapter(adaptee);targetA.Request();
}class Target {public virtual void Request(){Console.WriteLine("目标类请求方法");}
}class Adaptee {public void SpecificRequest(){Console.WriteLine("适配类的请求方法");}
}class Adapter : Target {private Adaptee _adaptee;public Adapter(Adaptee adaptee){this._adaptee = adaptee;}public override void Request(){_adaptee.SpecificRequest();}
}

状态模式(状态类切换)

void Main()
{Context context = new Context(new ConcreteStateA());context.Condition = 1;context.Request();context.Condition = 2;context.Request();
}abstract class State
{public abstract void Handle(Context context);
}class ConcreteStateA : State
{public override void Handle(Context context){if(context.Condition == 2){context.State = new ConcreteStateB();context.Request();} else {Console.WriteLine("Handle() in A");}}
}class ConcreteStateB : State
{public override void Handle(Context context){if (context.Condition == 1){context.State = new ConcreteStateA();context.Request();}else{Console.WriteLine("Handle() in B");}}
}class Context
{public State State { get; set; }public int Condition { get; set; }public Context(State state){State = state;}public void Request(){State.Handle(this);}
}

状态模式(环境类切换)

void Main()
{Context context = new Context(new ConcreteStateA());context.Condition = 1;context.Request();context.Condition = 2;context.Request();
}abstract class State{public abstract void Handle();
}class ConcreteStateA : State
{public override void Handle(){Console.WriteLine("Handle() in A");}
}class ConcreteStateB : State
{public override void Handle(){Console.WriteLine("Handle() in B");}
}class Context
{public State State { get; set; }public int Condition {get;set;}public Context(State state){State = state;}public void Request(){ChangeState();State.Handle();}public void ChangeState(){if(Condition == 1){State = new ConcreteStateA();} else if(Condition == 2){State = new ConcreteStateB();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【高校科研前沿】四川大学刘超研究员为一作在《Geophys. Res. Lett.》发表团队成果:植被形态影响河床泥沙输运

文章简介 论文名称&#xff1a;Plant morphology impacts bedload sediment transport 第一作者及单位&#xff1a;刘超&#xff08;研究员|四川大学水利水电学院&#xff09; 通讯作者及单位&#xff1a;Yuqi Shan&#xff08;四川大学灾后重建与管理研究所&#xff09; 文…

【HashMap和HashSetyi以及散列表的拉链法,线性探测法详解】

&#x1f308;个人主页&#xff1a;SKY-30 ⛅个人推荐&#xff1a;基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 &…

昇思25天学习打卡营第2天 | 张量Tensor

张量Tensor 张量&#xff08;Tensor&#xff09;基础 张量是MindSpore中的基本数据结构的一种&#xff0c;类似于NumPy中数组和矩阵非常相似。它具有以下重要属性&#xff1a; 形状&#xff08;shape&#xff09;和数据类型&#xff08;dtype&#xff09;&#xff1a;每个张量…

射频技术在未来通信中的应用

低功耗广域网&#xff08;LPWAN&#xff09;技术 物联网的广泛应用需要低功耗、广覆盖的无线通信技术。低功耗广域网&#xff08;LPWAN&#xff09;技术如LoRa、NB-IoT和Sigfox等应运而生。这些技术在低功耗设计、远距离传输和大规模设备连接方面具有显著优势&#xff0c;使其…

Docker 常见命令快速查阅

基础命令 1. 帮助命令 docker versiondocker infodocker --help2. 镜像相关命令 列出主机的所有镜像 docker images [OPTIONS] # OPTIONS 说明&#xff1a;-a :列出本地所有的镜像&#xff08;含中间映像层&#xff09;-q :只显示镜像ID--digests :显示镜像的摘要信息--no-…

【Java基础】 网络编程

在数字化时代&#xff0c;网络编程已成为软件开发中的重要组成部分。无论是构建分布式系统、实现实时通讯还是进行Web开发&#xff0c;都需要深入了解网络编程的基础知识和技术。这种技能不仅在IT领域至关重要&#xff0c;还在非计算机行业的岗位中发挥着越来越重要的作用。Jav…

如何找到合适的Python第三方库?

找合适的Python库其实很简单&#xff0c;按照以下三步法&#xff0c;你能找到90%的Python库。 1、百度谷歌搜索 明确自己的需求&#xff0c;用Python来干什么&#xff0c;力求简短明了。比如定位“数据分析”&#xff0c;然后去搜索关键词【Python数据分析第三方库】&#xf…

基于 JWT 进行身份验证

一、JWT 介绍 JWT 本质上就是一组字串&#xff0c;通过&#xff08;.&#xff09;切分成三个为 Base64 编码的部分&#xff1a; Header : 描述 JWT 的元数据&#xff0c;定义了生成签名的算法以及 Token 的类型。Payload : 用来存放实际需要传递的数据Signature&#xff08;签…

考研数学|张宇和武忠祥,强化能不能同时跟?

可以说你跟武老师学明白了&#xff0c;120完全没问题&#xff01;如果追求更高&#xff0c;宇哥的怀抱也想你敞开&#xff01; 学长我21年一战数学83&#xff0c;总分没过线&#xff0c;22年二战143&#xff0c;逆袭上岸211&#xff01;市面上的老师我基本都听过&#xff0c;最…

微深节能 料场堆取料无人操作系统 格雷母线

格雷母线高精度位移检测系统在料场堆取料中的应用是一个重要的技术进步&#xff0c;它极大地提升了堆取料作业的自动化和精确性。 一、格雷母线定位系统概述 格雷母线高精度位移测量系统&#xff0c;包括格雷母线、天线箱、地址解码器、地址编码器四个部分组成。 格雷母线类似一…

大数据面试题之Hive(3)

目录 Hive的函数:UDF、UDAF、UDTF的区别? UDF是怎么在Hive里执行的 row_number&#xff0c;rank&#xff0c;dense_rank的区别 Hive count(distinct)有几个reduce&#xff0c;海量数据会有什么问题 HQL&#xff1a;行转列、列转行 一条HQL从代码到执行的过程 了解Hive S…

深入探索Kylin的Cube构建:数据魔方的构建之旅

深入探索Kylin的Cube构建&#xff1a;数据魔方的构建之旅 引言 Apache Kylin是一个开源的分布式分析引擎&#xff0c;提供Hadoop和Spark之上的高性能数据立方体&#xff08;Cube&#xff09;技术。Kylin的Cube构建过程是其核心功能之一&#xff0c;它允许用户定义和构建多维数…

手动指定ubuntu环境下程序打包指定目录

Ubuntu在打包过程请自行检索其它文章&#xff1b; 在打包时候默认不能打包一些静态资源的&#xff0c;比如以配置文件为例config目录 当程序打包安装后&#xff0c;安装目录中没有config目录&#xff0c;这时候就需要我们手动创建config目录及目录中对应的配置文件等内容&…

Java养老护理助浴陪诊小程序APP源码

&#x1f496;护理助浴陪诊小程序&#x1f496; 一、引言&#xff1a;养老新趋势&#x1f331; 在快节奏的现代生活中&#xff0c;养老问题逐渐成为了社会关注的焦点。如何为老年人提供便捷、贴心的服务&#xff0c;让他们晚年生活更加安心、舒适&#xff0c;是我们每个人都需…

持续总结中!2024年面试必问的操作系统面试题(三)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问的操作系统面试题&#xff08;二&#xff09;-CSDN博客 五、什么是分页和分段&#xff1f;它们之间有什么区别&#xff1f; 分页和分段是操作系统中用于内存管理的两种不同技术&#xff0c;它们都旨在允许操作系统…

v-model中.lazy、.number、.trim

在Vue.js中&#xff0c;v-model 是一个非常核心的指令&#xff0c;它主要用于在表单输入和应用状态之间建立双向绑定。 Vue.js 提供了一些修饰符&#xff08;modifiers&#xff09;&#xff0c;这些修饰符可以用来指定不同的行为。.lazy、.number 和 .trim 就是这样的修饰符。 …

篮球联盟管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;球员管理&#xff0c;用户管理&#xff0c;球队管理&#xff0c;论坛管理&#xff0c;篮球资讯管理&#xff0c;基础数据管理 前台账户功能包括&#xff1a;系统首页&#xff0…

Transformer常见面试题

目录 1.Transformer为何使用多头注意力机制&#xff1f;&#xff08;为什么不使用一个头&#xff09; 2.Transformer为什么Q和K使用不同的权重矩阵生成&#xff0c;为何不能使用同一个值进行自身的点乘&#xff1f; &#xff08;注意和第一个问题的区别&#xff09; 3.Transf…

位运算符计算规则及使用场景

位运算符包括按位与&、按位异或^、按位或|、按位取反~、左移<<、右移>> 1.&&#xff08;按位与&#xff09;1&#xff09;限定数值范围2&#xff09;权限检测3&#xff09;掩码操作 2.^&#xff08;按位异或&#xff09;1&#xff09;两值交换2&#xff09…

git提交新仓库代码,提示无权限,但用户名已修改

目录 1 用户名无权限 2 删除用户凭据 2.1 打开控制面板 2.2 找到“凭据管理器” 2.3 删除git历史 3 npm工具库添加git仓库指引 1 用户名无权限 之前因为时间的原因&#xff0c;js-tool-big-box工具库没有提交到github上去&#xff0c;今天想着往上提交一下&#xff0c;但…