白话设计模式第1篇——简单工厂模式

xiaoxiao2021-02-28  94

最近入手程杰大牛的《大话设计模式》这本书,这本书深入浅出讲述了面向对象的23种设计模式,语言通俗易懂,代码短小精炼,理论的概述很少,内容都转化成了我们耳熟能详,喜闻乐见的文字,下面让我举个例子哈! 比如我们都学过面向对象编程,但是你要是说起来面向对象有什么好处?恐怕很多人都会懵逼,不知道从何说起。众所周知,四大发明中只有印刷术不是发明而是一种改进,以前的是雕版印刷术(将所有字印在同一个板上)改进成活字印刷术(每个字都是一个印章,需要什么字就去拿章),大家可以想想改进之前有哪些劣势?

不可维护(假如我印好了一版《滕王阁序》,但是我检查的时候发现,MD,我把“落霞与孤鹜齐飞”中的“齐”印成了“起”,那我这篇文章就废了,还得重新一个一个字印成一版)不可重用(即使我印好了也就是只能用这一次,用完就扔了)不可扩展(在1中,假如我少印了一个“齐”,那么我还是得重新印)总而言之,改进之前很不灵活 由此我们可见,活字印刷术之前的印刷工们每天大量重复无用的劳动,浪费了很多时间,如果我们的代码中不考虑面向对象思想,那么我们就和这些印刷工们一样了。面向对象就像是活字印刷,一个字一个章,章可以重复利用,章与章之间不会相互影响,需要新字加新章,字错了就改这一个章。 作者用这个活字印刷的例子帮我深入了解了面向对象思维,不知道有没有帮助你理解呢?如果你很喜欢作者这种比喻的话,在这里隆重推荐这本书哦。

本节课我们要学习的是简单工厂模式

假如我们现在遇到这样一个项目需求:

A公司有两条产品线,一个是生产随身听,一个是生产电视,B公司是采购公司,不懂A公司的产品具体怎么生产,让你根据这一点实现B公司采购的代码

如果不用工厂模式,我们会想,不就是定义一个随身听类,一个电视类吗,然后定义一个采购类,采购随身听或者电视类?这个思路是错的,因为你在采购类采购随身听或者电视类就相当于知道了mp3和tv是如何制造的(你调用了他们的构造方法)这和题目要求不符。

???该怎么做呢?

现在是两条产品线,以后会不会增加更多呢?考虑到可扩展性,我们需要定义一个产品线类(Product),包括随身听类(MP3)和电视类(TV),以后也许会有空调类,冰箱类等等,A还需要有一个工厂类,因为B不知道我怎么生产的,我得根据B的需求提供相应的产品(也就是从A工厂拿货物)Factory类,对于B来说,B只负责采购,需要一个采购的类,下面我们看代码:

代码1 产品 public interface Product { void play();//具备播放功能 } public class MP3 implements Product { @Override public void play() { System.out.print("mp3播放音乐!"); } } public class TV implements Product { @Override public void play() { System.out.print("TV播放电视剧!"); } } 采购工厂,B只需要提出需求,A工厂来负责生产对应的产品 public class Factory { public static Product getProduct(String s){ switch (s){ case "TV": TV tv = new TV(); return tv; case "mp3": MP3 mp3 = new MP3(); return mp3; default: return null; } } } B提出了需求要生产TV,工厂就去生产TV public class Main { public static void main(String args[]) { TV tv = (TV) Factory.getProduct("TV"); } }

简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程。 具体来说,把产品看着是一系列的类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。 我们日常工作中最经常用的简单工厂模式就是JDBC使用

转载请注明原文地址: https://www.6miu.com/read-72589.html

最新回复(0)