最近在准备软件工程的复习,顺便把老师之前讲过的设计模式系统的拿出来再整理一下,今天谈论的主要是设计模式中的“工厂模式”
工厂模式的定义
工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类
简单点说就是:如果你去水果店买水果,你只要说出水果的名字,而不用管这水果是具体在哪里哪里生产的,怎么摘下来的等等。这个水果店的运行模式就如同工厂,它只需要提供一个用于创建对象的接口,让子类决定实例化哪一个类。
工厂模式的适用范围
工厂模式适用于以下的三种场合:
1.当一个类不知道它所必须创建的对象的类的时候
2.当一个类希望由它的子类来指定它所创建的对象的时候
3.当将创建对象的职责委托给多个子类中的某一个,并且希望将哪一个子类作为代理者这一信息局部化的时候
(看完这个可能比较懵,可以接着往下看)
参与工厂模式的成员
1.Product(抽象产品):定义工厂方法所创建的对象的接口
2.ConcreateProduct(具体产品):实现Product接口
3.Creator(构造者):声明工厂方法,该方法返回一个Product类型的对象
4.ConcreteCreator(具体构造者):重定义工厂方法以返回一个ConcreteProduct实例
案例的实现(以下均用java代码进行创建)
product
public interface work()
{
void doWork();
}
*
ConcreteProduct*
public class StudentWork implements Work{
public void doWork()
{
System.out.println("学生做作业!'');
}
public void doWork()
{
System.out.println("老师审批作业!");
}
}
Creator
public interface IWorkFactory
{
Work getwork();
}
ConcreteCreator
public class StudentWorkFactory implements IWorkFactory
{
public Work getwork()
{
return new StudentWork();
}
}
public class TeacherWorkFactory implements IWorkFactory
{
public Work getWork()
{
return new TeacherWork();
}
}
***Test**
public class Test
{
public static void main(String[] args)
{
IWorkFactory studentWorkFactory=new StudentWorkFactory();
studentWorkFactory.getwork().doWork();
IWorkFactory teacherWorkFactory=new TeacherWorkFactory();
teacherWorkFactory.getWork().doWork();
}
}
运行
结果:***
学生做作业!
老师审批作业!