简单工厂(静态工厂)(简单、常用。但不符合开闭原则)
工厂方法(符合开闭原则,但是结构复杂,不利于维护)
抽象工厂
一、noFactory
不使用工厂创建对象
I:Car
C:Audi --i-- Car
C:Byd --i–Car
C:Driver
I:Car
public interface Car {
void run();
}
C:Audi
public class Audi implements Car{
@Override
public void run() {
System.out.println("Audi is running!");
}
}
C:Byd
public class Byd implements Car{
@Override
public void run() {
System.out.println("Byd is running!");
}
}
C:Driver
public class Driver {
public static void main(String[] args) {
Car audi = new Audi();
Car byd = new Byd();
audi.run();
byd.run();
}
}
二、simpleFactory
使用简单工厂创建对象
I:Car
C:Audi --i-- Car
C:Byd --i–Car
C:SimpleFactory
C:Driver
C:SimpleFactory
public class SimpleFactory {
public static Car createCar(String type) {
if ("Audi".equals(type)) {
return new Audi();
} else if ("Byd".equals(type)){
return new Byd();
} else {
return null;
}
}
public static Audi createAudi(){
return new Audi();
}
public static Byd createByd(){
return new Byd();
}
}
C:Driver
public class Driver {
public static void main(String[] args) {
//SimpleFactory 1
Car audi = SimpleFactory.createCar("Audi");
Car byd = SimpleFactory.createCar("Byd");
audi.run();
byd.run();
//SimpleFactory 2
Car audi1 = SimpleFactory.createAudi();
Car byd1 = SimpleFactory.createByd();
audi.run();
byd.run();
}
}
三、methodFactory
I: Car
C: Audi --i-- Car
C: Byd --i–Car
I: CarFactory
C: AudiFactory --i-- CarFactory
C: BydFactory --i-- CarFactory
C: Driver
I: CarFactory
public interface CarFactory {
Car createCar();
}
C: AudiFactory --i-- CarFactory
public class AudiFactory implements CarFactory{
@Override
public Car createCar() {
return new Audi();
}
}
C: BydFactory --i-- CarFactory
public class BydFactory implements CarFactory{
@Override
public Car createCar() {
return new Byd();
}
}
C: Driver
public class Driver {
public static void main(String[] args) {
Car audi = new AudiFactory().createCar();
Car byd = new BydFactory().createCar();
audi.run();
byd.run();
}
}
创建Car接口下的不同子类(单个产品):简单工厂、工厂方法
创建多个接口下的不同子类(产品族):抽象工厂
四、abstractFactory
I: Engine
C: LuxuryEngine --i-- Engine
C: LowEngine --i–Engine
I: Seat
C: LuxurySeat --i-- Seat
C: LowSeat --i–Seat
I: Tyre
C: LuxuryTpre --i-- Tyre
C: LowTpre --i-- Tyre
I: CarFactory
C: LuxuryCarFactory --i-- CarFactory
C: LowCarFactory --i-- CarFactory
C: Driver
I: Engine
C: LuxuryEngine --i-- Engine
C: LowEngine --i–Engine
public interface Engine {
void run();
void start();
}
class LuxuryEngine implements Engine{
@Override
public void run() {
System.out.println("LuxuryEngine 转速高!");
}
@Override
public void start() {
System.out.println("LuxuryEngine 启动快!");
}
}
class LowEngine implements Engine{
@Override
public void run() {
System.out.println("LowEngine 转速低!");
}
@Override
public void start() {
System.out.println("LowEngine 启动慢!");
}
}
I: Seat
C: LuxurySeat --i-- Seat
C: LowSeat --i–Seat
public interface Seat {
void massage();
}
class LuxurySeat implements Seat {
@Override
public void massage() {
System.out.println("LuxurySeat 可以按摩!");
}
}
class LowSeat implements Seat {
@Override
public void massage() {
System.out.println("LowSeat 不能按摩!");
}
}
I: Tyre
C: LuxuryTpre --i-- Tyre
C: LowTpre --i-- Tyre
public interface Tyre {
void revolve();
}
class LuxuryTpre implements Tyre{
@Override
public void revolve() {
System.out.println("LuxuryTpre 轮胎很耐磨!");
}
}
class LowTpre implements Tyre {
@Override
public void revolve() {
System.out.println("LowTpre 轮胎不耐磨!");
}
}
I: CarFactory
public interface CarFactory {
Engine createEngine();
Tyre createTyre();
Seat createSeat();
}
C: LuxuryCarFactory --i-- CarFactory
public class LuxuryCarFactory implements CarFactory{
@Override
public Engine createEngine() {
return new LuxuryEngine();
}
@Override
public Tyre createTyre() {
return new LuxuryTpre();
}
@Override
public Seat createSeat() {
return new LuxurySeat();
}
}
C: LowCarFactory --i-- CarFactory
public class LowCarFactory implements CarFactory{
@Override
public Engine createEngine() {
return new LowEngine();
}
@Override
public Tyre createTyre() {
return new LowTpre();
}
@Override
public Seat createSeat() {
return new LowSeat();
}
}
C: Driver
public class Driver {
public static void main(String[] args) {
LuxuryCarFactory lcf = new LuxuryCarFactory();
lcf.createEngine().run();
lcf.createEngine().start();
lcf.createTyre().revolve();
lcf.createSeat().massage();
}
}
以上代码示例,根据视频整理出来
更多推荐
工厂模式简记
发布评论