简单工厂,工厂模式和抽象工厂模式
2015-08-19 10:23
501 查看
1、简单工厂:一般使用静态工厂,常见的特征是,简单工厂中多个if、else判断语句。其类图如下:
示例代码如下:
2、工厂模式:工厂方法是为每个产品提供一个工厂,提供了一个工厂接口或者抽象类,通过不同的工厂实例来创建一个产品。其类图如下:
示例代码如下:
3、抽象工厂模式:与工厂模式相比,抽象工厂多了产品族的概念。比如,海尔空调,海尔电视,海尔冰箱就属于同一产品族。抽象工厂是在单个产品工厂的基础上加强,抽象工厂能生产同一产品族的所有产品。其类图如下:
示例代码如下:
示例代码如下:
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(); } }
相关文章推荐
- poj-3087-Shuffle'm Up-模拟
- Installing SAProuter
- Objective-C 协议(protocol)
- 【SSH2(实用文章)】--Struts2文件上传和下载的例子
- 【管理心得之五十三】招人岂能是一句话的事?
- POJ 3177 Redundant Paths(无向图缩点)
- 【TLD】标签库描述符
- U盘安装linux后无法引导
- Nginx 优化指南
- 出现error LNK2019: 无法解析的外部符号错误的诊断
- aauto学习系列之<5>:操作符
- iptables 如何只开放80 和 22端口
- Mysql项目中遇到的问题
- Linux查看系统开机时间
- 一个线程的死锁情况
- iOS设计模式——委托(delegate)
- 杂记
- leetcode - Best Time to Buy and Sell Stock
- office2013打不出字,卡住
- 升级安卓开发环境到Android Studio和Genymotion