工厂
总结工厂模式的主要特点:
1、封装了对象的创建
2、降低了代码的耦合性
3、提高了扩展性
自我思考:
1、对于客户端(使用者)来说,只需要参入不同参数调用方法即可,代码解耦较高
2、接口中有不同方法,而在抽象类工厂方法已经定好具体实现的功能
1)优点:方便统一管理,执行流程无需关心,只需要实现具体的功能方法即可。
2)缺点:由于执行流程功能C已经定好,缺少了一部分灵活性,无法添加一些特性方 法
比如在某产品在原有流程上进行添加其他方法,将会遇到困难
工厂方法与抽象工厂主要区别
工厂方法模式更注重于单一产品的创建,而抽象工厂模式更注重于一系列相关产品的创建。抽象工厂模式提供了更好的灵活性和可扩展性,但同时也增加了代码的复杂性。
举例代码:
interface Chair {
void sit();
}
interface Table {
void putThings();
}
工厂方法示例
Product
package io.binghe.design.factotymethod;
/**
* 定义一个接口Work
* @author binghe
*/
public interface Work {
/**
* 定义方法
*/
void doWork();
}
ConcreteProduct
package io.binghe.design.factotymethod;
/**
* Work接口的具体实现类
* @author binghe
*/
public class TeacherWork implements Work {
public void doWork() {
System.out.println("老师审批作业!");
}
}
package io.binghe.design.factotymethod;
/**
* Work接口的具体实现类
* @author binghe
*/
public class StudentWork implements Work {
@Override
public void doWork() {
System.out.println("学生做作业!");
}
}
Creator
package io.binghe.design.factotymethod;
/**
* 抽象工厂接口
* @author binghe
*/
public interface IWorkFactory {
/**
* 定义获取Work实例对象的方法
* @return
*/
Work getWork();
}
ConcreteCreator
package io.binghe.design.factotymethod;
/**
* IWorkFactory工厂的实现类
* @author binghe
*/
public class StudentWorkFactory implements IWorkFactory {
@Override
public Work getWork() {
return new StudentWork();
}
}
package io.binghe.design.factotymethod;
/**
* IWorkFactory工厂的实现类
* @author binghe
*/
public class TeacherWorkFactory implements IWorkFactory {
@Override
public Work getWork() {
return new TeacherWork();
}
}
Test
package io.binghe.design.factotymethod;
/**
* 测试类
* @author binghe
*/
public class Test {
public static void main(String[] args) {
IWorkFactory studentWorkFactory = new StudentWorkFactory();
studentWorkFactory.getWork().doWork();
IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
teacherWorkFactory.getWork().doWork();
}
}