• 大话设计模式读书 笔记(六) 工厂方法模式


    工厂方法模式(Factory Method)

    书中通过一个学雷锋的例子,来引出工厂方法模式。
    工厂方法模式:定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

    工厂方法模式UMl类图:




    工厂方法模式代码:

    public abstract class LeiFeng { //要创建的对象的接口,这里因为要创建的对象的三个方法相同,所以我定义了一个抽象类,而没有定义接口
    	public void Sweep() {
    		System.out.println("扫地");
    	}
    	
    	public void wash(){
    		System.out.println("洗衣");
    	}
    	
    	public void buyRice(){
    		System.out.println("买米");
    	}
    }
    
    public class Student extends LeiFeng{//具体要实例化的对象---学生类
    	
    }
    
    public class Volunteer extends LeiFeng{//具体要实例化的对象--社区员工类
    
    }
    
    学生和社区员工都要学习雷锋,来帮助老人扫地,洗衣,买米。

    public interface IFactory {//用来创建实例化对象的接口
    	public LeiFeng createLerfent();//该方法返回一个具体的实例化对象,也就是具体学雷锋的对象
    }
    
    public class StudentFactory implements IFactory{//用来实例化具体对象的工厂方法类--该类用来实例化学生对象
    	@Override
    	public LeiFeng createLerfent() {//创建学雷锋对象方法,返回的是一个学生对象
    		LeiFeng student =new Student();
    		return student;
    	}
    }
    public class VolunteerFactory implements IFactory{//用来实例化具体对象的工厂方法类--该类用来实例化社区员工的对象
    
    	@Override
    	public LeiFeng createLerfent() {//创建学雷锋对象方法,返回的是一个社区员工对象
    		LeiFeng volunteer =new Volunteer();
    		return volunteer;
    	}
    }

    客户端主方法
    public class Main {
    	public static void main(String[] args) {
    		IFactory factory = new StudentFactory();//当需要创建社区员工时,只需要修改这里就可以了
    		LeiFeng xueLeiFeng = factory.createLerfent();
    		xueLeiFeng .Sweep();
    		xueLeiFeng .wash();
    		xueLeiFeng .buyRice();
    	}
    }

    总结:

     工厂方法模式遵循了开放-封闭原则,其实它是将判断工作转移到了客户端调用之处,这样保证了工厂体系的完整性。而简单工厂模式需要在工厂类里来判断选择哪个类。


  • 相关阅读:
    用socket方式传输Image和Sound文件
    maven常用构建命令
    文件大小转换成可显示的Mb,Gb和kb方法
    关于<img>标签与文字垂直居中
    socket编程---一个简单例子
    Java实现RC4加解密
    build path功能详解
    struts2中改变struts.xml默认路径
    OpenSessionInViewFilter 的配置及作用
    web.xml元素介绍
  • 原文地址:https://www.cnblogs.com/xsyfl/p/6842516.html
Copyright © 2020-2023  润新知