Factory Pattern
Factory pattern comprising: a simple factory, factory method, abstract factory model.
Article Directory
Simple Factory | Factory Method | Abstract Factory | |
---|---|---|---|
product | Selected by the parameter passed in the factory | Created by the specific plant | Created by the corresponding product family factory |
Increase product | Modify the factory method | Increased factory implementation class and implementation class product | All products increase factory implementation implementation class and lower class product family |
Simple Factory
Simple factory to select different products generated by the manufacture method of passing parameters.
Factory class
public class EasyFactory{
public Product createProduct(int code){
if(code==1) {
return new Product1();
} else if(code==2) {
return new Product2();
} else {
return null;
}
}
}
Product categories
//产品抽象类
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在执行");
}
}
Test category
public class Test {
public static void main(String[] args) {
EasyFactory easyFactory=new EasyFactory();
Product product=easyFactory.createProduct(1);
product.process();
}
}
Factory Method
Factory method mode is selected by selecting the resulting product factory implementation class.
Factory class
//工厂抽象类
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();
}
}
Product categories
//产品抽象类
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视频");
}
}
Test category
public class Test{
public static void main(String[] args){
VideoFactory videoFactory=new JavaVideoFactory();
Video video=videoFactory.getvideo();
video.produce();
}
}
Abstract Factory
Selecting any product family specific product generated abstract factory method implemented by selecting specific class abstract factory (product family could conceivably brand).
Factory class
//工厂抽象类
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(); }
}
Product categories
//产品抽象类
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品牌的");
}
}
Test category
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();
}
}