软件构造——一些关于软件构造设计模式的理解与总结

          题外话:本学期开始时,老师要求在博客上记录自己学习本门课程时的一些问题、想法和体会(诸如此类的一些东西)。之前因为一些原因(多数是因为自己比较懒,并且没有用心学习这门课)没有更新,所以从今日起我会以复习的模式来更新博客。

        软件架构常用的设计模式

Factory Method Pattern (工厂方法模式)

               工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。主要特点是避免Client使用Object object = new Object()这种可以直接使用new构建对象的方法。这就相当于你去吃饭,不管你要吃什么,只需要你拿菜单点菜名就行了。不需要你去做这道菜。我觉得这种模式理解起来比较简单。

Abstract Factory(抽象工厂模式)

              这个模式我理解起来比较困难,所以我上网参考了一些相关博客。

              相关概念:产品族: 位于不同产品等级结构中,功能相关联的产品组成的家族。 图中的BmwCar和BenzCar就是两个产品树(产品层次结构);而如图所示的BenzSportsCar和BmwSportsCar就是一个产品族。他们都可以放到跑车家族中,因此功能有所关联。同理BmwBussinessCar和BenzBusinessCar也是一个产品族。
可以这么说,它和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是三个里面最为抽象、最具一般性的。抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。 
              而且使用抽象工厂模式还要满足一下条件:
1.系统中有多个产品族,而系统一次只可能消费其中一族产品
2.同属于同一个产品族的产品以其使用。
              来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):
1.抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
2.具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
3.抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
4.具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。


 

 

         针对上述的观点,所以应该在以下的情况下使用该设计模式:

  • 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。
  • 这个系统有多于一个的产品族,而系统只消费其中某一产品族。
  • 同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。
  • 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。

Builder (构造器模式)

        当一个类的内部过于复杂时,要创建的话可能就需要了解这个类的内部结构,以及组成成分是如何组合到一起的等等。这个时候如果随心所欲的编写程序想到哪里写到哪里的话就会显得难以理解,这个时候就需要一种方法来管理这个类中的数据,使之在创建的时候令其按部就班的来,并且在能完成全部功能的情况下增加可读性,这就是Builder模式的应用场景,Builder模式可以将一个类的构建和表示进行分离。

                下面说一下使用和不适用构造器模式的对比(代码就不写了,网上一大堆)

        不使用:优点是比较简单,开发效率高,缺点是如果参数很多的话(假如10个),要看清它们每个对应什么意思真的很累;

        Builder模式:优点是可以将构造器的setter方法名取成类似注释的方式,这样我们可以很清晰的知道刚才究竟设置的什么值,可读性较高,缺点是比较冗长。

                                                                                                                                                                                                                                                                          2018/4/23/15:07/格物楼213

转载于:https://www.cnblogs.com/hit1160300317/p/8919236.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值