设计模式-抽象工厂

本文深入解析抽象工厂模式,探讨其在系统设计中的应用价值。通过具体案例,展示如何利用抽象工厂模式实现产品族的切换与扩展,提高代码的灵活性与可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽象工厂介绍:

抽象工厂为不同产品族的对象创建提供接口。 
使用场景:系统需要在不同产品族进行切换 

在以下情况下可以考虑使用抽象工厂模式:

       (1) 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有类型的工厂模式都是很重要的,用户无须关心对象的创建过程,将对象的创建和使用解耦。

       (2) 系统中有多于一个的产品族,而每次只使用其中某一产品族。可以通过配置文件等方式来使得用户可以动态改变产品族,也可以很方便地增加新的产品族。

       (3) 属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来。同一个产品族中的产品可以是没有任何关系的对象,但是它们都具有一些共同的约束,如同一操作系统下的按钮和文本框,按钮与文本框之间没有直接关系,但它们都是属于某一操作系统的,此时具有一个共同的约束条件:操作系统的类型。

       (4) 产品等级结构稳定,设计完成之后,不会向系统中增加新的产品等级结构或者删除已有的产品等级结构。

代码实现:

1抽象3个接口(Car, Person, Factory):

public abstract class Car {
    public abstract void showCar();
}
public abstract class Person {
    public abstract void showPerson();
}
public interface Factory {
    public Car createCar();
    public Person createPerson();
}

 

2,实现接口类

public class Bike extends Car {
    public void showCar(){
        System.out.println("-----Bike showCar");
    }
}
public class SuvCar extends Car {
    @Override
    public void showCar() {
        System.out.println("-----SuvCar showCar");
    }
}
public class Student extends Person {
    @Override
    public void showPerson(){
        System.out.println("-----Student showPerson");
    }
}
public class Worker extends Person {
    @Override
    public void showPerson(){
        System.out.println("----Worker showPerson");
    }
}

 

3,工厂实现类

public class StudentFactory implements Factory {

    @Override
    public Person createPerson(){
        return new Student();
    }

    @Override
    public Car createCar() {
        return new Bike();
    }
}
public class WorkerFactory implements Factory {

    @Override
    public Person createPerson(){
        return new Worker();
    }

    @Override
    public Car createCar(){
        return new SuvCar();
    }
}

4,测试

public class FactoryMain {

    public static void main(String[] args){
        Factory factory = new StudentFactory();
        Car bCar = factory.createCar();
        Person stu = factory.createPerson();
        bCar.showCar();
        stu.showPerson();

        Factory factory2 = new WorkerFactory();
        Car suv = factory2.createCar();
        Person worker = factory2.createPerson();
        suv.showCar();
        worker.showPerson();
    }
}

结果:

-----Bike showCar
-----Student showPerson
-----SuvCar showCar
----Worker showPerson

 

总结:

1,让具体的创建对象实例和客户端分离

2,便于交换产品系列

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值