简单工厂模式是由工厂对象决定创建哪个产品。虽然它不属于23种设计模式,但也是高级工厂模式的起源。模拟场景:暑假太无聊,打算在家做一个MP3播放器,包括播放器的程序设计。结构如下//歌曲播放接口publicinterfaceISong{voidPlay();}//流行歌曲播放publicclassPopularISongimplementsISong{@OverridepublicvoidPlay(){System.out.println("接下来播放流行歌曲歌曲~”);}}//播放古典歌曲publicclassClassicalSongsimplementsISong{@OverridepublicvoidPlay(){System.out.println("下一首播放古典歌曲~");}}//MP3播放操作publicclassMP3{publicenumSongType{PopularSongType,//流行歌曲ClassicalSongsType//经典歌曲//...其他类型}publicISongPay(SongTypetype){if(type==SongType.PopularSongType){返回新的PopularISong();}elseif(type==SongType.ClassicalSongsType){returnnewClassicalSongs();}返回空值;}}publicclassText{publicstaticvoidmain(String[]args){//用户执行MP3操作mp3=newMP3();mp3.Pay(MP3.SongType.PopularSongType).Play();}}[](https://jq.qq.com/?_wv=1027&k...节目终于写完了~舒服的躺在沙发上我用MP3播放流行歌曲,奶奶走过来问我会不会唱戏。我摸了摸自己的头说:“没关系,”但是你得等我。一小时后,重新拆硬件,写代码,加入opera类,重新修改MP3类中的ifelse分支。elseif(type==SongType.TraditionalOperaType)//opera{//.....}给奶奶用了之后,我很满意,跟我爸说夸我。我爸知道他想听相声。心想,这又不是又要写代码了……这显然不行。[](https://jq.qq.com/?_wv=1027&k...简单工厂模型包含必要的逻辑判断,根据用户选择的条件动态实例化生成相关类,明确区分各自责任和权力。但是这里也违背了开闭原则。工厂类集中了所有的逻辑判断。一旦你想添加一段代码,不得不修改逻辑判断。有了以上工厂模式的经验,我决定重写程序,防止他们想听其他类型的歌曲,而我不得不重新修改代码逻辑判断。//工厂类publicinterfaceIFactory{ISongCreateSong();}//产品歌曲类publicinterfaceISong{voidPlay();}具体工厂类://具体工厂类用于创建流行歌曲publicclassPopularSongFactoryimplementsIFactory{@OverridepublicISongCreateSong(){returnnewPopularISong();}}//具体工厂类用于制作古典歌曲publicclassClassicalSongsFactoryimplementsIFactory{@OverridepublicISongCreateSong(){returnnewClassicalSongs();}}特定歌曲类://特定歌曲类:古典publicclassClassicalSongsimplementsISong{@OverridepublicvoidPlay(){System.out.println("下一首播放古典歌曲~");}}//具体歌曲类别:流行publicclassPopularISongimplementsISong{@OverridepublicvoidPlay(){System.out.println("下一首播放流行歌曲~");}}用户操作层:publicstaticvoidmain(String[]args){//用户进行操作IFactoryfactory=newClassicalSongsFactory();//古典工厂这里只需要改变类型,选择权交给了用户生成对应实例ClassicalSongssongs=(ClassicalSongs)factory.CreateSong();songs.Play();}[](https://jq.qq.com/?_wv=1027&k...[](https://jq.qq.com/?_wv=1027&k...工厂模式把实例化哪个工厂的选择判断放到了客户端,保持了简单工厂模式的优点和它克服了缺点,可以不用大改,降低了程序的耦合度,但是每次需要增加一个类型,都需要创建一个product和factory,可以使用反射来解决branch的问题最后祝大家早日有所收获,拿到一份满意的offer,快速升职加薪,走上人生巅峰。如果可以,请给我一份三年的公司,支持我??????【白嫖资讯】
