工厂方法模式
Last updated
Last updated
package factorymethod
type Video interface {
produce()
}package factorymethod
type VideoFactory interface {
getVideo() Video
}package factorymethod
import "fmt"
type JavaVideo struct {
}
func (j JavaVideo) produce() {
fmt.Println("produce java")
}package factorymethod
type JavaFactory struct {
}
func NewJavaFactory() *JavaFactory {
return &JavaFactory{}
}
func (j JavaFactory) getVideo() Video {
return JavaVideo{}
}package factorymethod
import "fmt"
type PythonVideo struct {
}
func (PythonVideo) produce() {
fmt.Println("produce python")
}package factorymethod
type PythonFactory struct {
}
func NewPythonFactory() *PythonFactory {
return &PythonFactory{}
}
func (PythonFactory) getVideo() Video {
return PythonVideo{}
}package factorymethod
import "testing"
func TestGetVideo(t *testing.T) {
videoFactory := NewJavaFactory()
videoFactory.getVideo().produce()
videoFactory2 := NewPythonFactory()
videoFactory2.getVideo().produce()
}package tech.selinux.design.pattern.creational.factorymethod;
public abstract class Video {
public abstract void produce();
}package tech.selinux.design.pattern.creational.factorymethod;
public abstract class VideoFactory {
public abstract Video getVideo();
}package tech.selinux.design.pattern.creational.factorymethod;
public class JavaVideo extends Video {
@Override
public void produce() {
System.out.println("Java Produce");
}
}package tech.selinux.design.pattern.creational.factorymethod;
public class JavaVideoFactory extends VideoFactory {
@Override
public Video getVideo() {
return new JavaVideo();
}
}package tech.selinux.design.pattern.creational.factorymethod;
public class PythonVideo extends Video {
@Override
public void produce() {
System.out.println("Python produce");
}
}package tech.selinux.design.pattern.creational.factorymethod;
public class PythonVideoFactory extends VideoFactory {
@Override
public Video getVideo() {
return new PythonVideo();
}
}package tech.selinux.design.pattern.creational.factorymethod;
public class Test {
public static void main(String[] args) {
VideoFactory videoFactory = new PythonVideoFactory();
VideoFactory videoFactory2 = new JavaVideoFactory();
Video video = videoFactory.getVideo();
video.produce();
}
}