工厂模式分为简单工厂,抽象工厂和工厂方法
1.简单工产:
public class Factory {
Product1 p1 = new Product1();
Product2 p2 = new Product2();
public AbstractProduct CreatProduct1(){
return p1;
}
public AbstractProduct CreatProduct2(){
return p2;
}
}
public class AbstractProduct {
public void work(){}
}
public class Product1 extends AbstractProduct{
@Override
public void work() {
System.out.println("1在打字");
}
}
public class Product2 extends AbstractProduct{
@Override
public void work() {
System.out.println("2在画图");
}
}
public class Client {
public static void main(String[] args) {
Factory factory = new Factory();
AbstractProduct p1 = factory.CreatProduct1();
p1.work();
AbstractProduct p2 = factory.CreatProduct2();
p2.work();
}
}
uml类图:
2.抽象工厂:
public interface AbstractFactory {
public AbstractProduct CreatProduct();
}
public class AbstractProduct {
public void work(){}
}
public class Product1 extends AbstractProduct{
@Override
public void work() {
System.out.println("1在打字");
}
}
public class Product2 extends AbstractProduct{
@Override
public void work() {
System.out.println("2在画图");
}
}
public class ConcreteFactory1 implements AbstractFactory {
Product1 p1 = new Product1();
@Override
public AbstractProduct CreatProduct() {
return p1;
}
}
public class ConcreteFactory2 implements AbstractFactory {
Product2 p2 = new Product2();
@Override
public AbstractProduct CreatProduct() {
return p2;
}
}
public class Client {
public static void main(String[] args) {
ConcreteFactory1 factory1 = new ConcreteFactory1();
ConcreteFactory2 factory2 = new ConcreteFactory2();
AbstractProduct p1 = factory1.CreatProduct();
AbstractProduct p2 = factory2.CreatProduct();
p1.work();
p2.work();
}
}
uml类图:
3.工产方法:
public interface AbstractFactory {
public AbstractProductA CreatProductA();
public AbstractProductB CreatProductB();
}
public class ConcreteFactory1 implements AbstractFactory{
AbstractProductA factoryA1 = new ProductA1();
AbstractProductB factoryB1 = new ProductB1();
@Override
public AbstractProductA CreatProductA() {
return factoryA1;
}
@Override
public AbstractProductB CreatProductB() {
return factoryB1;
}
}
public class ConcreteFactory2 implements AbstractFactory{
AbstractProductA factoryA2 = new ProductA2();
AbstractProductB factoryB2 = new ProductB2();
@Override
public AbstractProductA CreatProductA() {
return factoryA2;
}
@Override
public AbstractProductB CreatProductB() {
return factoryB2;
}
}
public class AbstractProductA {
public void workA(){}
}
public class ProductA1 extends AbstractProductA{
@Override
public void workA() {
System.out.println("A1在打字");
}
}
public class ProductA2 extends AbstractProductA{
@Override
public void workA() {
System.out.println("A2在敲代码");
}
}
public class AbstractProductB {
public void workB(){}
}
public class ProductB1 extends AbstractProductB {
@Override
public void workB() {
System.out.println("B1在浇树");
}
}
public class ProductB2 extends AbstractProductB {
@Override
public void workB() {
System.out.println("B2在浇花");
}
}
public class Client {
public static void main(String[] args) {
ConcreteFactory1 factory1 = new ConcreteFactory1();
ConcreteFactory2 factory2 = new ConcreteFactory2();
AbstractProductA productA1 = factory1.CreatProductA();
AbstractProductA productA2 = factory2.CreatProductA();
AbstractProductB productB1 = factory1.CreatProductB();
AbstractProductB productB2 = factory2.CreatProductB();
productA1.workA();
productA2.workA();
productB1.workB();
productB2.workB();
}
}
uml类图:
所有的类图和代码都是最简单直接的展现,适合初学者用来理解设计模式