【设计模式】简单工厂模式、工厂方法模式、抽象工厂模式

1 简介

  • 简单工厂模式:根据传入的参数返回需要创建的对象,而不需要知道具体类的类名。(不属于GoF设计模式)
  • 工厂方法模式:引入抽象工厂类,将具体产品的创建过程封装在其子类中,即具体工厂类中。增加新的具体产品类时,只需增加一个相应的具体工厂类。(1个具体工厂只需生产1种具体产品)
  • 抽象工厂模式:相较于工厂方法模式,抽象工厂模式中的具体工厂可以生产相关的一组具体产品,这样的一组产品称之为产品族,产品族中的每一个产品都分属于某一个产品继承等级结构

2 简单工厂模式

        产品(Product) 

public interface Product {
	public void show();
}

public class ProductA implements Product{
	@Override
	public void show() {
		System.out.println("I am A");
	}
}

public class ProductB implements Product{	
	@Override
	public void show() {
		System.out.println("I am B");
	}
}

        工厂(Factory) 

public class Factory {
	public static Product produce(String type) {
		if(type.equals("A")) {
			return new ProductA();
		}else if(type.equals("B")) {
			return new ProductB();
		}else {
			return null;
		}
	}
}

        客户端(Client)

public class Client {
	public static void main(String[] args) {
		Product product1=Factory.produce("A");
		Product product2=Factory.produce("B");
		product1.show();
		product2.show();
	}
}

3 工厂方法模式

        产品(Product)

public interface Product {
	public void show();
}

public class ProductA implements Product{
	@Override
	public void show() {
		System.out.println("I am A");
	}
}

public class ProductB implements Product{	
	@Override
	public void show() {
		System.out.println("I am B");
	}
}

        工厂(Factory)

public interface Factory {	
	public Product produce();
}

public class Factory1 implements Factory {
	@Override
	public Product produce() {
		return new ProductA();
	}
}

public class Factory2 implements Factory {
	@Override
	public Product produce() {
		return new ProductB();
	}
}

        客户端(Client)

public class Client {
	public static void main(String[] args) {
		Factory factoryA=new Factory1();
		Product product1=factoryA.produce();
		product1.show();
		
		Factory factoryB=new Factory2();
		Product product2=factoryB.produce();
		product2.show();
	}
}

4 抽象工厂模式

        产品族A(ProductA)

public interface ProductA {
	public void showA();
}

public class ProductA1 implements ProductA{
	@Override
	public void showA() {
		System.out.println("I am A1");
	}
}

public class ProductA2 implements ProductA{
	@Override
	public void showA() {
		System.out.println("I am A2");
	}
}

        产品族B(ProductB) 

public interface ProductB {
	public void showB();
}

public class ProductB1 implements ProductB{	
	@Override
	public void showB() {
		System.out.println("I am B1");
	}
}

public class ProductB2 implements ProductB{	
	@Override
	public void showB() {
		System.out.println("I am B2");
	}
}

        工厂(Factory)

public interface Factory {
	public abstract ProductA produceA();
	public abstract ProductB produceB();
}

public class Factory1 implements Factory {
	@Override
	public ProductA produceA() {
		return new ProductA1();
	}
	@Override
	public ProductB produceB() {
		return new ProductB1();
	}
}

public class Factory2 implements Factory {
	@Override
	public ProductA produceA() {
		return new ProductA2();
	}
	@Override
	public ProductB produceB() {
		return new ProductB2();
	}
}

        客户端(Client)

public class Client {
	public static void main(String[] args) {
		Factory factory1=new Factory1();
		ProductA productA1=factory1.produceA();
		ProductB productB1=factory1.produceB();
		productA1.showA();
		productB1.showB();
		
		Factory factory2=new Factory2();
		ProductA productA2=factory2.produceA();
		ProductB productB2=factory2.produceB();
		productA2.showA();
		productB2.showB();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little_fat_sheep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值