天天学设计模式7-创建型模式的不同用途

这两天好苦恼,感觉记不住每一种设计模式,学完了,复习的时候又要像没学过一样重新再看一遍,最后都会忘,不如写成一种便于检索的方式,当需要用的时候根据需要查找好了。

设计模式分为创建型模式,结构性模式以及行为型模式。其中创建型模式分为简单工厂模式,工厂模式,抽象工厂模式以及创建者模式;还有单例模式和原型模式。其中比较难理解的是前面四个,后面的两个理解上很简单,单例模式是当只能创建一个实例的时候用,比如,单机游戏中只能有一个玩家一样。原型模式则是需要复制很多一样的实例的时候用,比如创建很多一模一样的车,这个模式的好处在于,比如创建了一辆车,需要初始化车的颜色,大小,排量。当初始化第二个的时候这些参数又要再打一遍,如果初始化的过程很长,而且分布在不同的地方,那么初始化起来很麻烦,还不如直接复制一个就是了。

那么重点就在于一众的工厂模式,简单工厂模式基本上是不用的,每本书都是用简单工厂模式引出剩下的工厂模式。为什么不用呢?因为这一众工厂模式面对的是多态,这意味着创建的这些类可能会有很多派生,如果使用简单工厂模式,那么当产品升级创建了一个ProductB作为ProductA的子类,实现层上ProductA a = new Factory("A");就要修改成ProductB b = new Factoru("B");这就和原本直接ProductA a=new ProductA();没什么区别,什么都没简化,扩展起来也是一样麻烦;但如果使用工厂模式则只要Factory A = new Factory("A");当产品升级成ProductB的时候,可以仅仅在自己负责的这块逻辑层上修改

Product Factory(Char cha)
{
	if(cha=='A')
           {//原本是return new A();
               return new B();//升级后
            }
}

其实改动难免,完全实现开闭原则不可能,只能尽量减少改变的地方,这样实现层根本不用改。原本的代码都可以用,B里面新的方法,可以在以后写出来的代码中使用。

然后抽象模式则是在工厂模式下再用一个抽象产品类继承接口接口产品类然后最后产品类再继承抽象类,说简单一点就是再度扩展吧。在工厂模式中如果其中一个产品比别的产品多出来一个方法,那么所有的产品类都要去实现这个方法。在抽象工厂模式中则是,在抽象产品类中定义这个方法。我觉得这个蛮符合现实的,毕竟不能让一个鼠标像显示器一样拥有显示的功能吧。工厂模式适合生产不同种类的显示器,而抽象工厂适合生产鼠标,显示器,各类产品,不过也不是什么都可以,这些产品要有逻辑上的联系就是了,就像不管鼠标还是显示器都是电脑配件,而且这两个产品都有共同的方法,和主机交换数据,而在这里不能还生产脸盆。

最后是创建者模式,如果说前面的模式都是生成一个类的实例的话,创建者模式就是生成多个类的实例,前面只能生成一个鼠标,一个屏幕,那么创建者模式就能生成一台电脑。

以上便是所有的创建型模式,我觉得这样当我某天要忘了设计模式的时候,我也能很快地拾起来吧,或者找到我想找的东西。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值