java设计模式(工厂模式)
核心作用:
实现了创建者和调用者的分离
针对产品:
1.简单工厂(虽未完全满足开闭原则,但是只创建一个工厂类,易维护,而且是静态类,客户端无需再实例化,一般就用这个)
2.工厂方法(满足开闭原则,但是创建大量类,不易维护,很少使用)
针对产品族:
3.抽象工厂
1.我们要创建一个单一产品就用(简单工厂或者是工厂方法):
interface Car{
void run();
}
class Benz implements Car{
@Override
public void run() {
System.out.println(" Benz running!");
}
}
class Audi implements Car{
@Override
public void run() {
System.out.println(" Audi running!");
}
}
- 简单(静态)工厂模式:
//创建车工厂
public class CarFactory {
public static final int CAR_BENZ = 1;
public static final int CAR_AUDI = 2;
public static Car createCar(int type) {
switch (type) {
case CAR_BENZ:
return new Benz();
case CAR_AUDI:
default:
return new Audi();
}
}
}
//客户端调用
public class Client{
public static void main(String[] args) {
Car car=CarFactory.createCar(CarFactory.CAR_BENZ);
car.run();
}
}
- 工厂方法模式
interface CarFactory {
Car createCar();
}
class AudiFctory implements CarFactory{
@Override
public Car createCar() {
return new Audi();
}
}
class BenzFctory implements CarFactory{
@Override
public Car createCar() {
return new Benz();
}
}
//客户端调用
public class 客户端调用{
public static void main(String[] args) {
Car car=new AudiFctory().createCar();
car.run();
}
}
2.我们要创建一个产品族(比如奔驰的上的发动机、座椅等)就用(抽象工厂):
interface Engine{
void run();
}
class HighEngine implements Engine{
@Override
public void run() {
System.out.println(" 跑得快 ");
}
}
class LowEngine implements Engine{
@Override
public void run() {
System.out.println(" 跑得慢 ");
}
}
interface Seat{
void sit();
}
class HighSeat implements Seat{
@Override
public void sit() {
System.out.println(" 舒服 !");
}
}
class LowSeat implements Seat{
@Override
public void sit() {
System.out.println(" 不爽!");
}
}
- 抽象工厂:
interface CarFactory {
Engine createEngine();
Seat createSeat();
}
//为奔驰工厂生产配件
class BenzFactory implements CarFactory{
@Override
public Engine createEngine() {
return new HighEngine();
}
@Override
public Seat createSeat() {
return new HighSeat();
}
}
//为比亚迪工厂生产配件
class BYDFactory implements CarFactory{
@Override
public Engine createEngine() {
return new LowEngine();
}
@Override
public Seat createSeat() {
return new LowSeat();
}
}
客户端:
public class Test1 {
public static void main(String[] args) {
CarFactory carFactory=new BenzFactory();
Engine engine=carFactory.createEngine();
engine.run();
Seat seat=carFactory.createSeat();
seat.sit();
}
}