我理解的工厂模式 设计模式
程序员文章站
2024-01-23 20:30:34
...
首先,工厂模式可以分为两种: 工厂方法、抽象工厂。
其次,还有一种人们称之为简单工厂模式,其实谈不上叫模式,就是把一个创建对象的方法,提取出来,放到另外一个类中帮助实现,从设计角度上来讲,谈不上是模式
先说简单工厂模式的应用场景,如果一个对象的产生不仅仅是new一下就解决问题,比如需要根于不同状态产生不同实例,而这个状态标识又是动态的,则每次new的时候,都要通过if判断到底new那一个实例,这将造成代码的重复,放在一个简单工厂类中的时候,就可以避免重复编码,将产生同接口的不同实例。比如,在肯德基你可以吃汉堡,汉堡有鸡腿汉堡和鳕鱼堡,你把你要选得标识名称告诉肯德基,他就会给你你想要的汉堡,而不是他把鸡腿汉堡和鳕鱼堡都拿到你面前,你来选择(if else).
工厂方法其实是一种继承关系,一个抽象类工厂,里面有个方法是抽象的,用来生成用户需要的对象实例,然后抽象工厂的子类实现这个抽象方法,返回用户需要的对象实例,不同的抽象工厂子类返回不同的对象实例,这些实例实现同一个接口,属于继承关系,比如汉堡有麦当劳和肯德基,这两个对象都继承汉堡,抽象工厂是快餐店,有个抽象方法叫生产汉堡,肯德基的快餐店实例生成肯德基汉堡,麦当劳的快餐店生成麦当劳的汉堡
抽象工厂容易混淆为多个工厂方法, 抽象工厂用来生成一组对象,这组对象直接是组合关系,先定义一个接口,该接口表明要创建哪些组合对象,实现该接口的工厂类负责生产这些对象,这些对象有各自的接口,所以每个工厂类实例生成的组合对象都是不一样的,但拥有相同的组合关系。比如在肯德基的汉堡包,需要的材料在武汉和上海都是相同的,这些材料是组合关系,组成汉堡包,但材料本身有不同的实力,比如牛肉,武汉的牛肉和上海的牛肉的实质不一样(上海的好吃些~),所以武汉的工厂能生产武汉的汉堡包,上海的能生成上海的,汉堡包用的材料是组合关系,组合对象抽象名相同,但具体材料是不一样的。
上一篇: RHEL关闭桌面
下一篇: IReport的使用心得及实例