工厂角色:
package designpattern.creation.simplefactory; /* * * 此处的工厂简单写成一个类,因为(简单工厂的工厂)不会有继承或拓展,可以不用写成接口。 */ public class Factory { public IProduct getProduct(String type) { // TODO Auto-generated method stub if (type.equals("A")) { return new ProductA(); } else if(type.equals("B")) { return new ProductA(); } /* * 如果需要增加产品,则修改此类,需要在此增加判断—— 这样就破坏了类的完整性 * —— 对修改封闭,对拓展开放! */ return null; } }
产品角色:
package designpattern.creation.simplefactory; public interface IProduct { void use(); } package designpattern.creation.simplefactory; public class ProductA implements IProduct { public void use() { // TODO Auto-generated method stub System.out.println("ProductA.use()"); } } package designpattern.creation.simplefactory; public class ProductB implements IProduct { public void use() { // TODO Auto-generated method stub System.out.println("ProductB.use()"); } }
客户端:
package designpattern.creation.simplefactory;
/**
*
* 简单工厂三因素:
* 1 工厂只有一个方法
* 2 方法有一个参数(或多个)
* 3 客户端通过向工厂的那个方法传入不同参数来获取对应的产品
*
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
IProduct product = new Factory().getProduct("A");
product.use();
IProduct product2 = new Factory().getProduct("A");
product2.use();
}
}
总结:
1 简单,理解起来简单,客户调用简单
2 破坏了开放封闭原则