概要,工厂模式一般包含 【简单工厂】、【静态工厂-即单例模式】、【抽象工厂】、【工厂方法】
形容词用接口,名词用抽象类
一、简单工厂
可以定制各种交通工具,定制交通工具创建过程,比方定义一个car的简单工厂
交通工具接口
package com.longze.guosh.factory;
//交通工具接口
public interface Moveable {
void go();
}
car对象
package com.longze.guosh.factory;
//car对象
public class Car implements Moveable{
@Override
public void go(){
System.out.println("car sosososososo---");
}
}
carFactory工厂
package com.longze.guosh.factory;
//car工厂
public class CarFactory {
public Moveable createCar(){
System.out.println("生产一辆车");
return new Car();
}
}
Main方法
package com.longze.guosh.factory;
//Main校验简单工厂
public class Main {
public static void main(String[] args) {
Moveable m=new CarFactory().createCar();
m.go();
}
}
简单工厂:比较容易在工厂维度进行扩展
抽象工厂:比较方便在产品上进行扩展(支持各种方法,吃穿住行)
二、抽象工厂
1、抽象工厂
package com.longze.guosh.abstractFactory;
/**
* 抽象工厂
*/
public abstract class AbstractFactory {
abstract Food createFood();
abstract Vehicle createVehicle();
abstract Weapon createWeapon();
}
Food抽象类
package com.longze.guosh.abstractFactory;
public abstract class Food {
abstract void printName();
}
Vehicle抽象类
package com.longze.guosh.abstractFactory;
public abstract class Vehicle {
abstract void go();
}
Weapon抽象类
package com.longze.guosh.abstractFactory;
public abstract class Weapon {
abstract void shoot();
}
2、实体工厂
package com.longze.guosh.abstractFactory;
//魔法家族实体工厂
public class MagicFactory extends AbstractFactory{
@Override
Food createFood() {
return new MushRoom();
}
@Override
Vehicle createVehicle() {
return new Broom();
}
@Override
Weapon createWeapon() {
return new MagicStick();
}
}
package com.longze.guosh.abstractFactory;
/**
* 现代人工厂
*/
public class ModernFactory extends AbstractFactory{
@Override
Food createFood() {
return new Bread();
}
@Override
Vehicle createVehicle() {
return new Car();
}
@Override
Weapon createWeapon() {
return new AK47();
}
}
实体类
package com.longze.guosh.abstractFactory;
//食物-现代人
public class Bread extends Food{
public void printName(){
System.out.println("wdm");
}
}
package com.longze.guosh.abstractFactory;
//食物-魔法家族
public class MushRoom extends Food{
public void printName(){
System.out.println("毒蘑菇。。。。。。");
}
}
package com.longze.guosh.abstractFactory;
//交通-现代人
public class Car extends Vehicle{
public void go(){
System.out.println("Car wuwuwuwu-----");
}
}
package com.longze.guosh.abstractFactory;
//交通-魔法家族
public class Broom extends Vehicle{
public void go(){
System.out.println("飞天笤竺-----");
}
}
package com.longze.guosh.abstractFactory;
//武器-现代人
public class AK47 extends Weapon{
public void shoot(){
System.out.println("开枪 dududududu.....");
}
}
package com.longze.guosh.abstractFactory;
//武器-魔法家族
public class MagicStick extends Weapon{
public void shoot(){
System.out.println("bianbianbian.....");
}
}
3、Main方法
package com.longze.guosh.abstractFactory;
//抽象工厂
public class Main {
public static void main(String[] args) {
AbstractFactory r=new ModernFactory();
Vehicle c=r.createVehicle();
c.go();
Weapon w=r.createWeapon();
w.shoot();
Food f=r.createFood();
f.printName();
}
}
抽象工厂拓扑图
抽象工厂和简单工厂比较
简单工厂,相当于只有一个产品的抽象工厂,较容易在工厂层级自由扩展。产品层级无法自由扩展方法。
抽象工厂,有多种产品,比较容易在产品层级进行扩展,不方便在工厂层级自由扩展,需要加很多方法。
Git地址:https://gitee.com/feng-qingxuan/dessign-pattrns.git factory 和 abstractfactory
以上结束!!
荆轲刺秦王