zoukankan      html  css  js  c++  java
  • 大话设计模式读书 笔记(六) 工厂方法模式

    工厂方法模式(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();
    	}
    }

    总结:

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


  • 相关阅读:
    仿苹果菜单的效果
    不用系统自带的复选框,单选按钮,选择框的样式,该怎么做
    js面向对象(三)---组件开发
    JS面向对象(二)---继承
    js面向对象(一)---基本的概念、属性、方法
    移动端新建html页面
    《程序员思维修炼》读后摘录
    做一个简单的贪吃蛇游戏
    做一个简单的遮罩层
    在不同设备上控制元素
  • 原文地址:https://www.cnblogs.com/xsyfl/p/6842516.html
Copyright © 2011-2022 走看看