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

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

内容简介:《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() { ... };
}

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

查看所有标签

猜你喜欢:

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

Mastering Bitcoin

Mastering Bitcoin

Andreas M. Antonopoulos / O'Reilly Media / 2014-12-20 / USD 34.99

Mastering Bitcoin tells you everything you need to know about joining one of the most exciting revolutions since the invention of the web: digital money. Bitcoin is the first successful digital curren......一起来看看 《Mastering Bitcoin》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具