这一节就说下工厂模式,实例代码的构建环境是学习雷锋同志的优良品质。
1。学习雷锋好榜样
package com.yjck.factory; /** * 雷锋的优良品质 */ public class LeiFeng { public void sweep(){ System.out.println("扫地"); } public void wash(){ System.out.println("洗衣"); } public void buyRice(){ System.out.println("买米"); } }
2。既然雷锋同志是好同志,那我们就应该进行工厂化作业,大批量生产雷锋
package com.yjck.factory; /** * 工厂类,负责造雷锋 */ public interface IFactory { public LeiFeng createLF(); }
3。雷锋同志本人是位伟大的人民解放军,可是我们学校雷锋的人有好多职业呀,比如学生,社区志愿者等等,那我们就让大学生的车间来生产大学生雷锋,让社区志愿者的车间来生产志愿者雷锋。
package com.yjck.factory; /** * 学习雷锋的大学生工厂 */ public class UndergraduateFactory implements IFactory { /** * 制造学习雷锋的大学生 */ public LeiFeng createLF() { return new Undergraduate(); } }
package com.yjck.factory; public class VolunteerFactory implements IFactory { /** * 制造学习雷锋的社区志愿者 */ public LeiFeng createLF() { return new Volunteer(); } }
4。工厂都有了,该我们生产的雷锋同志出来了
package com.yjck.factory; /** * 学习雷锋的大学生 */ public class Undergraduate extends LeiFeng { } package com.yjck.factory; /** * 学习雷锋的社区志愿者 */ public class Volunteer extends LeiFeng { }
5。start
package com.yjck.factory; public class Run { /** * 工厂模式的客户端 */ public static void main(String[] args) { /** * 工厂先生产一个造大学生的工厂, */ IFactory factory = new UndergraduateFactory(); /** * 大学生工厂制造一个学习雷锋的大学生 */ LeiFeng student = factory.createLF(); student.buyRice(); student.wash(); student.sweep(); } /** * *****以下是对工厂模式的认识****** * 和简单工厂模式相比,工厂模式的改进主要有以下几个方面 * 1。将实例化对象的时间推后, * 2。实现了扩展开放,修改关闭原则,原来在简单工厂模式中,我们不但 * 要增加具体的实现类,还要在工厂方法里修改new的过程,现在,只需要 * 创建实现类,和该实现类的生产工厂。 * 这样的改写的缺点在于多出了一个生产工厂,没增加一个类型的实现类,就要 * 增加一个生产这个类型的工厂 */ }