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

来源:互联网 发布:java 高级编程 书籍 编辑:程序博客网 时间:2024/05/20 19:45

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{@Overridepublic void startUp() {System.out.println("TV start up");}@Overridepublic void shutDown() {System.out.println("TV shut down");}}

package com.peacentury.simpleFactory;public class AirConditioner implements ESet{@Overridepublic void startUp() {System.out.println("AirConditioner start up");}@Overridepublic 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{@Overridepublic void startUp() {System.out.println("TV start up");}@Overridepublic void shutDown() {System.out.println("TV shut down");}}


package com.peacentury.factory;public class AirConditioner implements ESet{@Overridepublic void startUp() {System.out.println("AirConditioner start up");}@Overridepublic 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 {@Overridepublic ESet getProduct() {return new TV();}}

package com.peacentury.factory;public class AirConditionerFactory implements Factory{@Overridepublic 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 {@Overridepublic void startUp() {System.out.println("HaierAirConditoner start up");}@Overridepublic void shutDown() {System.out.println("HaierAirConditioner shut down");}}

package com.peacentury.abstractFactory;public class MideaAirConditioner implements AirConditioner {@Overridepublic void startUp() {System.out.println("MideaAirConditioner start up");}@Overridepublic void shutDown() {System.out.println("MideaAirConditioner shut down");}}

package com.peacentury.abstractFactory;public class HaierFridge implements Fridge {@Overridepublic void startUp() {System.out.println("HaierFridge start up");}@Overridepublic void shutDown() {System.out.println("HaierFridge shut down");}}

package com.peacentury.abstractFactory;public class MideaFridge implements Fridge {@Overridepublic void startUp() {System.out.println("MideaFridge start up");}@Overridepublic void shutDown() {System.out.println("MideaFridge shut down");}}

package com.peacentury.abstractFactory;public class HaierTV implements TV {@Overridepublic void startUp() {System.out.println("HaierTV start up");}@Overridepublic void shutDown() {System.out.println("HaierTV shut down");}}

package com.peacentury.abstractFactory;public class MideaTV implements TV {@Overridepublic void startUp() {System.out.println("MideaTV start up");}@Overridepublic 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 {@Overridepublic AirConditioner getAirConditioner() {return new HaierAirConditioner();}@Overridepublic Fridge getFridge() {return new HaierFridge();}@Overridepublic TV getTV() {return new HaierTV() ;}}

package com.peacentury.abstractFactory;public class MideaFactory implements Factory {@Overridepublic AirConditioner getAirConditioner() {return new MideaAirConditioner();}@Overridepublic Fridge getFridge() {return new MideaFridge();}@Overridepublic 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();}}




0 0
原创粉丝点击