刚把书读得差不多了,到最后总结的时候,发现还是有很多设计模式的思想和具体操作不太记得了。

故此还是用点笨办法,把一些比较重要又没什么印象的手敲一遍好了。

第一节,哈吉马路哟。

uml图详解

uml里的关系,不太好描述,这里写几个我比较容易搞混的。

(1)关联—–实线,依赖—–虚线

(2)聚合—–实线,组合—–虚线

(3)继承—–实线,实线接口—–虚线

唔姆,好像也就这些,写出来感觉就没这么难记了。

策略模式

这里举了超市搞活动的例子,优惠的方式很多,可能打折,返券,或者是积分。

我感觉简单工厂的确可以实现,但对比策略模式,确实在每次更改上,不仅要加算法,还要对总工厂有较大改动,先看最开始的策略模式结构图

具体到超市活动,其实变化不大。

每一个优惠方式都定义成一个独立的子类,根据需求,实例化。

鉴于减少客户端的判断压力,利用简单工厂和策略可以把switch都搬入Strategy中。

上面这点很重要,统揽全书,我感觉设计模式要做的就是每一个类做好自己的一件事,尽量不暴露给别人,减少对其他类的依赖,达成所谓的低耦合高内聚

总之写写看,不能刚看看。

class CashContext{
    CashSuper cs=null;

    public CashContext(string type)
    {
        switch (type)
        {
            case "正常收费":
                cs=new CashNormal();
                break;
            case "满300减100":
                cs=new CashReturn("300","100");
                break;
            case "打8折":
                cs=new CashRebate("0.8");
                break;
            default:
                break;
        }

        //反射写法
        //string 命名空间.类名="命名空间."+type;
        //cs=(Cashsuper)Assembly.Load("当前程序集名").CreateInstance("命名空间.类名");

    }

    public double GetRes(double money)
    {
        return cs.acceptCash(money);
    }
}

//客户端
double total=0.0d;
private void btn(object sender,EventArgs e)
{
    CashContext csuper =new CashContext(cbxType.SelectedItem.ToString());
    double totalPrice=0d;
    totalPrice=csuper.GetRes(money)*xx;//xx不重要的东西
    total+=totalPrice;
    //...
}

总之,还是先贴个反射在这里,感觉挺好用的,像是每个类都被当成了单例,随叫随到。

今天的任务结束力,希望明天的我能继续。

您必须 登录 才能发表评论