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();
}
}
示例代码如下:
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();
}
}