head first design patterns中的几个模式记录

1、策略模式:定义算法族,并将其封装,让它们之间可以互换,让算法的变化独立与使用算法的客户中

应用到的原则: a、找出应用中需要改变的地方,独立出来并封装好

                      b、针对接口编程不是针对实现编程。(针对接口编程关键就在多态,Parent parent=new Child()就是针对接口编程,但是从某种程度上说new一个对象也是针对实现编程)

                      C、多用组合(has-a)少用继承(is-a).组合的实现方法:一个类中包含另一个类的引用,或者一个类的引用另一个类的方法的参数)

书中例子(head first):由于Duck有各种类型,可以飞的,可以叫的,于是就将飞和叫做为两个接口,独立于Duck类,设计为两个接口FlyBehavior和QuackBehavior,其中具体怎么飞,怎么叫,设计相应的类继承FlyBehavior和QuackBehavior接口,完成相应的功能,这就完成了算法的封装。在Duck类中定义FlyBehavior和QuackBehavior的引用,实现多态。

 

2、装饰者模式:动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案

 应用到的原则:类应该对扩展开放,对修改关闭。(在设计中我们应该能扩展现有的功能,而无需修改现有的代码)

书中例子:装饰者模式一般包含:抽象组件(beverage),具体组件(espresso),抽象装饰者(condimentDecorator),具体描述者(mocka).在书中的抽象装饰者只是提供了一个抽象的getDescription()方法,其中Mocha等具体的装饰者改写getDescription()方法,在每一个具体的装饰者中都有抽象组件beverage的引用

     其中java的I/O流用到了这种设计模式:以socket为例:BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

  

3、工厂模式:定义了创建对象的接口,但由子类决定要实例化的类是哪一个,工厂模式将实例化推迟到子类

 

简单工程模式:从实际意义上来说他不是一个工厂模式,但是能完成一定的功能。

定义了三个类PizzaStore,SimplePizzaFactory,Pizza,其中Pizza是抽象接口,还有他的一些子类。SimplePizzaFactory中有一个createPizza(String type)方法,用于创造具体的Pizza,同时PizzaStore中有一个orderPizza(String type)方法,PizzaStore中有一个SimplePizzaFactory,用于引入一个工厂。

代码为:

public class PizzaStore{

 

SimplePizzaFactory  factory;

public PizzaStore(SimplePizzaFactory factory){

this.factory=factory;

}

..........

}

 

工厂模式:在简单模式上做出小的改变,将PizzaStore定义为抽象接口,同时将createPizza(String type)移到PizzaStore中,定义为抽象

 

public abstract class PizzaStore {
 public Pizza orderPizza(String type){
  Pizza pizza;
  pizza=createPizza(type);
  pizza.prepare();
  pizza.bake();
  pizza.cut();
  pizza.box();
  return pizza;
 }
 abstract Pizza createPizza(String type);//创建对象的接口,将对象的创建推迟到子类,就相当与一个工厂

}

 

 抽象工厂:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体的类

其实抽向工厂提供了一个更大的接口(AbstractFactory),有很多具体的工厂实现该接口(PizzaFactory),然后每个具体的工厂又像工厂模式一样工作。但是这些具体工厂生产的产品都有一定的关系。

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值