创建型模式(5种)
单例模式 public static readonly User Administrator=new User("admin");
原型模型 INewObject newObj=protoTpe.Clone();
工厂模式 IProduct product=Factory.GetProduct("请输入产品名称");
简单工厂模式(不算23种里面)
工厂方法模式 IFactory factory=new GuoChan(); ICar car=factory.GetCar(); // 工厂就一种产品
抽象工厂模式 IFactory factory=new GuoChan(); ICar car=factory.GetCar(); IBike motor=factory.GetMotor();
建造者模式 IBuilder builder=new SomeBuilder(); builder.SetTimeout(1000).setXXX("aaa"); var client=builder.Build();
结构型模式(7种)
代理模式 var html=new CDNProxy("https://www.163.com");
适配器模式 IRemote remote=new RemoteSimulator(new XiaoMiMobile());
桥接模式 (配置项太多的话,用一个接口的话,就太乱套了,所以拆成多个接口,这样通过主接口对象获取的时候,其它附带属性通过构造函数动态的new进去,不就动态配置了么)var 三角形=new Triangle(new Color("red"))
装饰器模式 IButton button=new Button(); button=new PictureDecorator(button,"123.jpg");
外观模式 IGovCheckFacade checkFacade=new GovCheckFacade("广西核验","南宁核验","北京核验","RedisCache","SolrResearch");
享元模式 IMonster monster=MonsterCache.Get("normal"); monster.Display(23,55); monster.Display(32,53);
组合模式 IWalker walker; walker.Walk();// 可以支持单个对象,也能支持一组对象
行为型模式(11种)
模板方法模式 : 说白了就是抽象类取了个别名……!
策略模式 : 有些标准的动作,只是不同的策略下具体做法不一样。
命令模式 : ICommand command=new SaveCommand(); ExecutorPool.Run(commandList, cmd=> cmd.Execute()); //vscode 中的插件输入
责任链模式 : if(canProcess(this.data))){ return this.realProcess();} else if (this.nextHandler!=null){ return this.nextHandler.process();}
状态模式 : IStatus 这个状态接口中定义各种可能的操作,然后通过setStatus(new StatusA()); 然后就影响主对象的方法。
观察者模式 : AddObservor(IObservor observor);C#中的事件就是观察者。
中介者模式 : 聊天室的Chatroom做中介,一堆user聊天的时候给其他人发送
迭代器模式 : List<String> ;foreach的时候不用知道内部结构是啥。
访问者模式 : IDataHolder someData=new SomeDataHolder(); someData.welCome(visitor);
备忘录模式 : IEditor editor=new EmEditor(); editor.SaveCraft(memoHolder); //balabala ; editor.Restore(memoHolder);
解释器模式 : IExpression a=new AddExpression(); IExpression s=new SubExpression(); Explain( new Expression[]{a,s} );