奔跑的肥猪

导航

2011年12月23日 #

Adapter pattern

摘要: 把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。具体例子来说,我们都用过充电器,有些充电器的接口是圆形的,有些是方形的, 那如果我要在圆形的插座上面使用方形的充电器,是应该买一个圆形的充电器还是买一个转换器将圆形变成方形?public class CylindricalPlug {public String supply(String cylinStem1, String cylinStem2) {String result = cylinStem1 + cylinStem2;DebugLog.log("the input 阅读全文

posted @ 2011-12-23 18:24 布兜兜 阅读(198) 评论(0) 推荐(0) 编辑

Observer pattern

摘要: 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够相应的发生变化.那华尔街的例子举个例子:投资者关注股票,但他没有必要整天在证交所目不转睛的关注股票的涨落,而是应该如果股票有变化,告诉投资者就可以了。do not call me, i will call you.public class IBMStock extends Stock {}public interface IInvestor {void Update( Stock stock );}public class ShanghaiInvestor imp 阅读全文

posted @ 2011-12-23 18:15 布兜兜 阅读(142) 评论(0) 推荐(0) 编辑

Template Pattern && Strategy Pattern

摘要: Strategy将通用算法抽象为一个接口,算法用户和提供算法实现的类构成组合关系;Template Method将算法定义为一个抽象方法,让具体子类实现该抽象方法,它体现的是一种继承关系。Strategy比Template Method更灵活,适用于需要动态改变算法的情况。各位可以看这个二个模式的类图,可以发现template pattern其实是违反dip原则的,如果算法的过程本省不稳定,本人不推荐使用该模式。但是我需要指出的是template模式很强大,template pattern是我使用最为频繁的模式之一。public abstract class TestCase {protect 阅读全文

posted @ 2011-12-23 18:07 布兜兜 阅读(234) 评论(0) 推荐(0) 编辑

Null Object 模式

摘要: 作为java程序员,最讨厌的莫过于解决无穷无尽的nullpointexception.其实利用null object模式优雅的解决这个问题:public interface Employee{public void pay();public boolean isTimeToPay(Date payDate);public static final Employee NULL = new Employee(){public boolean isTimeToPay(Date payDate){return false;}public void pay(){ }};}public clas... 阅读全文

posted @ 2011-12-23 17:57 布兜兜 阅读(284) 评论(0) 推荐(0) 编辑

单例模式(Singleton Pattern & MonoState)

摘要: 确保一个类只有一个实例并提供一个对它的全局访问指针public class Person { private String name; private int age; private static Person person;protected Person() { super(); }public String getName() { return name; }public void setName(String name) { this.name = name; }public int getAge() { return age; }public void setAge(int age 阅读全文

posted @ 2011-12-23 17:50 布兜兜 阅读(232) 评论(0) 推荐(0) 编辑

接口隔离原则(ISP)

摘要: 客户端不应该被强迫实现一些他们不会使用的接口(霸王条款)。定义了某个接口,迫使它的实现类必须实现它的所有方法,即使某个方法实现类根本不需要,导致实现类变得越来越胖。public interface Killer { void shoot();}public class MachineGun implements Killer {@Overridepublic void shoot() { DebugLog.log("machine gun, enemies are killed");}}public class Pistol implements Killer {@Over 阅读全文

posted @ 2011-12-23 17:01 布兜兜 阅读(214) 评论(0) 推荐(0) 编辑

里氏代换原则(LSP)

摘要: 子类必须能替换成它们的父类(龙生龙,凤生凤,老鼠的儿子会打洞)可以这么理解,进公司之前人事当然会告诉你公司的制度,如果这个公司出得米米比较多,你可能会看都不看就签上你的大名,如果有一天人事告诉你因为你一个月因为连续迟到3天而将被开除,你肯定后悔没有认真看过制度,这个小例子说明一旦你继承某个类(成为公司员工),你就不该该改变它的基本行为(一个月迟到3次),否则你将死的很惨.(或者你是超人,可以拯救全人类)public interface IWorker { void eat(); void work();}public class Manager {private IWorker iWorker 阅读全文

posted @ 2011-12-23 16:52 布兜兜 阅读(225) 评论(0) 推荐(0) 编辑

依赖倒置原则(DIP)

摘要: 高层 不依赖 低层 实现不依赖细节,二者都依赖接口举例来说,如果设计一个软件来通过观察当前炉内的问题来控制火炉开关,可以把程序写成如下形式:public class Thermometer{private int getCurrentTemp;public int getGetCurrentTemp() {// TODO Auto-generated method stubreturn getCurrentTemp;}public void setGetCurrentTemp(int getCurrentTemp) {this.getCurrentTemp = getCurrentTemp;} 阅读全文

posted @ 2011-12-23 16:42 布兜兜 阅读(229) 评论(0) 推荐(0) 编辑

开放封闭原则(OCP)

摘要: open for extention, close for modification当需求发生变化时,不应该在相关类里面改变现有逻辑,而是通过实现相关接口完成业务功能。电脑由cpu,memory,motherboard组成。public class Cpu {private String name;private int price;public Cpu(String name, int price) {super();this.name = name;this.price = price;}public String getName() {return name;}public void s 阅读全文

posted @ 2011-12-23 16:27 布兜兜 阅读(182) 评论(0) 推荐(0) 编辑

SRP(Single Responsibility Principle) 单一职责原则

摘要: SRP的意思就是一个类只有一个引起他变化的原因,怎么理解,就是将稳定的部分封装在一个class里面,变化的部分用接口隔离起来。public interface IDBAction { void add(); void delete();}public class DBManager implements IDBAction {@Overridepublic void add() {if (isLegalUser()) {DebugLog.log("add action");}}@Overridepublic void delete() {if (isLegalUser()) 阅读全文

posted @ 2011-12-23 16:17 布兜兜 阅读(589) 评论(0) 推荐(0) 编辑

面向对象设计5大准则

摘要: OO 设计5原则单一职责原则(SRP) 仅有一个引起其变化的原因开放封闭原则(OCP) 欢迎扩展,拒绝修改(关键是抽象)依赖倒置原则(DIP) 高层 - > 低层 实现->细节里氏代换原则(LSP) 子类必须能替换成它们的父类(龙生龙,凤生凤,老鼠的儿子会打洞)接口隔离原则(ISP) 客户端不应该被强迫实现一些他们不会使用的接口(霸王条款) 阅读全文

posted @ 2011-12-23 16:07 布兜兜 阅读(308) 评论(0) 推荐(0) 编辑