设计模式,我一直把设计模式想象成兵法,精妙的兵法可以结构化的、优雅的组织代码。以一种聪明的方式去实现功能,并且具有极强的可维护性。
说设计模式应该先从软件设计的思想说起,比如开闭原则,开:对扩展开放;闭:对修改关闭。这就需要什么呢?把不变的部分抽象出来并进行封装。软件设计还有一个原则叫做面向接口编程。接口是什么,这是我第一个想谈的东西,算是我想到所有东西的起点。接口,用书里的话来说就是一个标准,定义好这个标准之后,类库和客户端程序员就可以按照这个标准来进行开发,而不必关心实现的细节。从另一个角度来说,接口也是一个基类,所有实现此接口的细节实现都可以向上转型为这个基类,并为别人所用。下面开始我的“漫谈”,重口味啊,不喜勿进。
接口---标准也。什么事标准?就拿老丈人定义的标准来说,确切的说,一个适龄待嫁女青年的父亲给自己的女婿定义了一套标准:1、有房。2、有车。3、对自己女儿好。这就是一个接口其实,因为这是一套标准,只有实现了此标准(接口)的人才能成为他的女婿。
public House getHouse();
public Car getCar();
public void takeCareOfGirl();
}
这样,女婿就成为了一个接口,但是女婿不可以被实例化,不能说“他是一个女婿”,但是假如“小明”实现了女婿接口,并成为了老头的女婿,小明就可以向上转型为基类“女婿”,老头的女婿指向的就是小明了。这样有什么用呢?老头可以说,我要一个这样这样的女婿,有这这个女婿之后我可以调用女婿的这样这样的方法。
public class FatherInLaw{
public void MarryMyDaughter (SonInLaw sonInLaw){
House house = sonInLaw.getHouse();
Car car = sonInLaw.getCar();
sonInLaw.takeCareOfGirl();
……
}
}
可以看到FatherInLaw的嫁女儿的方法(marryMyDaughter)里必须要求传入一个女婿(SonInLaw)类,因为嫁女儿必须调用女婿的获得房子,获得小汽车,照顾女孩儿三个方法。这里岳父是不关心女婿其他的,只关心他是实现了那个女婿接口,也就是说可以向上转型为女婿。这也是面向对象设计的一个原则:面向接口编程。那么小明如果实现了接口,怎么去娶老头的女儿呢?
小明类:
public class Xiaoming implements SonInLaw{
private Car car;
public Car getCar(){
return car;
}
private House house;
public House getHouse(){
return house;
}
public void tackCareOfGirl(){
System.out.println("照顾女孩");
}
}
下面是测试类:
public class TestSon{public static void main(String[] args){
FatherInLaw fatherInLaw = new FatherInLaw();
fatherInLaw.marryMyDaughter(new Xiaoming());
}
}
小明类就是一个实现了女婿接口的类,换句非程序的话说就是一个达到了老头嫁女儿标准的人。在测试类里,有一个岳父对象被初始化,之后调用此对象的嫁女儿方法,此方法需要传入一个实现了女婿接口的类,我们把小明穿进去,老头就成功的把女儿嫁出去了。
例子就说完整了。里边利用接口,使岳父不必关心女婿的细节实现,只是定义一个接口,实现我的接口就可以了。就是OO中的面向接口编程。并且这个例子里还有一个设计模式---策略模式。
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化----百度百科。
这里的小明其实就是算法族中的一个,不仅可以有小明,还可以有小刚、小强、小白……只要他们实现了女婿接口,就可以传给岳父的嫁女儿方法。岳父是不关心具体的实现的(他不关心你是小强还是蟑螂),他只关心你是否实现了女婿接口。
再回归文章开头说的原则:开闭原则,老头嫁女儿方法是不变的:有房有车疼女儿。女婿是可以变的--小明、小刚和小强,not at all。这里正是抽象并封装了不变的部分:嫁女儿方法。开放了扩展部分---各种女婿。
好了,今天就说道这吧。下次我准备写代理模式和适配器模式。小强们是怎样实现女婿接口的---拼爹,拼爹就是代理啊适配器啊,其实是小强他爹实现了女婿方法,小强不过是一个适配器罢了。哈哈~~
分享到:
相关推荐
3. 行为型模式:涉及对象之间的职责分配,包括命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式等。 每种模式都有其使用场景和优缺点,...
《漫谈设计模式》这本书深入浅出地介绍了多种设计模式,通过代码实例帮助读者理解和应用这些模式。在这个压缩包“ramblingonpatterns-1.0”中,你将找到书中的代码示例,它们覆盖了各个章节的关键知识点。 1. **...
《漫谈设计模式》这本书以其独特的视角深入浅出地探讨了这一主题,尤其针对Java语言进行了详尽的阐述。在这个压缩包中,包含的文件“漫谈设计模式”可能是该书的电子版或者相关的学习资料。 设计模式的核心在于提高...
《漫谈设计模式》是一本专为Java开发者深入理解设计模式而编写的书籍。设计模式是软件工程中的一种最佳实践,它们是针对常见问题的解决方案,经过时间和实践的考验,被广泛接受并应用于各种项目中。这本书对于提升...
《漫谈设计模式》这本书是IT领域中关于软件设计的经典之作,主要涵盖了设计模式的核心概念和实际应用。设计模式是经过长期实践证明的在特定情境下解决软件设计问题的通用可复用方案,它们是软件工程中的智慧结晶,...
整体来看,架构模式与实践漫谈通过讨论架构原则、具体模式和实践案例,向我们展示了一个系统架构设计的整体视角。在构建大规模的互联网应用时,这些原则和模式至关重要,它们是系统能否成功应对不断变化需求和挑战的...
在软件开发中,设计模式是经验丰富的开发者们总结出的解决常见问题的模板化解决方案,它们代表了良好的设计实践,可以提高代码的可读性、可维护性和复用性。行为型设计模式主要关注对象之间的交互和职责分配,强调...
常见的设计模式有工厂模式、单例模式、策略模式、观察者模式等。学习和应用这些设计模式可以让开发者编写出更可维护、可扩展和灵活的代码。 作者金旭亮在书中通过丰富的实例和案例分析,探讨了如何在.NET 4.0环境下...
- 缓解缺陷可以通过使用策略模式或者依赖倒置原则,使设计更加灵活。 5. **建造者模式** - 建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - 常用于创建结构复杂的对象,如...
1.5 缓解这种问题的方法是将大型门面拆分为多个小门面,或者使用策略模式来动态选择不同的子系统组合。 接着,是组合模式。2.1 组合模式允许我们以统一的方式处理对象和对象的集合,实现部分-整体的层次结构。2.2 ...
整体框架约束下的迭代渐进方法是一种实用的设计策略,它强调在设计过程中不断迭代和完善,确保最终模型既符合业务逻辑又能适应未来的变化。 **2.2 数据总体结构设计** 数据总体结构设计包括工作流与数据流分析、...
### 知识点四:设计模式与最佳实践 #### 设计模式 - **前后端分离**:前端负责用户界面展示,后端负责业务逻辑处理。 - **动静分离**:将静态资源与动态资源分开部署,提高响应速度。 - **CDN**:利用内容分发网络...
根据研究发现,你可能需要调整产品定位,制定合适的定价策略,选择合适的销售渠道,甚至改变整个商业模式。 总的来说,"创业计划书-市场调查研究漫谈"这份资料涵盖了市场调查的全貌,从目标市场定义到策略制定,为...
综上所述,"漫谈PFC的原理与实现"这一主题涵盖了PFC技术的核心概念、分类、工作原理、控制策略及其优点和应用。通过深入学习和理解这些内容,我们可以更好地设计和优化电力系统的电源部分,提高整体的能效和稳定性。