设计模式-工厂设计模式

本文详细介绍了工厂设计模式的三种基本形态:简单工厂、工厂方法和抽象工厂。简单工厂通过静态方法根据参数创建实现同一接口的实例,但不便于扩展。工厂方法将生产职责分配给各个具体的工厂,降低了耦合。抽象工厂则关注于创建一系列相关或依赖的产品,提供了一种分类管理的机制。工厂设计模式的主要目的是解耦合,使得开发者无需直接创建对象,从而简化代码维护。

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

1.目标

用于实例化有共同接口的类,由工厂模式动态去实例化所需要的类

三种基本形态:

1.简单工厂

2.工厂方法

3.抽象工厂

 

2.简单工厂

存在一个静态方法用于接收参数,根据传入的参数去返回实现同一接口不同类的某个类的实例

// 产品接口

public interface product{}

// 产品实现同一接口

pubic class washer implements product{
    public washer(){
        //打印  生产一台洗衣机
}
}

// public class icebox implements product{
        public icebox(){
            // 打印 生产一台冰箱
}

}

public class SimpleFactory{

    public static product factory(String name){
            if("washer".qruals(name)){
                return new washer();

             else ....
}

}

简单工厂是由工厂根据给出的信息,去创建所需的对象

但简单工厂无法满足产品增加的需求,增加产品就需要对工厂类老代码进行更改

2.工厂方法

为工厂类定义接口,产生生产不同产品的实现同一接口的不同工厂

把生产某种产品的功能放到产品对应的工厂中,去削弱工厂职能

类似于酒厂接口,酒厂下细分红酒厂,白酒厂,啤酒厂,每个厂生产对应的产品

// 同简单工厂一样

1.编写抽象产品接口

2.具体的产品类

// 工厂接口

public interface Factory{
    public product create();
}


// 生产洗衣机的工厂
public class WasherFac implements Factory{
     public product create(){
        return new Washer();
}

public class IceboxFac implements Factory{
     public product create(){
        return new Icebox();
}

// 有具体的工厂类产生对应的产品
当使用时通过直接new 某个产品的工厂,然后生产该产品即可

3.抽象工厂

含义:用于创建一系列相互关联或相互依赖

扩展的说明:抽象工厂在工厂方法的基础上引入了分类管理,抽象工厂用于创建一系列的产品

示例

这里我们用手机的生产举例,手机简单分为CPU和SCREEN显示屏

CPU会有不止一直型号,SCREEEN显示屏也有多种类型

这时候就可以用抽象工厂对两者进行整合

package StudyJava;

// CPU和SCREEN的接口
public interface CPU {
	
	public void aCPU();

}


interface SCREEN{

	public void aSCREEN();
	
}



package StudyJava;

public class CPU_A implements CPU {

	@Override
	public void aCPU() {

		System.out.println("A型号CPU产品");
		
	}

}

class CPU_B implements CPU{

	@Override
	public void aCPU() {
		System.out.println("B型号CPU产品");
		
	}
	
}

class SCREEN_A implements SCREEN{

	@Override
	public void aSCREEN() {

		System.out.println("A型号SCREEN产品");
		
	}
	
}

class SCREEN_B implements SCREEN{

	@Override
	public void aSCREEN() {
		
		System.out.println("B型号SCREEN产品");
		
	}
	
	
}
package StudyJava;

public interface Factory {
	
	// 工厂的接口,这里的工厂接口定义为生产手机的工厂
	public CPU getCPU();
	public SCREEN getSCREEN();

}

package StudyJava;

public class Factory_A implements Factory {
	
	// 理解为A类型手机工厂,生产A类型的手机,这种手机由A型号CPU和A型号SCREEN组装而成
	// 这样就在这里可以将需要关联的两个对象创建在一起
	
	// create生产手机的时候就是会拿到对应型号的CPU和SCREEN然后进行生产
	public void create(){
		getCPU();
		getSCREEN();
	}
	
	
	@Override
	public CPU getCPU() {
		// TODO Auto-generated method stub
		return new CPU_A();
	}

	@Override
	public SCREEN getSCREEN() {
		// TODO Auto-generated method stub
		return new SCREEN_A();
	}

}

 class Factory_B implements Factory {
	
	// 理解为B类型手机工厂,生产B类型的手机,这种手机由B型号CPU和B型号SCREEN组装而成
	// 这样就在这里可以将需要关联的两个对象创建在一起
	@Override
	public CPU getCPU() {
		// TODO Auto-generated method stub
		return new CPU_B();
	}

	@Override
	public SCREEN getSCREEN() {
		// TODO Auto-generated method stub
		return new SCREEN_B();
	}

}

4.小结

工厂设计模式目的就是解耦合,开发者不再去自己创建对象,这样避免了代码维护带来的不便;由工厂动态

决定去创建拥有共同接口的一个具体类的实例

1.简单工厂的思想较为简单,不需要编写工厂接口,不需要多个工厂类,将要生产的产品信息作为参数

提供给简单工厂的静态方法,工厂判断并创建对应的对象

2.工厂方法是编写工厂接口,然后对每个产品去创建属于自己的工厂,需要产品时创建对应的工厂拿到产品

3.抽象工厂有对相关的对象关联到一起的思想,产品接口下对应不同型号的产品类,编写的工厂接口对应生产

一些产品组合后的产品,比如CPU,屏幕等组合成手机;工厂接口包含获取前一类产品对象的方法,拿到这些

产品对象就可以去“生产”手机了,工厂类的实现就是根据需要去组合CPU和屏幕,生产对应型号手机的特定工厂;

抽象工厂实现了对一组具有相同主题的工厂(需要关联的工厂)的封装:

生产手机需要CPU工厂,屏幕工厂,内存工厂等,但抽象工厂下只有一个手机工厂;

但这里的手机工厂覆盖并完成了上述工厂需要完成的所有事;

个人理解这个工厂是抽象意义上的工厂

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值