工厂模式
工厂模式包括:简单工厂,工厂方法,抽象工厂模式。
简单工厂 | 工厂方法 | 抽象工厂 | |
---|---|---|---|
生产产品 | 由传入工厂的参数选择 | 由具体的工厂创建 | 由对应的产品族工厂创建 |
增加产品 | 修改工厂方法 | 增加工厂实现类与产品实现类 | 增加工厂实现类与产品族下所有产品实现类 |
简单工厂
简单工厂通过传入制造产品方法的参数来选择生成的不同产品。
工厂类
public class EasyFactory{
public Product createProduct(int code){
if(code==1) {
return new Product1();
} else if(code==2) {
return new Product2();
} else {
return null;
}
}
}
产品类
//产品抽象类
public abstract class Product{
public abstract void process();//产品使用的方法
}
//产品实现类
class Product1 extends Product{
@Override
public void process() {
System.out.print("产品1在执行");
}
}
-------------------------------------
class Product2 extends Product{
@Override
public void process() {
System.out.print("产品2在执行");
}
}
测试类
public class Test {
public static void main(String[] args) {
EasyFactory easyFactory=new EasyFactory();
Product product=easyFactory.createProduct(1);
product.process();
}
}
工厂方法
工厂方法模式通过选择工厂的具体实现类来 选择生成的产品。
工厂类
//工厂抽象类
public abstract class VideoFactory{
public abstract Video getvideo();
}
//工厂实现类
public class JavaVideoFactory extends VideoFactory{
@Override
public Video getvideo() {
return new JavaVideo();
}
}
-------------------------------------
public class PythonVideoFactory extends VideoFactory{
@Override
public Video getvideo() {
return new PythonVideo();
}
}
产品类
//产品抽象类
public abstract class Video{
public abstract void produce();
}
//产品实现类
public class JavaVideo extends Video{
@Override
public void produce() {
System.out.println("java视频");
}
}
------------------------------------
public class PythonVideo extends Video{
@Override
public void produce() {
System.out.println("python视频");
}
}
测试类
public class Test{
public static void main(String[] args){
VideoFactory videoFactory=new JavaVideoFactory();
Video video=videoFactory.getvideo();
video.produce();
}
}
抽象工厂
抽象工厂方法通过选择具体的抽象工厂实现类来选择生成具体产品族的任何产品(产品族可以想象成品牌)。
工厂类
//工厂抽象类
public abstract class AbstractFactory {
public abstract Book makeBook();
public abstract Note makeNote();
}
//工厂实现类
public class TimFactory extends AbstractFactory {
@Override
public Book makeBook() { return new TimBook(); }
@Override
public Note makeNote() { return new TimNote(); }
}
--------------------------------------------
public class TomFactory extends AbstractFactory {
@Override
public Book makeBook() { return new TomBook(); }
@Override
public Note makeNote() { return new TomNote(); }
}
产品类
//产品抽象类
public abstract class Book {
public abstract void read();
}
------------------------------
public abstract class Note {
public abstract void write();
}
//产品实现类
class TimBook extends Book {
@Override
public void read() {
System.out.println("这是Tim品牌的书");
}
}
class TomBook extends Book {
@Override
public void read() {
System.out.println("这本书是tom品牌的");
}
}
-------------------------------
class TimNote extends Note {
@Override
public void write() {
System.out.println("这是Tim品牌的笔记本");
}
}
class TomNote extends Note {
@Override
public void write() {
System.out.println("这本笔记本是TOM品牌的");
}
}
测试类
class Test {
public static void main(String[] args) {
AbstractFactory abstractFactory=new TomFactory();
Book book=abstractFactory.makeBook();
Note note=abstractFactory.makeNote();
book.read();
note.write();
}
}
rgs) {
AbstractFactory abstractFactory=new TomFactory();
Book book=abstractFactory.makeBook();
Note note=abstractFactory.makeNote();
book.read();
note.write();
}
}