简单工厂模式的最大优点在于工厂类中包含了必要逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类的,而现在是修改客户端。
/** * 雷锋类,拥有扫地、洗衣、买米 * @author Administrator * */ public class LeiFeng { public void Sweep() { System.out.println("扫地"); } public void Wash() { System.out.println("洗衣"); } public void BuyRice() { System.out.println("买米"); } public static void main(String[] args) { IFactory factory = new UndergraduateFactory(); LeiFeng student = factory.CreateLeiFeng(); student.BuyRice(); student.Sweep(); student.Wash(); } } class Undergraduate extends LeiFeng { } class Volunteer extends LeiFeng { }
/** * 构建工厂接口:雷锋工厂 * @author Administrator * */ interface IFactory { LeiFeng CreateLeiFeng(); } /** * 学雷锋的大学生工厂 * @author Administrator * */ class UndergraduateFactory implements IFactory { @Override public LeiFeng CreateLeiFeng() { return new Undergraduate(); } } /** * 社区志愿者工厂 * @author Administrator * */ class VolunteerFactory implements IFactory { @Override public LeiFeng CreateLeiFeng() { return new Volunteer(); } }
调用方法:
public static void main(String[] args) { IFactory factory = new UndergraduateFactory(); LeiFeng student = factory.CreateLeiFeng(); student.BuyRice(); student.Sweep(); student.Wash(); }
工厂方法模式是简单工厂模式的进一步抽象和推广
时间: 2024-11-05 01:06:49