您的位置:首页 > 其它

设计模式-笔记01

2017-02-07 20:52 141 查看
1.9 紧耦合vs松耦合

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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式