工厂模式 factory
任意定制交通工具
以下存在3种交通工具
//魔法世界的扫把
public class Broom implements MoveAble{
@Override
public void go() {
System.out.println("扫把可以飞====>");
}
}
//现实世界的车
public class Car implements MoveAble {
@Override
public void go() {
System.out.println("Car go wuwuwuwuuwuwuwu.......");
}
}
//天上飞的飞机
public class Plane implements MoveAble {
@Override
public void go() {
System.out.println("飞机===>嗖嗖嗖嗖");
}
}
他们都有一个相同的
go()
方法 可以将其抽象出一个父类其他子类集成
public interface MoveAble {
public void go();
}
任意定制生产过程
使用工厂模式 抽象出交通工具工厂,每次创建调用一个
create()
/**
* 简单工厂的可扩展性不好,每次添加一个工具需要加一个方法
* 交通工具的工厂
*/
public class SimpleVehicleFactory {
public Car creatCar(){
//前置操作
return new Car();
}
public Broom creatBroom(){
//前置操作
return new Broom();
}
}
也可以单独为车抽象一个车的工厂
/**
* car工厂
*/
public class CarFactory {
/**
* 创造汽车
* 此处返回父类更加理想
*
* @return {@link MoveAble}
*/
public MoveAble creat(){
System.out.println("这个Car被创建出来了!");
//前置操作
return new Car();
}
}
测试方法
public class FactoryMain {
public static void main(String[] args) {
Car car = new Car();
car.go();
//可以灵活指定他的交通工具,今天开车明天开飞机
Plane plane = new Plane();
plane.go();
MoveAble broom = new Broom();
broom.go();
CarFactory carFactory = new CarFactory();
Car carF = (Car) carFactory.creat();
carF.go();
}
}
抽象工厂
任意定制产品族
名称用抽象类,形容词用接口 此处需要使用抽象工厂
定义AbstractFactory
类
public abstract class AbstractFactory {
public abstract Food createFood();
public abstract Vehicle createVehicle();
public abstract Weapon createWeapon();
}
定义抽象产品1
public abstract class Food {
public abstract void printName();
}
定义抽象产品2
public abstract class Vehicle {
public abstract void go();
}
定义抽象产品3
public abstract class Weapon {
abstract public void shoot();
}
定义产品族(现代人)
继承抽象工厂
public class ModernFactory extends AbstractFactory {
@Override
public Food createFood() {
return new Bread();
}
@Override
public Vehicle createVehicle() {
return new Car();
}
@Override
public Weapon createWeapon() {
return new AK47();
}
}
定义真实产品1集成对应抽象产品
public class AK47 extends Weapon {
@Override
public void shoot() {
System.out.println("突突突突");
}
}
定义真实产品2集成对应抽象产品
public class Bread extends Food {
@Override
public void printName() {
System.out.println("wdm");
}
}
定义真实产品3集成对应抽象产品
public class Car extends Vehicle {
@Override
public void go() {
System.out.println("Car go wuwuwuwuuwuwuwu.......");
}
}
定义产品族(魔法世界人)
继承抽象工厂
public class MagicFactory extends AbstractFactory {
@Override
public Food createFood() {
return new MushRoom();
}
@Override
public Vehicle createVehicle() {
return new Broom();
}
@Override
public Weapon createWeapon() {
return new MgicStidk();
}
}
定义真实产品1集成对应抽象产品
public class Broom extends Vehicle {
@Override
public void go() {
System.out.println("扫把可以飞====>");
}
}
定义真实产品2集成对应抽象产品
public class MgicStidk extends Weapon {
@Override
public void shoot(){
System.out.println("点点");
}
}
定义真实产品3集成对应抽象产品
public class MushRoom extends Food {
@Override
public void printName(){
System.out.println("吃蘑菇");
}
}
评论区