您的位置:首页 > 其它

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

2015-08-19 10:23 501 查看
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: