java工厂模式学习

网上列子,创造三种不同的人

静态工程模式:

public interface Human {	
	public void getColor();//人有不同的颜色	
	public void talk(); //人会说话
}

Human接口的不同实现:

public class BlackHuman implements Human {// 黑种人
 
	@Override
	public void getColor() {
		System.out.println("Black");
	}
	@Override
	public void talk() {
		System.out.println("Black man");
	}
}
public class Human implements Human {	//黄种人
 
	@Override
	public void getColor() {
		System.out.println("Yellow");
	}
	@Override
	public void talk() {
		System.out.println("Yellow man");
	}
}
public class WhiteHuman implements Human {//白种人
 
	@Override
	public void getColor() {
		System.out.println("White");
	}
	@Override
	public void talk() {
		System.out.println("White man");
	}
}

模型:必须传入Human的实现类

public abstract class AbstractHumanFactory{
	public abstract <T extends Human> T createHuman(Class<T> clazz); //注意这里T必须是Human的实现类才行,因为要造Human嘛
}

实现具体模型:

public class HumanFactory extends AbstractHumanFactory {
 
	@Override
	public <T extends Human> T createHuman(Class<T> clazz) {
		Human human = null;
		try {
			human = (Human) Class.forName(clazz.getName()).newInstance();
		} catch (Exception e) { //异常处理
			System.out.println("人种产生错误");
		}
		return (T) human;
	}
}

工厂具体的生产:

public class FactoryTest {
	public static void main(String[] args) {
		AbstractHumanFactory bagualu = new HunmanFactory();
		Human blackMan = bagualu.createHuman(BlackHuman.class); //黑人诞生了
 		Human yellowMan = bagualu.createHuman(YelloHuman.class); //黄人诞生了
		Human whiteMan = bagualu.createHuman(WhiteHuman.class); //白人诞生了
	  }
}

抽象工厂模式的实现:

不同的厂商分别生产各自的手机:

//其中的method()方法可看作提取出不同产品的共性,如手机都有类似的功能 
interface IProductA {
	public void method();
}

厂商1: 

// 由于已经设计好A1由厂商1生产,故以下输出代码有“厂商x”
class ProductA1 implements IProductA {
	public void method() {
		System.out.println("厂商1    生产ProductA1 ...");
	}
}
 

厂商2: 

class ProductA2 implements IProductA {
	public void method() {
		System.out.println("厂商2    生产ProductA2 ...");
	}
}

// 每一种牌子的产品生产工厂,即不同的厂商负责自己牌子产品的生产:

abstract class Factory1 {
	abstract IProductA getProductA1();

}
abstract class Factory2 {
	abstract IProductA getProductA2();
 
}

// 具体的工厂用来生产相关的产品

class ConcreteFactory1 extends Factory1 {
	public IProductA getProductA1() {
		return new ProductA1();
	}
 

}

class ConcreteFactoryB extends Factory2 {
	public IProductA getProductA2() {
		return new ProductA2();
	}
 
}
// 测试类
public class Client {
	public static void main(String[] args) {
		// 厂商1负责生产产品A1
		Factory1 factory1 = new ConcreteFactory1();
		IProductA productA1 = factory1.getProductA1();
		productA1.method();
		
 
		// 厂商2负责生产产品A2
		Factory2 factory2 = new ConcreteFactoryB();
		IProductA productA2 = factory2.getProductA2();
		productA2.method();
		
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值