设计模式——工厂方法模式

栏目: 后端 · 发布时间: 7年前

内容简介:《Head First设计模式》笔记整理...欢迎交流...正如在正式定义中所说的,常常听到其他开发人员说,工厂方法让子类决定要实例化的类是哪一个。希望不要理解错误,所谓的“决定”,并不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际创建的具体产品是哪一个。选择使用哪个产品的子类,自然就决定看实际创建的产品是什么。

《Head First设计模式》笔记整理...欢迎交流...

定义

定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

OO原则

  • 封装变化
  • 多用组合少用继承
  • 针对接口变成,不针对实现编程
  • 为交互对象之间的松耦合设计而努力
  • 类应该对扩展开放,对修改关闭
  • 要依赖抽象,不要依赖具体类

类图

设计模式——工厂方法模式

正如在正式定义中所说的,常常听到其他开发人员说,工厂方法让子类决定要实例化的类是哪一个。希望不要理解错误,所谓的“决定”,并不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际创建的具体产品是哪一个。选择使用哪个产品的子类,自然就决定看实际创建的产品是什么。

依赖倒置原则

要依赖抽象,不要依赖具体类。

这个原则听起来很像“针对接口编程,不针对实现编程”。然而,这里更强调“抽象”。这个原则说明了不能让高层组件依赖低层组件,“两者”都应该依赖抽象。

设计模式——工厂方法模式

几个方法帮助你遵循此原则......

  • 变量不可以持有具体类的引用
  • 不要让类派生自具体类
  • 不要覆盖积累中已经实现的方法

如果覆盖基类已经实现的方法,那么你的基类不是一个真正适合被继承的抽象。基类中已经实现的方法,应该由所有的子类共享。

需要注意的是,所有的原则都是为了更好的设计,并不是必须随时都遵循的。

创建一个pizza工厂

public abstract class PizzaStore {
    public Pizza orderPizza(String type) {
        Pizza pizza;
        
        pizza = ceratePizza(type);
        
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        
        return pizza;
    }
    
    public abstract Pizza createPizza(String type);
    
    //其它方法
}
//工厂方法是抽象的,所以必须依赖子类来处理对象的创建
//工厂方法必须返回一个产品
//工厂方法将客户,和实际创建具体产品的代码分隔开来
//工厂方法可能需要传递参数(也可能不需要)来指定所需要的产品

abstract Product factoryMethod(String type)
public abstract class Pizza {
    String name;
    String dough;
    String sauce;
    ArrayList topppings = new ArrayList();
    
    void prepare() { ... };
    
    void brake() { ... };
    
    void cut() { ... };
    
    void box() { ... };
    
    Public String getName() { ... };
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

3D打印

3D打印

[美]胡迪•利普森,梅尔芭•库曼 / 赛迪研究院专家组 / 中信出版社 / 2013-4 / 49.00元

《3D打印:从想象到现实》内容简介:你需要一把功能强大的锤子?你需要一双精致无比的鞋子?你需要给孩子准备奇异的玩具?你需要一顿精美的晚餐?只管打印出来就行了。《3D打印:从想象到现实》带你走进3D打印的世界,认识一下当下这个最酷的东西——它将从想象变成现实,并带来一场深刻的社会革命。 书中讲述了3D打印技术的突破性发展,以及3D打印技术将如何应用在学校、厨房、医院等场所的。《3D打印:从想象......一起来看看 《3D打印》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试