首页 > 代码库 > 学习大话设计模式08_工厂方法模式
学习大话设计模式08_工厂方法模式
简单工厂模式的最大优点在于工厂类中包含了必要逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类的,而现在是修改客户端。
/** * 雷锋类,拥有扫地、洗衣、买米 * @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(); }
工厂方法模式是简单工厂模式的进一步抽象和推广
学习大话设计模式08_工厂方法模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。