简单工厂,工厂模式和抽象工厂模式

1、简单工厂:一般使用静态工厂,常见的特征是,简单工厂中多个if、else判断语句。其类图如下:


示例代码如下:

package com.peacentury.simpleFactory;

public interface ESet {
	public void startUp();
	public void shutDown();
}


package com.peacentury.simpleFactory;

public class TV implements ESet{
	@Override
	public void startUp() {
		System.out.println("TV start up");
	}
	
	@Override
	public void shutDown() {
		System.out.println("TV shut down");
	}
}

package com.peacentury.simpleFactory;

public class AirConditioner implements ESet{
	
	@Override
	public void startUp() {
		System.out.println("AirConditioner start up");
	}
	
	@Override
	public void shutDown() {
		System.out.println("AirConditioner shut down");		
	}
	
}

package com.peacentury.simpleFactory;

class SimpleFactory {  
    //静态工厂方法  
    public static ESet getProduct(String arg) {  
    	ESet product = null;  
        if (arg.equalsIgnoreCase("TV")) {  
            product = new TV();  
        }  
        else if (arg.equalsIgnoreCase("AirConditioner")) {  
            product = new AirConditioner();  
        }  
        return product;  
    }  
}  

package com.peacentury.simpleFactory;

public class Client {
	public static void main(String args[]) {  
        ESet product;   
        product = SimpleFactory.getProduct("TV"); //通过工厂类创建产品对象  
        product.startUp();  
        product.shutDown();  
    }  
}


2、工厂模式:工厂方法是为每个产品提供一个工厂,提供了一个工厂接口或者抽象类,通过不同的工厂实例来创建一个产品。其类图如下:


示例代码如下:

package com.peacentury.factory;

public interface ESet {
	public void startUp();
	public void shutDown();
}

package com.peacentury.factory;

public class TV implements ESet{
	@Override
	public void startUp() {
		System.out.println("TV start up");
	}
	
	@Override
	public void shutDown() {
		System.out.println("TV shut down");
	}
}


package com.peacentury.factory;

public class AirConditioner implements ESet{
	
	@Override
	public void startUp() {
		System.out.println("AirConditioner start up");
	}
	
	@Override
	public void shutDown() {
		System.out.println("AirConditioner shut down");		
	}
	
}

package com.peacentury.factory;

public interface Factory {
	public ESet getProduct();
}

package com.peacentury.factory;

public class TVFactory implements Factory {
	@Override
	public ESet getProduct() {
		return new TV();
	}

}

package com.peacentury.factory;

public class AirConditionerFactory implements Factory{
	@Override
	public ESet getProduct() {
		return new AirConditioner();
	}
}


package com.peacentury.factory;

public class Client {
	public static void main(String args[]) {
		Factory factory;
		ESet product;
		
		factory = new TVFactory();//可以通过配置文件确定
		product = factory.getProduct();
		product.startUp();
		product.shutDown();
	}
}

3、抽象工厂模式:与工厂模式相比,抽象工厂多了产品族的概念。比如,海尔空调,海尔电视,海尔冰箱就属于同一产品族。抽象工厂是在单个产品工厂的基础上加强,抽象工厂能生产同一产品族的所有产品。其类图如下:


示例代码如下:

package com.peacentury.abstractFactory;

public interface AirConditioner {
	
	public void startUp();
	public void shutDown();
}

package com.peacentury.abstractFactory;

public interface Fridge {
	
	public void startUp();
	public void shutDown();
}

package com.peacentury.abstractFactory;

public interface TV {
	
	public void startUp();
	public void shutDown();
}

package com.peacentury.abstractFactory;

public class HaierAirConditioner implements AirConditioner {

	@Override
	public void startUp() {
		System.out.println("HaierAirConditoner start up");
	}

	@Override
	public void shutDown() {
		System.out.println("HaierAirConditioner shut down");
	}

}

package com.peacentury.abstractFactory;

public class MideaAirConditioner implements AirConditioner {

	@Override
	public void startUp() {
		System.out.println("MideaAirConditioner start up");
	}

	@Override
	public void shutDown() {
		System.out.println("MideaAirConditioner shut down");
	}

}

package com.peacentury.abstractFactory;

public class HaierFridge implements Fridge {

	@Override
	public void startUp() {
		System.out.println("HaierFridge start up");
	}

	@Override
	public void shutDown() {
		System.out.println("HaierFridge shut down");
	}
}

package com.peacentury.abstractFactory;

public class MideaFridge implements Fridge {

	@Override
	public void startUp() {
		System.out.println("MideaFridge start up");
	}

	@Override
	public void shutDown() {
		System.out.println("MideaFridge shut down");
	}
}

package com.peacentury.abstractFactory;

public class HaierTV implements TV {

	@Override
	public void startUp() {
		System.out.println("HaierTV start up");
	}

	@Override
	public void shutDown() {
		System.out.println("HaierTV shut down");
	}
}

package com.peacentury.abstractFactory;

public class MideaTV implements TV {

	@Override
	public void startUp() {
		System.out.println("MideaTV start up");
	}

	@Override
	public void shutDown() {
		System.out.println("MideaTV shut down");
	}
}

package com.peacentury.abstractFactory;

public interface Factory {
	
	public AirConditioner getAirConditioner();
	public Fridge getFridge();
	public TV getTV();
}

package com.peacentury.abstractFactory;

public class HaierFactory implements Factory {

	@Override
	public AirConditioner getAirConditioner() {
		return new HaierAirConditioner();
	}

	@Override
	public Fridge getFridge() {
		return new HaierFridge();
	}

	@Override
	public TV getTV() {
		return new HaierTV() ;
	}
}

package com.peacentury.abstractFactory;

public class MideaFactory implements Factory {

	@Override
	public AirConditioner getAirConditioner() {
		return new MideaAirConditioner();
	}

	@Override
	public Fridge getFridge() {
		return new MideaFridge();
	}

	@Override
	public TV getTV() {
		return new MideaTV() ;
	}
}

package com.peacentury.abstractFactory;

public class Client {
	public static void main(String args[]) {
		Factory factory;
		AirConditioner ac;
		Fridge fridge;
		TV tv;
		
		factory = new HaierFactory();//可以通过配置文件确定
		ac = factory.getAirConditioner();
		fridge = factory.getFridge();
		tv=factory.getTV();
	
		ac.startUp();
		fridge.startUp();
		tv.startUp();
		
		ac.shutDown();
		fridge.shutDown();
		tv.shutDown();
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值