设计模式-笔记01
2017-02-07 20:52
141 查看
1.9 紧耦合vs松耦合
2.7 策略模式解析
减少算法类之间的DPE
反射
3.4 单一原则
3.5 ASD
4.开放-封闭原则
The Open-Closed
类、模块、函数等应该可以扩展,但是不可修改 ASD
面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有代码实现的
强内聚,松耦合
里氏代换原则 LSP ,子类必须能够替换父类类型
装饰模式(Decorator) 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
代理模式:
public class Operation { private double _numberA=0; private double _numberB=0; public double NumberA { get{ return _numberA;} set{ _numberA = value;} } public double NumberB{ get{ return _numberB;} set{_numberB = value;} } public virtual double GetResult(){ double result =0; return result; } } class OperationAdd:Operation // 加法类继承运算类 { public override double GetResult() { double result =0; result = NumberA+NumberB; return result; } } class OperationSub:Operation // 减法类继承运算类 { public override double GetResult() { double result =0; result = NumberA - NumberB; return result; } } class OperationMul:Operation // 乘法类继承运算类 { public override double GetResult() { double result =0; result = NumberA * NumberB; return result; } } class OperationDiv:Operation // 除法类继承运算类 { public override double GetResult() { double result =0; if(NumberB==0){ throw new Exception("除数不能为0"); result = NumberA / NumberB; return result; } } } public class OperationFactory{ public static Operation createOperation(string operate){ Operation oper = null; switch(operate){ case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; case "*": oper = new OperationMul(); break; case "/": oper = new OperationDiv(); break; } return oper; } }
2.7 策略模式解析
减少算法类之间的DPE
反射
3.4 单一原则
3.5 ASD
4.开放-封闭原则
The Open-Closed
类、模块、函数等应该可以扩展,但是不可修改 ASD
面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有代码实现的
强内聚,松耦合
里氏代换原则 LSP ,子类必须能够替换父类类型
装饰模式(Decorator) 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。
代理模式:
class Proxy{ SchoolGirl mm; public Proxy(SchoolGirl mm){ this.mm=mm; } public void GiveDolls(){ Console.WriteLine(mm.Name+"送你洋娃娃"); } public void GiveFlowers() { Console.WriteLine(mm.Name+"送你鲜花"); } public void GiveChocolate() { Console.WriteLine(mm.Name+"送你巧克力"); } } class SchoolGirl { public string Name{ get{ return name;} set{name =value;} } private string name; } static void Main(string[] args){ SchoolGirl jiaojiao = new SchoolGirl(); jiaojiao.Name="李娇娇"; Pursuit daili = new Proxy(jiaojiao); daili.GiveDolls(); daili.GiveFlowers(); daili.GiveFlowers(); Console.Read(); } // 代理接口 interface GiveGift{ void GiveDolls(); void GiveFlowers(); void GiveChocolate(); } // 追求者类 class Pursuit:GiveGift{ SchoolGirl mm; public Pursuit(SchoolGirl mm){ this.mm=mm; } public void GiveDolls(){ Console.WriteLine(mm.Name+"送你洋娃娃"); } ... } class Proxy:GiveGift{ Pursuit gg; public Proxy(SchoolGirl mm){ gg = new Pursuit(); } public void GiveDolls(){ gg.GiveDolls(); } ... } // 客户端如下 static void Main(string [] args){ SchoolGirl jiaojiao = new SchoolGirl(); jiaojiao.Name="李娇娇"; Proxy daili = new Proxy(jiaojiao); daili.GiveDolls(); ... Console.Read(); } 工厂方法模式: // 构建工厂的接口 interface IFactory{ Operation CreateOperation(); } class AddFactory:IFactory{ //加法类 public Operation CreateOperation(){ return new OperationAdd(); } ... } // 客户端 IFactory operFactory = new AddFactory(); Operation oper = operFactory.CreateOperation(); oper.NumberA=1; oper.NumberA=1; double result = oper.GetResult();
相关文章推荐
- 《设计模式:基于C#的工程化实现及扩展》学习笔记 01 准备篇 -- 前言
- C#设计模式(学习笔记[01])
- 【笔记】设计模式(PHP) - [01]
- 设计模式之01单例模式(笔记)
- [watchmen设计模式笔记]01单实例模式
- android设计模式学习笔记01
- headfast设计模式学习笔记01
- 设计模式学习笔记01
- iOS UI 01 课堂笔记 -设计模式
- 设计模式学习笔记01
- iOS UI 01 课堂笔记 -设计模式
- J2EE设计模式学习笔记之--实际的数据存取
- Struts+Hibernate模板开发笔记---设计模式:MVC
- 学习笔记之ORM设计中用到的模式
- 设计模式笔记之 -Template Method & Strategy
- 设计模式笔记之 - Command & Active Object
- Struts+Hibernate模板开发笔记---设计模式:DAO
- Struts+Hibernate模板开发笔记---设计模式:单例
- 设计模式学习笔记
- 设计模式的学习笔记!(一)